安裝 Kubernetes叢集
1、首先配置yum源
官方yum源的位址為 https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64。
如果無法通路官方yum源的位址,則也可以使用國内的一個yum源,位址為 http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/。
yum源的配置檔案/etc/yum.repos.d/kubernetes.repo的内容如下:
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
2、安裝kubeadm和相關工具
運作yum install指令安裝kubeadm和相關工具:
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
啟動Docker服務和kubelet服務,并設定為開機自動啟動:
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
3、kubeadm config
kubeadm已經進入GA階段,其控制面初始化和加入節點步驟都支援 大量的可定制内容,是以kubeadm還提供了配置檔案功能用于複雜定制。同時,kubeadm将配置檔案以ConfigMap的形式儲存到叢集之中, 便于後續的查詢和更新工作。kubeadm config子指令提供了對這一組功能的支援:
序号 | 指令 | 說明 |
---|---|---|
1 | kubeadm config upload from-file | 由配置檔案上傳到叢集中生 成ConfigMap |
2 | kubeadm config upload from-flags | 由配置參數生成ConfigMap |
3 | kubeadm config view | 檢視目前叢集中的配置值 |
4 | kubeadm config print init-defaults | 輸出kubeadm init預設參數檔案的内容 |
5 | kubeadm config print join-defaults | 輸出kubeadm join預設參數檔案的内容 |
6 | kubeadm config migrate | 在新舊版本之間進行配置轉換 |
7 | kubeadm config images list | 列出所需的鏡像清單 |
8 | kubeadm config images pull | 拉取鏡像到本地 |
執行kubeadm config print init-defaults,可以取得預設的初始化參數檔案:
kubeadm config print init-defaults > init.defaults.yaml
修改預設配置檔案init.defaults.yaml
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.21.0
apiServer:
timeoutForControlPlane: 4m0s
networking:
dnsDomain: cluster.local
serviceSubnet: 192.168.0.0/16
scheduler: {}
4、下載下傳k8s的相關鏡像
使用config images pull子指令下載下傳所需鏡像
kubeadm config images pull --config=init.defaults.yaml
報錯,主要錯誤:
Kubernetes version: v1.21.1,依賴/coredns/coredns:v1.8.0,registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 不存在
本地執行以下指令:
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0
5、安裝Master
運作
kubeadm init
指令安裝Master
kubeadm init --config=init.defaults.yaml
這裡需要注意kubeadm init指令執行完成後的最後幾行提示資訊,其中包含加入節點的指令(kubeadm join)和所需的Token。
按照提示執行下面的指令,複制配置檔案到普通使用者的home目錄 下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
這樣就在Master上安裝了Kubernetes,但在叢集内還是沒有可用的 工作Node,并缺乏對容器網絡的配置。
用kubectl指令檢視ConfigMap:
kubectl get -n kube-system configmap
可以看到其中生成了名為kubeadm-config的ConfigMap對象。
6、安裝Node,加入叢集
對于新節點的添加,系統準備和Kubernetes yum源的配置過程是一緻的,在Node主機上執行下面的安裝過程。
這裡直接一鍵安裝
6.1、建立init-k8s.sh檔案
vim init-k8s.sh
#!/bin/bash
tee /etc/yum.repos.d/kubernetes.repo <<-'EOF'
[kubernetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
if [ $? = 0 ];then
echo "依賴包安裝完成"
else
echo "依賴包安裝失敗,正在退出..."
exit 1
fi
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
添加執行權限
chmod a+x init-k8s.sh
執行一鍵安裝檔案
./init-k8s.sh
6.2、切換到master節點操作
- 生成token
kubeadm token generate
- 根據token輸出添加指令
6.3、将本Node加入叢集
執行kubeadm join指令(上一步中生成的指令),将本Node加入叢集:
kubeadm join 192.168.200.110:6443 --token q0781o.36hkdmnw191g7s9g --discovery-token-ca-cert-hash sha256:c33ef39298513eb8c7879ee21f58eac314c0e22de35465e4a717efd31e9ef9d8
kubeadm在Master上也安裝了kubelet,在預設情況下并不參與工作 負載。如果希望安裝一個單機All-In-One的Kubernetes環境,則可以執行 下面的指令(删除Node的Label“node-role.kubernetes.io/master”),讓Master成為一個Node:
kubectl taint nodes --all node-role.kubernetes.io/master-
7、安裝網絡插件
執行
kubectl get nodes
指令,會發現Kubernetes提示Master為 NotReady狀态,這是因為還沒有安裝CNI網絡插件:
kubectl get nodes
下面根據kubeadm的提示安裝CNI網絡插件。對于CNI網絡插件,可以有許多選擇,請參考https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network的說明。
例如,選擇weave插件,執行下面的指令即可一鍵完成安裝:
8、驗證叢集是否安裝完成
執行下面的指令,驗證Kubernetes叢集的相關Pod是否都正常建立并運作:
kubectl get pods --all-namespaces
如果發現有狀态錯誤的Pod,則可以執行
kubectl --namespace=kube-system describe pod<pod_name>
來檢視錯誤原因,常見的錯誤原因是鏡像沒有下載下傳完成。
至此,通過kubeadm工具就實作了Kubernetes叢集的快速搭建。如果安裝失敗,則可以執行kubeadm reset指令将主機恢複原狀,重新執行kubeadm init指令,再次進行安裝。