30分鐘部署k8s叢集
阿新 • • 發佈:2021-07-02
前言:
部署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