天天看點

k8s搭建-安裝Kubernetes叢集(三)安裝 Kubernetes叢集

安裝 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指令,再次進行安裝。

繼續閱讀