天天看點

使用kubeadm工具快速安裝Kubernetes叢集

使用kubeadm工具快速安裝Kubernetes叢集

1.安裝前準備

關閉防火牆;關閉SELinux;關閉Swap交換分區:swapoff -a;master與node之間ssh免密登入;同步NTP時間;所有IP均能通路外網。操作過程略。

2.安裝kubernetes

2.1 安裝kubeadm和相關工具(所有節點都執行)

首先配置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的内容如下:

[kubernetes]
​
name=Kubernetes Respository
​
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
​
enabled=1
​
gpgcheck=0
           

然後運作yum install指令安裝kubeadm和相關工具:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
           

運作下面的指令,啟動Docker服務(如果已安裝Docker,則無須再次啟動)和kubelet服務,并設定為開機自動啟動:

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
           

2.2 kubeadm config(master節點執行)

kubeadm已經進入GA階段,其控制面初始化和加入節點步驟都支援大量的可定制内容,是以kubeadm還提供了配置檔案功能用于複雜定制。同時,kubeadm将配置檔案以ConfigMap的形式儲存到叢集之中,便于後續的查詢和更新工作。kubeadm config子指令提供了對這一組功能的支援:

◎ kubeadm config upload from-file:由配置檔案上傳到叢集中生成ConfigMap。

◎ kubeadm config upload from-flags:由配置參數生成ConfigMap。

◎ kubeadm config view:檢視目前叢集中的配置值。

◎ kubeadm config print init-defaults:輸出kubeadm init預設參數檔案的内容。

◎ kubeadm config print join-defaults:輸出kubeadm join預設參數檔案的内容。

◎ kubeadm config migrate:在新舊版本之間進行配置轉換。

◎ kubeadm config images list:列出所需的鏡像清單。

◎ kubeadm config images pull:拉取鏡像到本地。

例如,執行kubeadm config print init-defaults,可以取得預設的初始化參數檔案:

kubeadm config print init-defaults > init-defaults.yaml
           

對生成的檔案進行編輯,可以按需生成合适的配置。例如,若需要定制鏡像倉庫的位址,以及Pod的位址範圍,則可以使用如下配置,儲存為init-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: v1.18.0
networking:
  podSubnet: 10.100.0.0/16
           

2.3 下載下傳Kubernetes的相關鏡像(master節點執行)

為了從國内的鏡像托管站點獲得鏡像加速支援,建議修改Docker的配置檔案,增加RegistryMirror參數,将鏡像配置寫入配置參數中,例如echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json,然後重新開機Docker服務。使用config images pull子指令下載下傳所需鏡像,例如:

kubeadm config images pull --config=init-config.yaml
           

在鏡像下載下傳完成之後,就可以進行安裝了。

2.4 運作kubeadm init指令安裝Master(master節點執行)

至此,準備工作已就緒,執行kubeadm init指令即可一鍵安裝Kubernetes的Master。接下來使用kubeadm init指令,使用前面建立的配置檔案進行叢集控制面的初始化:

kubeadm init --config=init-config.yaml
           

運作後,控制台将輸出如下内容:

W0617 10:38:46.933103    9828 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.0
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
        [WARNING Hostname]: hostname "laoyao-1.novalocal" could not be reached
        [WARNING Hostname]: hostname "laoyao-1.novalocal": lookup laoyao-1.novalocal on 114.114.114.114:53: no such host
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
           

等待一段時間後,Kubernetes的Master安裝成功,顯示如下資訊:

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
           

按照提示執行下面的指令,複制配置檔案到普通使用者的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,并缺乏對容器網絡的配置。這裡需要注意kubeadm init指令執行完成後的最後幾行提示資訊,其中包含加入節點的指令(kubeadm join)和所需的Token。

此時可以用kubectl指令驗證在2.2.2節中提到的ConfigMap:

[[email protected] ~]# kubectl get -n kube-system configmap
NAME                                 DATA   AGE
coredns                              1      7h34m
extension-apiserver-authentication   6      7h34m
kube-flannel-cfg                     2      7h24m
kube-proxy                           2      7h34m
kubeadm-config                       2      7h34m
kubelet-config-1.18                  1      7h34m
           

可以看到其中生成了名為kubeadm-config的ConfigMap對象。

2.5 node加入叢集(node節點執行)

對于新節點的添加,系統準備和Kubernetes yum源的配置過程是一緻的,在Node主機上執行下面的安裝過程。

1)安裝kubeadm和相關工具:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
           

2) 運作下面的指令啟動Docker服務與kubelet服務,并将其設定為開機自啟動:

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
           

(2)為kubeadm指令生成配置檔案。建立檔案join-config.yaml,内容如下:

apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration
discovery:
  bootstrapToken:
    apiServerEndpoint: 192.168.10.9:6443
    token: uq6j15.qlvmxtwx2wrakv7s
    unsafeSkipCAVerification: true
  tlsBootstrapToken: uq6j15.qlvmxtwx2wrakv7s
           

其中,apiServerEndpoint的值來自Master伺服器的位址,token和tlsBootstrapToken的值就來自于使用kubeadm init安裝Master的最後一行提示資訊。如果忘記了token資訊和證書資訊可使用以下指令查詢:

[[email protected] ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
uq6j15.qlvmxtwx2wrakv7s   16h         2020-06-18T10:39:15+08:00   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
           

token 24小時失效可使用如下指令重新建立:

kubeadm token create
           

3)執行kubeadm join --config指令,将本Node加入叢集:

2.6 驗證Kubernetes叢集是否安裝完成

執行下面的指令,驗證Kubernetes叢集的相關Pod是否都正常建立并運作:

[[email protected] ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   coredns-7ff77c879f-fkmw8                     1/1     Running   0          6h31m
kube-system   coredns-7ff77c879f-th4pb                     1/1     Running   0          6h31m
kube-system   etcd-laoyao-1.novalocal                      1/1     Running   3          6h31m
kube-system   kube-apiserver-laoyao-1.novalocal            1/1     Running   4          6h31m
kube-system   kube-controller-manager-laoyao-1.novalocal   1/1     Running   6          6h31m
kube-system   kube-flannel-ds-amd64-lh2ns                  1/1     Running   0          6h17m
kube-system   kube-flannel-ds-amd64-nw72n                  1/1     Running   0          6h22m
kube-system   kube-proxy-96kd6                             1/1     Running   0          6h31m
kube-system   kube-proxy-pkwmh                             1/1     Running   0          6h17m
kube-system   kube-scheduler-laoyao-1.novalocal            1/1     Running   6          6h31m
           

如果發現有狀态錯誤的Pod,則可以執行kubectl --namespace=kube-system describepod<pod_name>來檢視錯誤原因,常見的錯誤原因是鏡像沒有下載下傳完成。至此,通過kubeadm工具就實作了Kubernetes叢集的快速搭建。如果安裝失敗,則可以執行kubeadm reset指令将主機恢複原狀,重新執行kubeadm init指令,再次進行安裝。