真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何部署一個(gè)Kubernetes集群

原文鏈接:https://mp.weixin.qq.com/s/MFSvDWtue4YruFV3jyLQVw

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括龍泉網(wǎng)站建設(shè)、龍泉網(wǎng)站制作、龍泉網(wǎng)頁(yè)制作以及龍泉網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,龍泉網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到龍泉省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

在本篇文章中我將以在Mac筆記本中安裝兩臺(tái)Ubantu系統(tǒng)的方式,演示如何部署一套具備一個(gè)控制節(jié)點(diǎn)(Master)和一個(gè)計(jì)算節(jié)點(diǎn)(Worker)的Kubernetes學(xué)習(xí)集群。

1、系統(tǒng)環(huán)境準(zhǔn)備

要安裝部署Kubernetes集群,首先需要準(zhǔn)備機(jī)器,最直接的辦法可以到公有云(如阿里云等)申請(qǐng)幾臺(tái)虛擬機(jī)。而如果條件允許,拿幾臺(tái)本地物理服務(wù)器來(lái)組建集群自然是最好不過(guò)了。但是這些機(jī)器需要滿足以下幾個(gè)條件:

要求64位Linux操作系統(tǒng),且內(nèi)核版本要求3.10及以上,能滿足安裝Docker項(xiàng)目所需的要求; 機(jī)器之間要保持網(wǎng)絡(luò)互通,這是未來(lái)容器之間網(wǎng)絡(luò)互通的前提條件; 要有外網(wǎng)訪問(wèn)權(quán)限,因?yàn)椴渴鸬倪^(guò)程中需要拉取相應(yīng)的鏡像,要求能夠訪問(wèn)到gcr.io、quay.io這兩個(gè)dockerregistry,因?yàn)橛行〔糠昼R像需要從這里拉取; 單機(jī)可用資源建議2核CPU、8G內(nèi)存或以上,如果小一點(diǎn)也可以但是能調(diào)度的Pod數(shù)量就比較有限了; 磁盤(pán)空間要求在30GB以上,主要用于存儲(chǔ)Docker鏡像及相關(guān)日志文件;

在本次實(shí)驗(yàn)中由于條件有限,我是在Mac筆記本上通過(guò)虛擬軟件準(zhǔn)備了兩臺(tái)虛擬機(jī),其具體配置如下:

2核CPU、2GB內(nèi)存,30GB的磁盤(pán)空間; Unbantu 20.04 LTS的Sever版本,其Linux內(nèi)核為5.4.0; 內(nèi)網(wǎng)互通,外網(wǎng)訪問(wèn)權(quán)限不受控制;

2、Kubeadm一鍵部署工具簡(jiǎn)介

作為典型的分布式系統(tǒng),Kubernetes的部署一直是困擾初學(xué)者進(jìn)入Kubernetes世界的一大障礙。在發(fā)布早期Kubernetes的部署主要依賴于社區(qū)維護(hù)的各種腳本,但這其中會(huì)涉及二進(jìn)制編譯、配置文件以及kube-apiserver授權(quán)配置文件等諸多運(yùn)維工作。目前各大云服務(wù)廠商常用的Kubernetes部署方式是使用SaltStack、Ansible等運(yùn)維工具自動(dòng)化地執(zhí)行這些繁瑣的步驟,但即使這樣,這個(gè)部署的過(guò)程對(duì)于初學(xué)者來(lái)說(shuō)依然是非常繁瑣的。

正是基于這樣的痛點(diǎn),在志愿者的推動(dòng)下Kubernetes社區(qū)終于發(fā)起了kubeadm這一獨(dú)立的一鍵部署工具,使用kubeadm我們可以通過(guò)幾條簡(jiǎn)單的指令來(lái)快速地部署一個(gè)kubernetes集群。后面的內(nèi)容,就將具體演示如何使用kubeadm來(lái)部署一個(gè)Kubernetes集群。

3、安裝Kubeadm及Docker環(huán)境

在準(zhǔn)備的兩臺(tái)虛擬機(jī)中,分別安裝Kubeadm部署工具及Docker環(huán)境。步驟如下:

1)、編輯操作系統(tǒng)安裝源配置文件,添加kubernetes鏡像源,命令如下:

#添加Kubernetes官方鏡像源apt-keyroot@kubenetesnode01:~#curl-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg|apt-keyadd-#添加Kubernetes官方鏡像源地址root@kubernetesnode01:~#vim/etc/apt/sources.list#addkubernetessourcedebhttp://apt.kubernetes.io/kubernetes-xenialmain

上述操作添加的是kubernetes的官方鏡像源,如果apt.kubernetes.io因?yàn)榫W(wǎng)絡(luò)原因訪問(wèn)不到,也可以換成國(guó)內(nèi)Ubantu鏡像源,如阿里云鏡像源地址:

#添加阿里云Kubernetes鏡像源apt-keyroot@kubenetesnode01:~#curl-shttps://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg|apt-keyadd-#添加阿里云Kubernetes鏡像源地址root@kubernetesnode01:~#vim/etc/apt/sources.listdebhttps://mirrors.aliyun.com/kubernetes/apt/kubernetes-xenialmain

2)、鏡像源添加后更新apt資源列表,命令如下:

root@kubernetesnode01:~#apt-getupdateHit:1http://cn.archive.ubuntu.com/ubuntufocalInReleaseHit:2http://cn.archive.ubuntu.com/ubuntufocal-updatesInReleaseHit:3http://cn.archive.ubuntu.com/ubuntufocal-backportsInReleaseHit:4http://cn.archive.ubuntu.com/ubuntufocal-securityInReleaseGet:5https://packages.cloud.google.com/aptkubernetes-xenialInRelease[8,993B]Get:6https://packages.cloud.google.com/aptkubernetes-xenial/mainamd64Packages[37.7kB]Fetched46.7kBin7s(6,586B/s)Readingpackagelists...Done

3)、完成上述2步后就可以通過(guò)apt-get命令安裝kubeadm了,如下:

root@kubernetesnode01:~#apt-getinstall-ydocker.iokubeadmReadingpackagelists...DoneBuildingdependencytreeReadingstateinformation...DoneThefollowingadditionalpackageswillbeinstalled:bridge-utilscgroupfs-mountconntrackcontainerdcri-toolsdns-root-datadnsmasq-baseebtableskubectlkubeletkubernetes-cnilibidn11pigzruncsocatubuntu-fan....

這里直接使用Ubantu的docker.io安裝源。在上述安裝kubeadm的過(guò)程中,kubeadm和kubelet、kubectl、kubernetes-cni這幾個(gè)kubernetes核心組件的二進(jìn)制文件都會(huì)被自動(dòng)安裝好。

4)、Docker服務(wù)啟動(dòng)及限制修改

完成上述步驟側(cè)操作后,系統(tǒng)中會(huì)自動(dòng)安裝Docker引擎,但是在具體運(yùn)行kubernetes部署之前需要對(duì)Docker的配置信息進(jìn)行一些調(diào)整。

首先,編輯系統(tǒng)/etc/default/grub文件,在配置項(xiàng)GRUB_CMDLINE_LINUX中添加如下參數(shù):

GRUB_CMDLINE_LINUX=cgroup_enable=memoryswapaccount=1

完成編輯后保存執(zhí)行如下命令,并重啟服務(wù)器,命令如下:

root@kubernetesnode01:/opt/kubernetes-config#update-grubroot@kubernetesnode01:/opt/kubernetes-config#reboot

上述修改主要解決的是可能出現(xiàn)的“docker警告WARNING: No swap limit support”問(wèn)題。

其次,編輯創(chuàng)建/etc/docker/daemon.json文件,添加如下內(nèi)容:

{exec-opts:[native.cgroupdriver=systemd]}

完成保存后執(zhí)行重啟Docker命令,如下:

root@kubernetesnode01:/opt/kubernetes-config#systemctlrestartdocker

此時(shí)可以查看Docker的Cgroup信息,如下:

root@kubernetesnode01:/opt/kubernetes-config#dockerinfo|grepCgroupCgroupDriver:systemd

上述修改主要解決的是“Dockercgroup driver. The recommended driver is systemd”的問(wèn)題。需要強(qiáng)調(diào)的是以上修改只是作者在具體安裝操作是遇到的具體問(wèn)題的解決整理,如在實(shí)踐過(guò)程中遇到其他問(wèn)題還需要自行查閱相關(guān)資料!

最后,需要注意由于kubernetes禁用虛擬內(nèi)存,所以要先關(guān)閉掉swap否則就會(huì)在kubeadm初始化kubernetes的時(shí)候報(bào)錯(cuò),具體如下:

root@kubernetesnode01:/opt/kubernetes-config#swapoff-a

該命令只是臨時(shí)禁用swap,如要保證系統(tǒng)重啟后仍然生效則需要“edit /etc/fstab”文件,并注釋掉swap那一行。

完成以上操作后啟動(dòng)系統(tǒng)Docker服務(wù),命令如下:

root@kubenetesnode02:~#systemctlenabledocker.service

4、部署Kubernetes的Master節(jié)點(diǎn)

在Kubernetes中Master節(jié)點(diǎn)是集群的控制節(jié)點(diǎn),它是由三個(gè)緊密協(xié)作的獨(dú)立組件組合而成,分別是負(fù)責(zé)API服務(wù)的kube-apiserver、負(fù)責(zé)調(diào)度的kube-scheduler以及負(fù)責(zé)容器編排的kube-controller-manager,其中整個(gè)集群的持久化數(shù)據(jù)由kube-apiserver處理后保存在Etcd中。

要部署Master節(jié)點(diǎn)可以直接通過(guò)kubeadm進(jìn)行一鍵部署,但這里我們希望能夠部署一個(gè)相對(duì)完整的Kubernetes集群,可以通過(guò)配置文件來(lái)開(kāi)啟一些實(shí)驗(yàn)性的功能。具體在系統(tǒng)中新建/opt/kubernetes-config/目錄,并創(chuàng)建一個(gè)給kubeadm用的YAML文件(kubeadm.yaml),具體內(nèi)容如下:

apiVersion:kubeadm.k8s.io/v1beta2kind:ClusterConfigurationcontrollerManager:extraArgs:horizontal-pod-autoscaler-use-rest-clients:truehorizontal-pod-autoscaler-sync-period:10snode-monitor-grace-period:10sapiServer:extraArgs:runtime-config:api/all=truekubernetesVersion:v1.18.1

在上述yaml配置文件中“horizontal-pod-autoscaler-use-rest-clients: true”這個(gè)配置,表示將來(lái)部署的kuber-controller-manager能夠使用自定義資源(CustomMetrics)進(jìn)行自動(dòng)水平擴(kuò)展,感興趣的讀者可以自行查閱相關(guān)資料!而“v1.18.1”就是要kubeadm幫我們部署的Kubernetes版本號(hào)。

需要注意的是,如果執(zhí)行過(guò)程中由于國(guó)內(nèi)網(wǎng)絡(luò)限制問(wèn)題導(dǎo)致無(wú)法下載相應(yīng)的Docker鏡像,可以根據(jù)報(bào)錯(cuò)信息在國(guó)內(nèi)網(wǎng)站(如阿里云)上找到相關(guān)鏡像,然后再將這些鏡像重新tag之后再進(jìn)行安裝。具體如下:

#從阿里云Docker倉(cāng)庫(kù)拉取Kubernetes組件鏡像dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.18.1dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.18.1dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.18.1dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.4.3-0dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

下載完成后再將這些Docker鏡像重新tag下,具體命令如下:

#重新tag鏡像dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2k8s.gcr.io/pause:3.2dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7k8s.gcr.io/coredns:1.6.7dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.4.3-0k8s.gcr.io/etcd:3.4.3-0dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.18.1k8s.gcr.io/kube-scheduler:v1.18.1dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.18.1k8s.gcr.io/kube-controller-manager:v1.18.1dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.18.1k8s.gcr.io/kube-apiserver:v1.18.1dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1k8s.gcr.io/kube-proxy:v1.18.1

此時(shí)通過(guò)Docker命令就可以查看到這些Docker鏡像信息了,命令如下:

root@kubernetesnode01:/opt/kubernetes-config#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEk8s.gcr.io/kube-proxyv1.18.14e68534e24f62monthsago117MBregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64v1.18.14e68534e24f62monthsago117MBk8s.gcr.io/kube-controller-managerv1.18.1d1ccdd18e6ed2monthsago162MBregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64v1.18.1d1ccdd18e6ed2monthsago162MBk8s.gcr.io/kube-apiserverv1.18.1a595af0107f92monthsago173MBregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64v1.18.1a595af0107f92monthsago173MBk8s.gcr.io/kube-schedulerv1.18.16c9320041a7b2monthsago95.3MBregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64v1.18.16c9320041a7b2monthsago95.3MBk8s.gcr.io/pause3.280d28bedfe5d4monthsago683kBregistry.cn-hangzhou.aliyuncs.com/google_containers/pause3.280d28bedfe5d4monthsago683kBk8s.gcr.io/coredns1.6.767da37a9a3604monthsago43.8MBregistry.cn-hangzhou.aliyuncs.com/google_containers/coredns1.6.767da37a9a3604monthsago43.8MBk8s.gcr.io/etcd3.4.3-0303ce5db0e908monthsago288MBregistry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64

解決鏡像拉取問(wèn)題后再次執(zhí)行kubeadm部署命令就可以完成Kubernetes Master控制節(jié)點(diǎn)的部署了,具體命令及執(zhí)行結(jié)果如下:

root@kubernetesnode01:/opt/kubernetes-config#kubeadminit--configkubeadm.yaml--v=5...YourKubernetescontrol-planehasinitializedsuccessfully!Tostartusingyourcluster,youneedtorunthefollowingasaregularuser:mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/configYoushouldnowdeployapodnetworktothecluster.Runkubectlapply-f[podnetwork].yamlwithoneoftheoptionslistedat:https://kubernetes.io/docs/concepts/cluster-administration/addons/Thenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:kubeadmjoin10.211.55.6:6443--tokenjfulwi.so2rj5lukgsej2o6--discovery-token-ca-cert-hashsha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6

從上面部署執(zhí)行結(jié)果中可以看到,部署成功后kubeadm會(huì)生成如下指令:

kubeadmjoin10.211.55.6:6443--tokend35pz0.f50zacvbdarqn2vi--discovery-token-ca-cert-hashsha256:58958a3bf4ccf4a4c19b0d1e934e77bf5b5561988c2274364aaadc9b1747141d

這個(gè)kubeadm join命令就是用來(lái)給該Master節(jié)點(diǎn)添加更多Worker(工作節(jié)點(diǎn))的命令,后面具體部署Worker節(jié)點(diǎn)的時(shí)候?qū)?huì)使用到它。此外,kubeadm還會(huì)提示我們第一次使用Kubernetes集群所需要配置的命令:

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

而需要這些配置命令的原因在于Kubernetes集群默認(rèn)是需要加密方式訪問(wèn)的,所以這幾條命令就是將剛才部署生成的Kubernetes集群的安全配置文件保存到當(dāng)前用戶的.kube目錄,之后kubectl會(huì)默認(rèn)使用該目錄下的授權(quán)信息訪問(wèn)Kubernetes集群。如果不這么做的化,那么每次通過(guò)集群就都需要設(shè)置“export KUBE CONFIG 環(huán)境變量”來(lái)告訴kubectl這個(gè)安全文件的位置。

執(zhí)行完上述命令后,現(xiàn)在我們就可以使用kubectlget命令來(lái)查看當(dāng)前Kubernetes集群節(jié)點(diǎn)的狀態(tài)了,執(zhí)行效果如下:

root@kubernetesnode01:/opt/kubernetes-config#kubectlgetnodesNAMESTATUSROLESAGEVERSIONkubernetesnode01NotReadymaster35mv1.18.4

在以上命令輸出的結(jié)果中可以看到Master節(jié)點(diǎn)的狀態(tài)為“NotReady”,為了查找具體原因可以通過(guò)“kuberctl describe”命令來(lái)查看下該節(jié)點(diǎn)(Node)對(duì)象的詳細(xì)信息,命令如下:

root@kubernetesnode01:/opt/kubernetes-config#kubectldescribenodekubernetesnode01

該命令可以非常詳細(xì)地獲取節(jié)點(diǎn)對(duì)象的狀態(tài)、事件等詳情,這種方式也是調(diào)試Kubernetes集群時(shí)最重要的排查手段。根據(jù)顯示的如下信息:

...Conditions...ReadyFalse...KubeletNotReadyruntimenetworknotready:NetworkReady=falsereason:NetworkPluginNotReadymessage:docker:networkpluginisnotready:cniconfiguninitialized...

可以看到節(jié)點(diǎn)處于“NodeNotReady”的原因在于尚未部署任何網(wǎng)絡(luò)插件,為了進(jìn)一步驗(yàn)證著一點(diǎn)還可以通過(guò)kubectl檢查這個(gè)節(jié)點(diǎn)上各個(gè)Kubernetes系統(tǒng)Pod的狀態(tài),命令及執(zhí)行效果如下:

root@kubernetesnode01:/opt/kubernetes-config#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-66bff467f8-l4wt60/1Pending064mcoredns-66bff467f8-rcqx60/1Pending064metcd-kubernetesnode011/1Running064mkube-apiserver-kubernetesnode011/1Running064mkube-controller-manager-kubernetesnode011/1Running064mkube-proxy-wjct71/1Running064mkube-scheduler-kubernetesnode011/1Running064m

命令中“kube-system”表示的是Kubernetes項(xiàng)目預(yù)留的系統(tǒng)Pod空間(Namespace),需要注意它并不是Linux Namespace,而是Kuebernetes劃分的不同工作空間單位。回到命令輸出結(jié)果,可以看到coredns等依賴于網(wǎng)絡(luò)的Pod都處于Pending(調(diào)度失敗)的狀態(tài),這樣說(shuō)明了該Master節(jié)點(diǎn)的網(wǎng)絡(luò)尚未部署就緒。

5、部署Kubernetes網(wǎng)絡(luò)插件

前面部署Master節(jié)點(diǎn)中由于沒(méi)有部署網(wǎng)絡(luò)插件,所以節(jié)點(diǎn)狀態(tài)顯示“NodeNotReady”狀態(tài)。接下來(lái)的內(nèi)容我們就來(lái)具體部署下網(wǎng)絡(luò)插件。在Kubernetes“一切皆容器”的設(shè)計(jì)理念指導(dǎo)下,網(wǎng)絡(luò)插件也會(huì)以獨(dú)立Pod的方式運(yùn)行在系統(tǒng)中,所以部署起來(lái)也很簡(jiǎn)單只需要執(zhí)行“kubectl apply”指令即可,例如以Weave網(wǎng)絡(luò)插件為例:

root@kubernetesnode01:/opt/kubernetes-config#kubectlapply-fhttps://cloud.weave.works/k8s/net?k8s-version=$(kubectlversion|base64|tr-d\' \')serviceaccount/weave-netcreatedclusterrole.rbac.authorization.k8s.io/weave-netcreatedclusterrolebinding.rbac.authorization.k8s.io/weave-netcreatedrole.rbac.authorization.k8s.io/weave-netcreatedrolebinding.rbac.authorization.k8s.io/weave-netcreateddaemonset.apps/weave-netcreated

部署完成后通過(guò)“kubectl get”命令重新檢查Pod的狀態(tài):

root@kubernetesnode01:/opt/kubernetes-config#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-66bff467f8-l4wt61/1Running0116mcoredns-66bff467f8-rcqx61/1Running0116metcd-kubernetesnode011/1Running0116mkube-apiserver-kubernetesnode011/1Running0116mkube-controller-manager-kubernetesnode011/1Running0116mkube-proxy-wjct71/1Running0116mkube-scheduler-kubernetesnode011/1Running0116mweave-net-746qj

可以看到,此時(shí)所有的系統(tǒng)Pod都成功啟動(dòng)了,而剛才部署的Weave網(wǎng)絡(luò)插件則在kube-system下面新建了一個(gè)名叫“weave-net-746qj”的Pod,而這個(gè)Pod就是容器網(wǎng)絡(luò)插件在每個(gè)節(jié)點(diǎn)上的控制組件。

到這里,Kubernetes的Master節(jié)點(diǎn)就部署完成了,如果你只需要一個(gè)單節(jié)點(diǎn)的Kubernetes,那么現(xiàn)在就可以使用了。但是在默認(rèn)情況下,Kubernetes的Master節(jié)點(diǎn)是不能運(yùn)行用戶Pod的,需要通過(guò)額外的操作進(jìn)行調(diào)整,感興趣的朋友可以自己查閱下其他資料。

6、部署Kubernetes的Worker節(jié)點(diǎn)

為了構(gòu)建一個(gè)完整的Kubernetes集群,這里還需要繼續(xù)介紹如何部署Worker節(jié)點(diǎn)。實(shí)際上Kubernetes的Worker節(jié)點(diǎn)和Master節(jié)點(diǎn)幾乎是相同的,它們都運(yùn)行著一個(gè)kubelet組件,主要的區(qū)別在于“kubeadm init”的過(guò)程中,kubelet啟動(dòng)后,Master節(jié)點(diǎn)還會(huì)自動(dòng)啟動(dòng)kube-apiserver、kube-scheduler及kube-controller-manager這三個(gè)系統(tǒng)Pod。

在具體部署之前與Master節(jié)點(diǎn)一樣,也需要在所有Worker節(jié)點(diǎn)上執(zhí)行前面“安裝kubeadm及Decker環(huán)境”小節(jié)中的所有步驟。之后在Worker節(jié)點(diǎn)執(zhí)行部署Master節(jié)點(diǎn)時(shí)生成的“kubeadm join”指令即可,具體如下:

root@kubenetesnode02:~#kubeadmjoin10.211.55.6:6443--tokenjfulwi.so2rj5lukgsej2o6--discovery-token-ca-cert-hashsha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6--v=5...Thisnodehasjoinedthecluster:*Certificatesigningrequestwassenttoapiserverandaresponsewasreceived.*TheKubeletwasinformedofthenewsecureconnectiondetails.Run\'kubectlgetnodes\'onthecontrol-planetoseethisnodejointhecluster.

完成集群加入后為了便于在Worker節(jié)點(diǎn)執(zhí)行kubectl相關(guān)命令,需要進(jìn)行如下配置:

#創(chuàng)建配置目錄root@kubenetesnode02:~#mkdir-p$HOME/.kube#將Master節(jié)點(diǎn)中$/HOME/.kube/目錄中的config文件拷貝至Worker節(jié)點(diǎn)對(duì)應(yīng)目錄root@kubenetesnode02:~#scproot@10.211.55.6:$HOME/.kube/config$HOME/.kube/#權(quán)限配置root@kubenetesnode02:~#sudochown$(id-u):$(id-g)$HOME/.kube/config

之后可以在Worker或Master節(jié)點(diǎn)執(zhí)行節(jié)點(diǎn)狀態(tài)查看命令“kubectl get nodes”,具體如下:

root@kubernetesnode02:~#kubectlgetnodesNAMESTATUSROLESAGEVERSIONkubenetesnode02NotReady33mv1.18.4kubernetesnode01Readymaster29hv1.18.4

通過(guò)節(jié)點(diǎn)狀態(tài)顯示此時(shí)Work節(jié)點(diǎn)還處于NotReady狀態(tài),具體查看節(jié)點(diǎn)描述信息如下:

root@kubernetesnode02:~#kubectldescribenodekubenetesnode02...Conditions:...ReadyFalse...KubeletNotReadyruntimenetworknotready:NetworkReady=falsereason:NetworkPluginNotReadymessage:docker:networkpluginisnotready:cniconfiguninitialized...

根據(jù)描述信息,發(fā)現(xiàn)Worker節(jié)點(diǎn)NotReady的原因也在于網(wǎng)絡(luò)插件沒(méi)有部署,繼續(xù)執(zhí)行“部署Kubernetes網(wǎng)絡(luò)插件”小節(jié)中的步驟即可。但是要注意部署網(wǎng)絡(luò)插件時(shí)會(huì)同時(shí)部署kube-proxy,其中會(huì)涉及從k8s.gcr.io倉(cāng)庫(kù)獲取鏡像的動(dòng)作,如果無(wú)法訪問(wèn)外網(wǎng)可能會(huì)導(dǎo)致網(wǎng)絡(luò)部署異常,這里可以參考前面安裝Master節(jié)點(diǎn)時(shí)的做法,通過(guò)國(guó)內(nèi)鏡像倉(cāng)庫(kù)下載后通過(guò)tag的方式進(jìn)行標(biāo)記,具體如下:

root@kubenetesnode02:~#dockerpullregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1root@kubenetesnode02:~#dockertagregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1k8s.gcr.io/kube-proxy:v1.18.1

如若一切正常,則繼續(xù)查看節(jié)點(diǎn)狀態(tài),命令如下:

root@kubenetesnode02:~#kubectlgetnodeNAMESTATUSROLESAGEVERSIONkubenetesnode02Ready7h52mv1.18.4kubernetesnode01Readymaster37hv1.18.4

可以看到此時(shí)Worker節(jié)點(diǎn)的狀態(tài)已經(jīng)變成“Ready”,不過(guò)細(xì)心的讀者可能會(huì)發(fā)現(xiàn)Worker節(jié)點(diǎn)的ROLES并不像Master節(jié)點(diǎn)那樣顯示“master”而是顯示了,這是因?yàn)樾掳惭b的Kubernetes環(huán)境Node節(jié)點(diǎn)有時(shí)候會(huì)丟失ROLES信息,遇到這種情況可以手工進(jìn)行添加,具體命令如下:

root@kubenetesnode02:~#kubectllabelnodekubenetesnode02node-role.kubernetes.io/worker=worker

再次運(yùn)行節(jié)點(diǎn)狀態(tài)命令就能看到正常的顯示了,命令效果如下:

root@kubenetesnode02:~#kubectlgetnodeNAMESTATUSROLESAGEVERSIONkubenetesnode02Readyworker8hv1.18.4kubernetesnode01Readymaster37hv1.18.4

到這里就部署完成了具有一個(gè)Master節(jié)點(diǎn)和一個(gè)Worker節(jié)點(diǎn)的Kubernetes集群了,作為實(shí)驗(yàn)環(huán)境它已經(jīng)具備了基本的Kubernetes集群功能!

7、部署Dashboard可視化插件

在Kubernetes社區(qū)中,有一個(gè)很受歡迎的Dashboard項(xiàng)目,它可以給用戶一個(gè)可視化的Web界面來(lái)查看當(dāng)前集群中的各種信息。該插件也是以容器化方式進(jìn)行部署,操作也非常簡(jiǎn)單,具體可在Master、Worker節(jié)點(diǎn)或其他能夠安全訪問(wèn)Kubernetes集群的Node上進(jìn)行部署,命令如下:

root@kubenetesnode02:~#kubectlapply-fhttps://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

部署完成后就可以查看Dashboard對(duì)應(yīng)的Pod運(yùn)行狀態(tài),執(zhí)行效果如下:

root@kubenetesnode02:~#kubectlgetpods-nkubernetes-dashboardNAMEREADYSTATUSRESTARTSAGEdashboard-metrics-scraper-6b4884c9d5-xfb8b1/1Running012hkubernetes-dashboard-7f99b75bf4-9lxk81/1Running012h

除此之外還可以查看Dashboard的服務(wù)(Service)信息,命令如下:

root@kubenetesnode02:~#kubectlgetsvc-nkubernetes-dashboardNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEdashboard-metrics-scraperClusterIP10.97.69.1588000/TCP13hkubernetes-dashboardClusterIP10.111.30.214443/TCP13h

需要注意的是,由于Dashboard是一個(gè)Web服務(wù),從安全角度出發(fā)Dashboard默認(rèn)只能通過(guò)Proxy的方式在本地訪問(wèn)。具體方式為在本地機(jī)器安裝kubectl管理工具,并將Master節(jié)點(diǎn)$HOME/.kube/目錄中的config文件拷貝至本地主機(jī)相同目錄,之后運(yùn)行“kubectl proxy”命令,如下:

qiaodeMacBook-Pro-2:.kubeqiaojiang$kubectlproxyStartingtoserveon127.0.0.1:8001

本地proxy代理啟動(dòng)后,訪問(wèn)Kubernetes Dashboard地址,具體如下:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

如果訪問(wèn)正常,就會(huì)看到相應(yīng)的界面!以上就是Kubernetes基本集群的搭建方式,希望能對(duì)你學(xué)習(xí)Kubernetes容器編排技術(shù)有所幫助!


當(dāng)前名稱:如何部署一個(gè)Kubernetes集群
本文鏈接:http://weahome.cn/article/cjsdeo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部