一、概述

在安装k8s前需要一系列的前置准备工作,并且集群化所有节点服务器都需要做同样的操作,工作麻烦,使用ansible-playbook可以流程化这些前置工作。安装k8s可以参考Rancher部署k8s集群

二、环境

机器名

Ip地址

备注

ansible

172.16.5.219

ansbile宿主机

k8smaster

172.16.5.206

管理节点 master

k8sworker01

172.16.5.207

工作节点 worker

k8sworker02

172.16.5.208

工作节点 worker

三、实现逻辑

安装k8s前准备工作:
升级Linux内核—>时间同步—>hostname主机名设置—>etc/hosts文件配置—>关闭防火墙firewalld—>关闭selinux—>关闭swap—>安装docker
使用ansible-playbook进行流程化管理这些流程,一体化部署实施
文件结构目录:



实现流程:

四、代码

k8s.yml

---
- hosts: k8s
  remote_user: root
 
  tasks:
    - name: ”升级Linux内核“
      script: updateLinuxcore.sh
    - name: “查看内核启动顺序”
      shell: awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
      register: viewLinuxCore_out
    - debug:
        var: viewLinuxCore_out.stdout_lines

    - name: “时间同步ntp”
      script: installntp.sh
    - name: “查看ntpd状态”
      shell: systemctl status ntpd
      register: ntpStatus_out
    - debug:
        var: ntpStatus_out.stdout_lines
       
    - name: “修改主机名”
      shell: hostnamectl set-hostname {{ hostname|quote }}
      tags: sethostname
    - name: “查看主机名”
      shell: hostname
      register: hostname_out
    - debug:
        var: hostname_out.stdout_lines

    - name: “修改 /etc/hosts”
      copy: src=/etc/hosts dest=/etc/hosts
      tags: sethosts
    
    - name: "关闭防火墙"
      systemd: 
        name: firewalld
        state: stopped
        enabled: no
      tags: stopfirewalld
    - name: "关闭selinux"
      shell: setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
      tags: stopselinux

    - name: "关闭swap"
      lineinfile: 
        dest: /etc/fstab
        regexp: '^swap'
        insertafter: '^swap'
        line: '#'
      tags: closeswap
   
    - name: "安装docker"
      script: installdocker.sh
    
    - name: "安装完成,进行重启"
      reboot:
        reboot_timeout: 3000


updateLinuxcore.sh

#! /bin/bash
#导入ELRepo仓库的公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#为yum安装ELRepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新内核
yum --enablerepo=elrepo-kernel -y install kernel-ml

# 查看当前可用内核
#sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
#升级
grub2-set-default 0

installntp.sh

#! /bin/bash

#查看系统时间
timedatectl 
#设置北京时间
timedatectl set-timezone Asia/Shanghai
#安装ntp服务
yum install -y ntp

echo -e 'SYNC_HWCLOCK=yes\nOPTIONS="-g -x"'> /etc/sysconfig/ntpd

#启动ntp服务,开机自启动
systemctl restart ntpd && systemctl enable ntpd


installdocker.sh

#! /bin/bash

yum install -y yum-utils
# 添加yum源,这里添加的是阿里云的yum源
yum-config-manager  --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum  -y install docker
# 设置国内镜像加速,你也可以用自己的仓库镜像,这里是我申请的阿里云个人加速镜像
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fuchp8pk.mirror.aliyuncs.com"]
}
EOF
# 导入镜像设置
systemctl daemon-reload
# 启动docker
systemctl restart docker
# 设置docker开机启动
systemctl enable docker

五、总结

ansible工具对于这种繁琐工作实现起来很便捷,使用yaml文件使流程文件化,可以进行复制操作,下面几个shell脚本很简单,自行复制后可以优化流程,添加判断,让整体流程可以反复执行操作,k8s.yml文件还可以添加when判断进行优化。