1. 程式人生 > 其它 >30分鐘部署k8s叢集

30分鐘部署k8s叢集

前言:

部署k8s的方式有很多,之前使用二進位制方式,步驟很多,多次部署不是很方便。看到官網推薦kubespray工具,嘗試之後就依賴上了。kubespray使用ansible編寫,閱讀起來比較方便,根據自身需求修改安裝引數。同時支援解除安裝,擴容,易於後期管理。缺點就是所有的映象地址在外頭,不想修改地址的話,需要先準備好映象。

準備環境:

此次在測試環境安裝,準備了6臺機器

  • control 這臺機器只做安裝機器,和k8s叢集沒有關係
  • k8s-master-1
  • k8s-master-2
  • k8s-node-1

另兩臺備用,測試擴容

登入到control機器進行安裝操作

安裝ansible

$ yum install -y epel-release 
$ yum install -y ansible vim wget unzip

配置/etc/ansible/hosts

[k8s-master]
k8s-master-1 ansible_ssh_host=192.168.16.28
k8s-master-2 ansible_ssh_host=192.168.16.29
[k8s-node]
k8s-node-2 ansible_ssh_host=192.168.16.33
[k8s:children]
k8s-master
k8s-node

生成ssh 金鑰

$ssh-keygen -t rsa 
#一直回車

對所有機器免密

$ ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub')}}' path='/root/.ssh/authorized_keys' manage_dir=no" --ask-pass -c paramiko
# 可能要多次輸入yes

# 測試一下是否全部成功
$ ansible all -m ping

對其他機器進行一些基礎安裝和配置,依然在control操作,可以把下面寫到指令碼中(basic.sh)執行

#!/bin/sh
ansible all -m shell -a "cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime"
ansible all -m yum -a "name=ntpdate state=present"
ansible all -m yum -a "name=unzip state=present"
ansible all -m yum -a "name=wget state=present"
ansible all -m shell -a "ntpdate ntp1.aliyun.com"
ansible all -m systemd -a "name=firewalld state=stopped enabled=False"
ansible all -m shell -a "setenforce 0"
ansible all -m lineinfile -a "dest=/etc/selinux/config regex=enforcing$ line=SELINUX=disabled"
ansible k8s -m shell -a "swapoff -a "
ansible k8s -m shell -a "sed -i /swap/s/^/#/ /etc/fstab"

下載kubespray

地址:wget https://github.com/kubernetes-sigs/kubespray/archive/v2.15.1.tar.gz

$ yum install -y python36 python36-devel python36-pip python-netaddr;

$ unzip kubespray-2.15.1.zip;
$ cd kubespray-2.15.1 && pip3 install -r requirements.txt;

$ declare -a IPS=(192.168.16.28 192.168.16.29 192.168.16.33 );

$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
#mycluster目錄不存在,需要複製一份inventory/sample

上傳提前下載的映象和安裝包

$ ls 
basic.sh fetch.sh docker-rpm.zip  kubespray-2.15.1.zip  kubespray-images.zip  load_images.sh  releases.zip

這些是我提前準備好的,basic.sh就是上面初始化機器指令碼,docker-rpm.zip,kubespray-images.zip,releases.zip打包的映象和安裝包,fetch.sh 是分發映象的指令碼,load_images.sh是匯入映象的指令碼。

$ cat fetch.sh
#!/bin/sh
for i in docker-rpm.zip kubespray-images.zip releases.zip
do
ansible k8s -m unarchive -a "copy=yes src=$i dest=/tmp/"
done
```shell
```shell
$ cat load_images.sh
#!/bin/sh
for i in `ls /tmp/docker-rpm`;do yum install -y /tmp/docker-rpm/$i;done

echo "docker 安裝完成"

systemctl start docker && systemctl enable docker
sleep 5;
echo "匯入映象"

for i in `ls /tmp/kubespray-images`;do docker load -i /tmp/kubespray-images/$i;done

這個指令碼有時候執行失敗,再此執行又好了

$ ansible k8s -m script -a "./load_images.sh"

執行安裝

所有工作做完就可以安裝了

$ cd kubespray-2.15.1;
$ ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml

安裝過程要持續十幾分鍾,中間出錯,就針對錯誤進行排錯,可以多次執行。

重置安裝

$ ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root reset.yml