軟件測(cè)試 | K8S安裝與配置
K8S 的安裝與配置
K8S 在當(dāng)年因?yàn)槠鋸?fù)雜、艱難的安裝方式被稱(chēng)為是新人殺手,勸退圈的 NO.1。大量想要學(xué)習(xí) K8S 的人 被擋在了安裝手冊(cè)這座大山前。不過(guò)好在經(jīng)過(guò)多年的發(fā)展,好幾款快速安裝 K8S 的工具都已經(jīng)成熟。 今天介紹的就是 kubeadm 這款 K8S 官方安裝工具。
準(zhǔn)備工作
為了演示安裝過(guò)程,選擇 Centos 8 來(lái)作為宿主機(jī),為了安裝必要的工具, 需要添加阿里源。
K8S 并不支持交換分區(qū), 所以要關(guān)閉它。
為了讓 Docker 網(wǎng)絡(luò)生效,需要讓宿主機(jī)擁有類(lèi)似路由器一樣的網(wǎng)絡(luò)轉(zhuǎn)發(fā)功能。 這樣在使用端口映射的 方式啟動(dòng)容器的時(shí)候,才能使用宿主機(jī)作為跳板間接的與容器網(wǎng)絡(luò)進(jìn)行通信。 靠的就是將發(fā)往宿主機(jī)特 定的網(wǎng)絡(luò)請(qǐng)求轉(zhuǎn)發(fā)給容器網(wǎng)絡(luò)實(shí)現(xiàn)的,具體的原理這里不深入討論了。 但是為了讓宿主機(jī)有這樣的能力 需要打開(kāi)兩個(gè)內(nèi)核參數(shù)。
安裝DOCKER
安裝 KUBECTL、KUBELET、KUBEADM
安裝前先介紹一下這三個(gè)工具。
kubeadm:之前說(shuō)過(guò)這個(gè)是 k8s 集群的安裝工具
kubectl:k8s 的命令行工具,后續(xù)都使用使用這個(gè)命令與 k8s 通信
kubelet:可以理解為 k8s 在每個(gè)節(jié)點(diǎn)上啟動(dòng)的 agent,它負(fù)責(zé)維護(hù)當(dāng)前節(jié)點(diǎn)的狀態(tài)和節(jié)點(diǎn)上啟動(dòng)的 所有容器的維護(hù)工作。 由于它不能夠被容器化部署,所以必須手動(dòng)下載。PS:其他 k8s 的服務(wù)可 以容器化部署所以不需要手動(dòng)下載。
首先添加阿里源
安裝
這個(gè)命令需要注意以下兩點(diǎn):
因?yàn)楣雀璧溺R像在國(guó)內(nèi)是無(wú)法下載的,所以需要通過(guò)--image-repository 參數(shù)來(lái)指定從阿里云上下載 所需要的鏡像 命令默認(rèn)會(huì)安裝最新的 k8s 版本, 如果想要指定版本可以通過(guò)--kubernetes-version 參數(shù)來(lái)完成這 個(gè)目的 當(dāng)命令運(yùn)行成功后,會(huì)打印出如下的信息:
如果看到上面的信息那證明集群已經(jīng)安裝成功。并且上面的信息非常有用,需要按信息內(nèi)容嚴(yán)格執(zhí)行才 能順利使用集群。這里針對(duì)這段信息需要注意的有如下 2 點(diǎn):
需要按照信息所提示的將 kubeconfig 文件復(fù)制到 $HOME/.kube/config 路徑下并賦予相應(yīng)的權(quán)限。 kubectl 命令會(huì)在此目錄下尋找 kubeconfig 文件并與 K8S 的 apiserver 進(jìn)行通信。 kubeconfig 文 件中包含 K8S apiserver 的地址和數(shù)字證書(shū)等信息,是大多數(shù)外部程序跟 K8S 通信的必需品。 如 果你希望通過(guò) K8S 開(kāi)源出來(lái)的客戶(hù)端與 K8S 進(jìn)行通信,那不管使用哪種語(yǔ)言的客戶(hù)端第一步都要 指定 kubeconfig 的路徑對(duì)客戶(hù)端進(jìn)行初始化。
目前搭建的 K8S 集群是單節(jié)點(diǎn)集群,如果希望將其他節(jié)點(diǎn)加入到集群中來(lái),需要按上述信息提示 的在對(duì)應(yīng)節(jié)點(diǎn)使用 kubeadm join 命令。 所以要保存好上述信息的這段命令。
截止到這里還無(wú)法使用 K8S 集群,當(dāng)使用 kubectl get pods -n kube-system 這個(gè)命令來(lái)查看會(huì) 發(fā)現(xiàn) K8S 的 DNS 仍然不是運(yùn)行狀態(tài)。
這是因?yàn)闆](méi)有安裝 K8S 網(wǎng)絡(luò)的 CNI 插件, K8S 支持很多種插件式的設(shè)計(jì), 其網(wǎng)絡(luò)也是其中之一。 它不會(huì)預(yù)先幫助用戶(hù)安裝網(wǎng)絡(luò)組件,而是把這個(gè)權(quán)力留給用戶(hù)。 目前主流的網(wǎng)絡(luò)組件有 flannel,calico 和 weave。本次使用 calico 來(lái)進(jìn)行安裝。
如果安裝成功,就可以用 kubectl get pods -n kube-system 命令看到 dns 和 calico 相關(guān)的 POD 都已經(jīng)是運(yùn)行狀態(tài)了。
當(dāng)然現(xiàn)在集群仍然不是可用狀態(tài), 如果這個(gè)時(shí)候向 K8S 提交一個(gè) POD 會(huì)發(fā)現(xiàn) POD 會(huì)一直處于 pending 狀態(tài), 這是因?yàn)槭褂?kubeadm 安裝的 K8S 集群它都會(huì)默認(rèn)為主節(jié)點(diǎn)打上一個(gè)污點(diǎn)(taint)。 污點(diǎn)是 K8S 中的一個(gè)調(diào)度策略。 可以把它當(dāng)做一個(gè)標(biāo)識(shí), 凡是被打上污點(diǎn)的節(jié)點(diǎn)默認(rèn)情況下是不可以使用的, 只有在創(chuàng)建 POD 的時(shí)候顯示的聲明可以容忍(tolerate)這個(gè)污點(diǎn)才可以被調(diào)度到這個(gè)節(jié)點(diǎn) 上。 kubeadm 之所以給 Master 節(jié)點(diǎn)打上一個(gè)污點(diǎn)是從保護(hù)主節(jié)點(diǎn)出發(fā)考慮的。試想一下主節(jié)點(diǎn)上運(yùn)行 的都是 K8S 的關(guān)鍵服務(wù),一但這些服務(wù)出現(xiàn)問(wèn)題那么會(huì)導(dǎo)致整個(gè) K8S 集群癱瘓,所以如果準(zhǔn)許普通的 POD 也調(diào)度到 Master 節(jié)點(diǎn)的話(huà),那么大量的任務(wù)可能會(huì)存在壓垮主節(jié)點(diǎn)的風(fēng)險(xiǎn)。 所以為了保護(hù)這些服 務(wù),kubeadm 會(huì)默認(rèn)給 Master 節(jié)點(diǎn)打上污點(diǎn)以保證普通的 POD 不會(huì)調(diào)度到 Master 節(jié)點(diǎn)上。 那么為 了在本次演示中能夠使用主節(jié)點(diǎn), 可以采取手動(dòng)的刪除這個(gè)污點(diǎn)。
注意刪除污點(diǎn)的命令格式為: kubectl taint nodes 節(jié)點(diǎn)名稱(chēng)?http://node-role.kubernetes.io/?master:NoSchedule- 所以才需要先使用 kubectl get nodes 命令去獲取 Master 節(jié)點(diǎn)的名稱(chēng)。 至此 K8S 集群就已經(jīng)搭建完畢了。
掃描下方可領(lǐng)取更多學(xué)習(xí)資料(無(wú)償哦~)
