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