使用kubeasz離線安裝K8S
1、下載離線包
找一臺能夠聯網的機器下載所需安裝包
下載工具腳本ezdown,舉例使用kubeasz版本3.6.0
export release=3.6.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
下載kubeasz代碼、二進制、默認容器鏡像
./ezdown -D
如果需要更多組件,請下載額外容器鏡像(cilium,flannel,prometheus等)
./ezdown -X flannel
./ezdown -X prometheus
...
下載離線系統包 (適用于無法使用yum/apt倉庫情形)
./ezdown -P centos_7(可選)
腳本運行成功后,所有文件(kubeasz代碼、二次制作、離線鏡像)均已整理好放入目錄/etc/kubeasz
/etc/kubeasz 包含 kubeasz 版本為 ${release} 的發布代碼 /etc/kubeasz/bin 包含 k8s/etcd/docker/cni 等二進制文件 /etc/kubeasz/down 包含集群安裝時需要的離線容器鏡像 /etc/kubeasz/down/packages 包含集群安裝時需要的系統基礎軟件
2、離線服務器部署
##關閉防火墻 systemctl stop firewalld ##禁止防火墻開機啟動 systemctl disable firewalld ##永久關閉selinux 注:重啟機器后,selinux配置才能永久生效 sed -i 's/enforcing/disabled/' /etc/selinux/config ##臨時關閉selinux 執行getenforce 顯示Disabled說明selinux已經關閉 setenforce 0 ##永久關閉交換分區swap 注:重啟機器后,才能永久生效 sed -ri 's/.*swap.*/#&/' /etc/fstab ##臨時關閉交換分區swap swapoff -a
上述下載完成后,把/etc/kubeasz整個目錄復制到目標離線服務器相同目錄,然后在離線服務器先部署docker,不然啟動kubeasz 容器報錯

離線安裝docker:http://www.rzrgm.cn/sxFu/p/14142501.html
設置參數允許離線安裝系統軟件包
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
在/etc/kubeasz目錄下執行:
檢查所需安裝包是否已經完畢
cd /etc/kubeasz
./ezdown -D
啟動 kubeasz 容器
./ezdown -S
#進入容器
docker exec -it kubeasz /bin/bash
# 創建新集群 k8s-01

然后根據提示配置'/etc/kubeasz/clusters/k8s-01/hosts' 和 '/etc/kubeasz/clusters/k8s-01/config.yml':根據節點規劃修改hosts 文件和其他集群層面的主要配置選項;其他集群組件等配置項可以在config.yml 文件中修改。
修改hosts文件
其中hosts文件中按規劃調整了etcd、kube_master、kube_node三處位置的服務器IP,注意這里只能使用IP,不能使用hostname;另外CONTAINER_RUNTIME應該設置為containerd,CLUSTER_NETWORK設置為calico,其它配置可保持不變。
CONTAINER_RUNTIME="containerd" CLUSTER_NETWORK="calico"
注:config.yml文件中ETCD_DATA_DIR CONTAINERD_STORAGE_DIR KUBELET_ROOT_DIR選項默認存儲在/var/lib/目錄下,部署時根據實際情況更改目錄
配置ssh免密
ssh-copy-id $node1_ip
ssh-copy-id $node2_ip
一鍵安裝(k8s-01可以自定義命名)
docker exec -it kubeasz ezctl setup k8s-01 all
如果執行報錯,是因為/etc/kubeasz/clusters/k8s-01/hosts文件中使用的python解釋器為ansible_python_interpreter=/usr/bin/python3,而有的機器沒有python3,需修改為:
ansible_python_interpreter=/usr/bin/python
fatal: [192.168.71.149]: FAILED! => {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.setup": {"failed": true, "module_stderr": "/bin/sh: /usr/bin/python3: No such file or directory\n", "module_stdout": "", "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error", "rc": 127}}, "msg": "The following modules failed to execute: ansible.legacy.setup\n"}

再次執行
docker exec -it kubeasz ezctl setup k8s-01 all

如果遇到拉起calico容器時報錯

1是因為拉起calico容器耗時較久,解決方案:修改/etc/kubeasz/roles/calico/tasks/main.yml文件中的輪詢次數
2是查看系統內核,linux 3.10版本的內核不支持網絡插件Calico3.23等版本,需內核版本5.1及以上(此處為centos7 升級內核操作)
uname -a #安裝所需軟件包 yum install -y perl wget #下載所需內核版本的 RPM 包,更多版本可以從中尋找(http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/) wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64.rpm # 卸載舊版工具(安裝kernel-lt-tools會和舊版本的kernel-tools導致沖突,需要卸載舊版本的) yum remove kernel-tools kernel-tools-libs -y #安裝下載的 RPM 包 rpm -ivh kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm #驗證安裝,可以看到新版本的和舊版本的 rpm -qa | grep kernel kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64 kernel-3.10.0-1160.el7.x86_64 kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64 kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64 kernel-lt-5.4.278-1.el7.elrepo.x86_64 #查看默認啟動順序 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (5.4.278-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) 2 : CentOS Linux (0-rescue-1dab4e7c87a5456480b08e70172d44ac) 7 (Core) #設置默認啟動內核順序 grub2-set-default 0 #重啟 reboot #重啟后進行檢查是否成功切換到新內核 uname -r 5.4.278-1.el7.elrepo.x86_64
清理集群
docker exec -it kubeasz ezctl destroy k8s-01
修改完后繼續執行一鍵部署命令
查看最后結果

查看節點狀態,可以看到各節點就緒 (Ready) 狀態、角色、運行時間以及版本號
kubectl get nodes

查看組件狀態,可以看到scheduler/controller-manager/etcd組件狀態為Healthy
kubectl get cs

查看所有pod狀態,默認已安裝網絡插件calico、coredns、metrics-server
kubectl get po --all-namespaces

查看svc狀態
kubectl get svc --all-namespaces

登錄dashboard界面

從master節點查看token并使用token登陸(這里為了方便,我們可以直接使用admin-user的token)
# 查看含有token的secret [root@master-01 k8s-01]# kubectl get secret -n kube-system NAME TYPE DATA AGE admin-user kubernetes.io/service-account-token 3 18m calico-etcd-secrets Opaque 3 19m dashboard-read-user kubernetes.io/service-account-token 3 18m kubernetes-dashboard-certs Opaque 0 18m kubernetes-dashboard-csrf Opaque 1 18m kubernetes-dashboard-key-holder Opaque 2 18m # 查看admin-user對應的token [root@master-01 k8s-01]# kubectl describe secret -n kube-system admin-user Name: admin-user Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: admin-user kubernetes.io/service-account.uid: f6fc7af9-9168-45d5-8dbd-f09cc5adb8a8 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1310 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImJFSGVFeTJleWlWVFY0bm1SWF9RMXZPZWxlYi1wbDNXM2ZuSkJ1YUw5RWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNmZjN2FmOS05MTY4LTQ1ZDUtOGRiZC1mMDljYzVhZGI4YTgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.HNp3Yd39_NQnG2rW6bXf3QnIYC2WjA13Mv1DKQp3pp7EWq_mXtmrG_7yuHavdpq0GQcplfpX0lsb6yIxMaSj-LBJeiSUbBgRkmvYBOGUnz0-J4Eekvw2km41CJf-xPEFCE_fPTAQNbhzevcUJp3WOtPzd6WFNB9tum_eaL8wfSo982ezETnKrfyz8zeAIzix3IzfzjQoFZdKhCgA9aLiNKgKeotroCAFFrgy7KyvvyC140xpisGtkd6lslg_8i3oGTzG2rG5QlBeCXb93cYFfDc9bf0Ei67gKTCw9nNKbms_bQC8eOmDiJMKYzJjbxlBS-8AfaGnrl_7CL_5lKsG5Q

使用token登錄

【參考:https://github.com/easzlab/kubeasz】

浙公網安備 33010602011771號