這篇文章給大家分享的是有關(guān)如何安裝kubernetes的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的長(zhǎng)陽(yáng)網(wǎng)站建設(shè)公司,長(zhǎng)陽(yáng)接單;提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行長(zhǎng)陽(yáng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
如何用一條命令構(gòu)建 k8s 高可用集群且不依賴(lài) haproxy 和 keepalived,也無(wú)需 ansible。通過(guò)內(nèi)核 ipvs
對(duì) apiserver 進(jìn)行負(fù)載均衡,并且?guī)?apiserver
健康檢測(cè)。架構(gòu)如下圖所示:
本項(xiàng)目名叫 sealos,旨在做一個(gè)簡(jiǎn)單干凈輕量級(jí)穩(wěn)定的 kubernetes 安裝工具,能很好的支持高可用安裝。 其實(shí)把一個(gè)東西做的功能強(qiáng)大并不難,但是做到極簡(jiǎn)且靈活可擴(kuò)展就比較難。 所以在實(shí)現(xiàn)時(shí)就必須要遵循這些原則。下面介紹一下 sealos 的設(shè)計(jì)原則:
sealos 特性與優(yōu)勢(shì):
支持離線安裝,工具與資源包(二進(jìn)制程序 配置文件 鏡像 yaml文件等)分離,這樣不同版本替換不同離線包即可
證書(shū)延期
使用簡(jiǎn)單
支持自定義配置
內(nèi)核負(fù)載,極其穩(wěn)定,因?yàn)楹?jiǎn)單所以排查問(wèn)題也極其簡(jiǎn)單
1.0 版本確實(shí)是用 ansible
實(shí)現(xiàn),但是用戶還是需要先裝 ansile,裝 ansible 又需要裝 python
和一些依賴(lài)等,為了不讓用戶那么麻煩把 ansible 放到了容器里供用戶使用。如果不想配置免密鑰使用用戶名密碼時(shí)又需要 ssh-pass
等,總之不能讓我滿意,不是我想的極簡(jiǎn)。
所以我想就來(lái)一個(gè)二進(jìn)制文件工具,沒(méi)有任何依賴(lài),文件分發(fā)與遠(yuǎn)程命令都通過(guò)調(diào)用 sdk 實(shí)現(xiàn)所以不依賴(lài)其它任何東西,總算讓我這個(gè)有潔癖的人滿意了。
haproxy
用 static pod 跑沒(méi)有太大問(wèn)題,還算好管理,keepalived
現(xiàn)在大部分開(kāi)源 ansible 腳本都用 yum 或者 apt 等裝,這樣非常的不可控,有如下劣勢(shì):
源不一致可能導(dǎo)致版本不一致,版本不一直連配置文件都不一樣,我曾經(jīng)檢測(cè)腳本不生效一直找不到原因,后來(lái)才知道是版本原因。
系統(tǒng)原因安裝不上,依賴(lài)庫(kù)問(wèn)題某些環(huán)境就直接裝不上了。
看了網(wǎng)上很多安裝腳本,很多檢測(cè)腳本與權(quán)重調(diào)節(jié)方式都不對(duì),直接去檢測(cè) haproxy 進(jìn)程在不在,其實(shí)是應(yīng)該去檢測(cè) apiserver 是不是 healthz 的,如果 apiserver 掛了,即使 haproxy 進(jìn)程存在,集群也會(huì)不正常了,就是偽高可用了。
管理不方便,通過(guò) prometheus 對(duì)集群進(jìn)行監(jiān)控,是能直接監(jiān)控到 static pod 的但是用 systemd 跑又需要單獨(dú)設(shè)置監(jiān)控,且重啟啥的還需要單獨(dú)拉起。不如 kubelet 統(tǒng)一管理來(lái)的干凈簡(jiǎn)潔。
我們還出現(xiàn)過(guò) keepalived 把 CPU 占滿的情況。
所以為了解決這個(gè)問(wèn)題,我把 keepalived 跑在了容器中(社區(qū)提供的鏡像基本是不可用的) 改造中間也是發(fā)生過(guò)很多問(wèn)題,最終好在解決了。
總而言之,累覺(jué)不愛(ài),所以在想能不能甩開(kāi) haproxy 和 keepalived 做出更簡(jiǎn)單更可靠的方案出來(lái),還真找到了。。。
我們通過(guò)本地負(fù)載解決高可用問(wèn)題。
> 本地負(fù)載:在每個(gè) node 節(jié)點(diǎn)上都啟動(dòng)一個(gè)負(fù)載均衡,上游就是三個(gè) master。
如果使用 envoy
之類(lèi)的負(fù)載均衡器,則需要在每個(gè)節(jié)點(diǎn)上都跑一個(gè)進(jìn)程,消耗的資源更多,這是我不希望的。ipvs 實(shí)際也多跑了一個(gè)進(jìn)程 lvscare
,但是 lvscare
只是負(fù)責(zé)管理 ipvs 規(guī)則,和 kube-proxy
類(lèi)似,真正的流量還是從很穩(wěn)定的內(nèi)核走的,不需要再把包丟到用戶態(tài)中去處理。
在架構(gòu)實(shí)現(xiàn)上有個(gè)問(wèn)題會(huì)讓使用 envoy
等變得非常尷尬,就是 join
時(shí)如果負(fù)載均衡沒(méi)有建立那是會(huì)卡住的,kubelet
就不會(huì)起來(lái),所以為此你需要先啟動(dòng) envoy,意味著你又不能用 static pod 去管理它,同上面 keepalived 宿主機(jī)部署一樣的問(wèn)題,用 static pod 就會(huì)相互依賴(lài),邏輯死鎖,雞說(shuō)要先有蛋,蛋說(shuō)要先有雞,最后誰(shuí)都沒(méi)有。
使用 ipvs
就不一樣,我可以在 join 之前先把 ipvs 規(guī)則建立好,再去 join 就可以了,然后對(duì)規(guī)則進(jìn)行守護(hù)即可。一旦 apiserver 不可訪問(wèn)了,會(huì)自動(dòng)清理掉所有 node 上對(duì)應(yīng)的 ipvs 規(guī)則, 等到 master 恢復(fù)正常時(shí)添加回來(lái)。
首先是由于 kubeadm
把證書(shū)過(guò)期時(shí)間寫(xiě)死了,所以需要定制把它改成 99
年,雖然大部分人可以自己去簽個(gè)新證書(shū),但是我們還是不想再依賴(lài)個(gè)別的工具,就直接改源碼了。
其次就是做本地負(fù)載時(shí)修改 kubeadm
代碼是最方便的,因?yàn)樵?join 時(shí)我們需要做兩個(gè)事,第一是 join 之前先創(chuàng)建好 ipvs 規(guī)則,第二是創(chuàng)建 static pod。如果這塊不去定制 kubeadm 就把報(bào)靜態(tài) pod 目錄已存在的錯(cuò)誤,忽略這個(gè)錯(cuò)誤很不優(yōu)雅。 而且 kubeadm 中已經(jīng)提供了一些很好用的 sdk
供我們?nèi)?shí)現(xiàn)這個(gè)功能。
且這樣做之后最核心的功能都集成到 kubeadm 中了,sealos
就單單變成分發(fā)和執(zhí)行上層命令的輕量級(jí)工具了,增加節(jié)點(diǎn)時(shí)我們也就可以直接用 kubeadm 了。
安裝并啟動(dòng) docker
下載 kubernetes 離線安裝包
下載最新版本 sealos
支持 kubernetes 1.14.0+
多 master HA 只需執(zhí)行以下命令:
$ sealos init --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password \ --version v1.14.1 \ --pkg-url /root/kube1.14.1.tar.gz
然后,就沒(méi)有然后了。。。沒(méi)錯(cuò),你的高可用集群已經(jīng)裝好了,是不是覺(jué)得一臉懵逼?就是這么簡(jiǎn)單快捷!
單 master 多 node:
$ sealos init --master 192.168.0.2 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password \ --version v1.14.1 \ --pkg-url /root/kube1.14.1.tar.gz
使用免密鑰或者密鑰對(duì):
$ sealos init --master 172.16.198.83 \ --node 172.16.198.84 \ --pkg-url https://sealyun.oss-cn-beijing.aliyuncs.com/free/kube1.15.0.tar.gz \ --pk /root/kubernetes.pem # this is your ssh private key file \ --version v1.15.0
參數(shù)解釋?zhuān)?/p>
--master master服務(wù)器地址列表 --node node服務(wù)器地址列表 --user 服務(wù)器ssh用戶名 --passwd 服務(wù)器ssh用戶密碼 --pkg-url 離線包位置,可以放在本地目錄,也可以放在一個(gè) http 服務(wù)器上,sealos 會(huì) wget 到安裝目標(biāo)機(jī) --version kubernetes 版本 --pk ssh 私鑰地址,配置免密鑰默認(rèn)就是 /root/.ssh/id_rsa
其他參數(shù):
--kubeadm-config string kubeadm-config.yaml kubeadm 配置文件,可自定義 kubeadm 配置文件 --vip string virtual ip (default "10.103.97.2") 本地負(fù)載時(shí)虛擬 ip,不推薦修改,集群外不可訪問(wèn)
檢查安裝是否正常:
$ kubectl get node NAME STATUS ROLES AGE VERSION izj6cdqfqw4o4o9tc0q44rz Ready master 2m25s v1.14.1 izj6cdqfqw4o4o9tc0q44sz Ready master 119s v1.14.1 izj6cdqfqw4o4o9tc0q44tz Ready master 63s v1.14.1 izj6cdqfqw4o4o9tc0q44uz Ready <none> 38s v1.14.1 $ kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-5cbcccc885-9n2p8 1/1 Running 0 3m1s kube-system calico-node-656zn 1/1 Running 0 93s kube-system calico-node-bv5hn 1/1 Running 0 2m54s kube-system calico-node-f2vmd 1/1 Running 0 3m1s kube-system calico-node-tbd5l 1/1 Running 0 118s kube-system coreDNS-fb8b8dccf-8bnkv 1/1 Running 0 3m1s kube-system coredns-fb8b8dccf-spq7r 1/1 Running 0 3m1s kube-system etcd-izj6cdqfqw4o4o9tc0q44rz 1/1 Running 0 2m25s kube-system etcd-izj6cdqfqw4o4o9tc0q44sz 1/1 Running 0 2m53s kube-system etcd-izj6cdqfqw4o4o9tc0q44tz 1/1 Running 0 118s kube-system kube-apiserver-izj6cdqfqw4o4o9tc0q44rz 1/1 Running 0 2m15s kube-system kube-apiserver-izj6cdqfqw4o4o9tc0q44sz 1/1 Running 0 2m54s kube-system kube-apiserver-izj6cdqfqw4o4o9tc0q44tz 1/1 Running 1 47s kube-system kube-controller-manager-izj6cdqfqw4o4o9tc0q44rz 1/1 Running 1 2m43s kube-system kube-controller-manager-izj6cdqfqw4o4o9tc0q44sz 1/1 Running 0 2m54s kube-system kube-controller-manager-izj6cdqfqw4o4o9tc0q44tz 1/1 Running 0 63s kube-system kube-proxy-b9b9z 1/1 Running 0 2m54s kube-system kube-proxy-nf66n 1/1 Running 0 3m1s kube-system kube-proxy-q2bqp 1/1 Running 0 118s kube-system kube-proxy-s5g2k 1/1 Running 0 93s kube-system kube-scheduler-izj6cdqfqw4o4o9tc0q44rz 1/1 Running 1 2m43s kube-system kube-scheduler-izj6cdqfqw4o4o9tc0q44sz 1/1 Running 0 2m54s kube-system kube-scheduler-izj6cdqfqw4o4o9tc0q44tz 1/1 Running 0 61s kube-system kube-sealyun-lvscare-izj6cdqfqw4o4o9tc0q44uz 1/1 Running 0 86s
先獲取 join command,在 master 上執(zhí)行:
$ kubeadm token create --print-join-command
可以使用超級(jí) kubeadm,但是 join 時(shí)需要增加一個(gè) --master
參數(shù):
$ cd kube/shell && init.sh $ echo "10.103.97.2 apiserver.cluster.local" >> /etc/hosts # using vip $ kubeadm join 10.103.97.2:6443 --token 9vr73a.a8uxyaju799qwdjv \ --master 10.103.97.100:6443 \ --master 10.103.97.101:6443 \ --master 10.103.97.102:6443 \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
也可以用 sealos join 命令:
$ sealos join --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ --vip 10.103.97.2 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password \ --pkg-url /root/kube1.15.0.tar.gz
有時(shí)你可能需要自定義 kubeadm 的配置文件,比如要在證書(shū)里加入域名 sealyun.com
。
首先需要獲取配置文件模板:
$ sealos config -t kubeadm >> kubeadm-config.yaml.tmpl
然后修改 kubeadm-config.yaml.tmpl
即可,將 sealyun.com
添加到配置中:
apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: {{.Version}} controlPlaneEndpoint: "apiserver.cluster.local:6443" networking: podSubnet: 100.64.0.0/10 apiServer: certSANs: - sealyun.com # 這是新增的域名 - 127.0.0.1 - apiserver.cluster.local {{range .Masters -}} - {{.}} {{end -}} - {{.VIP}} --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" ipvs: excludeCIDRs: - "{{.VIP}}/32"
注意:其它部分不用修改,sealos 會(huì)自動(dòng)填充模板里面的內(nèi)容。
最后在部署時(shí)使用 --kubeadm-config
指定配置文件模板即可:
$ sealos init --kubeadm-config kubeadm-config.yaml.tmpl \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password \ --version v1.14.1 \ --pkg-url /root/kube1.14.1.tar.gz
本教程以 1.14
版本升級(jí)到 1.15
為例,其它版本原理類(lèi)似,懂了這個(gè)其它的參考官方教程即可。
升級(jí) kubeadm,所有節(jié)點(diǎn)導(dǎo)入鏡像
升級(jí)控制節(jié)點(diǎn)
升級(jí) master(控制節(jié)點(diǎn))上的 kubelet
升級(jí)其它 master(控制節(jié)點(diǎn))
升級(jí) node
驗(yàn)證集群狀態(tài)
把離線包拷貝到所有節(jié)點(diǎn)執(zhí)行 cd kube/shell && sh init.sh
。這里會(huì)把 kubeadm、kubectl、kubelet 的二進(jìn)制文件都更新掉,而且會(huì)導(dǎo)入高版本鏡像。
$ kubeadm upgrade plan $ kubeadm upgrade apply v1.15.0
重啟 kubelet:
$ systemctl restart kubelet
其實(shí) kubelet 升級(jí)很簡(jiǎn)單粗暴,我們只需要把新版本的 kubelet 拷貝到 /usr/bin 下面,重啟 kubelet service 即可,如果程序正在使用不讓覆蓋那么就停一下 kubelet 再進(jìn)行拷貝,kubelet bin 文件在 conf/bin
目錄下。
$ kubeadm upgrade apply
驅(qū)逐節(jié)點(diǎn)(要不要驅(qū)逐看情況, 喜歡粗暴的直接來(lái)也沒(méi)啥):
$ kubectl drain $NODE --ignore-daemonsets
更新 kubelet 配置:
$ kubeadm upgrade node config --kubelet-version v1.15.0
然后升級(jí) kubelet。同樣是替換二進(jìn)制再重啟 kubelet service。
$ systemctl restart kubelet
召回失去的愛(ài)情:
$ kubectl uncordon $NODE
$ kubectl get nodes
如果版本信息都對(duì)的話基本就升級(jí)成功了。
檢查集群是否可升級(jí)
執(zhí)行版本升級(jí)策略 哪些版本之間可以升級(jí)
確認(rèn)鏡像是否存在
執(zhí)行控制組件升級(jí),如果失敗就回滾,其實(shí)就是 apiserver、controller manager、scheduler 等這些容器
升級(jí) kube-dns 和 kube-proxy
創(chuàng)建新的證書(shū)文件,備份老的如果其超過(guò) 180 天
因?yàn)槭褂昧?netlink
庫(kù),所以推薦在容器內(nèi)進(jìn)行編譯,只需一條命令:
$ docker run --rm -v $GOPATH/src/github.com/fanux/sealos:/go/src/github.com/fanux/sealos -w /go/src/github.com/fanux/sealos -it golang:1.12.7 go build
如果你使用的是 go mod,則需要指定通過(guò) vendor
編譯:
$ go build -mod vendor
$ sealos clean \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ --node 192.168.0.5 \ --user root \ --passwd your-server-password
通過(guò) sftp
或者 wget
把離線安裝包拷貝到目標(biāo)機(jī)器上(masters 和 nodes)。
在 master0 上執(zhí)行 kubeadm init
。
在其它 master 上執(zhí)行 kubeadm join 并設(shè)置控制面,這個(gè)過(guò)程會(huì)在其它 master 上起動(dòng) etcd
并與 master0
的 etcd 組成集群,并啟動(dòng)控制平面的組件(apiserver、controller 等)。
join node 節(jié)點(diǎn),會(huì)在 node 上配置 ipvs 規(guī)則,配置 /etc/hosts 等。
> 所有對(duì) apiserver 的請(qǐng)求都是通過(guò)域名進(jìn)行訪問(wèn),因?yàn)?node 需要通過(guò)虛擬 ip 連接多個(gè) master,每個(gè)節(jié)點(diǎn)的 kubelet 與 kube-proxy 訪問(wèn) apiserver 的虛擬地址是不一樣的,而 kubeadm 又只能在配置文件中指定一個(gè)地址,所以使用一個(gè)域名但是每個(gè)節(jié)點(diǎn)解析的 IP 不同。當(dāng) IP 地址發(fā)生變化時(shí)僅需要修改解析地址即可。
通過(guò)這樣的方式實(shí)現(xiàn)每個(gè) node 上通過(guò)本地內(nèi)核負(fù)載均衡訪問(wèn) masters:
+----------+ +---------------+ virturl server: 127.0.0.1:6443 | mater0 |<----------------------| ipvs nodes | real servers: +----------+ |+---------------+ 10.103.97.200:6443 | 10.103.97.201:6443 +----------+ | 10.103.97.202:6443 | mater1 |<---------------------+ +----------+ | | +----------+ | | mater2 |<---------------------+ +----------+
在 node 上起了一個(gè) lvscare
的 static pod 去守護(hù)這個(gè) ipvs,一旦 apiserver 不可訪問(wèn)了,會(huì)自動(dòng)清理掉所有 node 上對(duì)應(yīng)的 ipvs 規(guī)則, master 恢復(fù)正常時(shí)添加回來(lái)。
所以在你的 node 上加了三個(gè)東西,可以直觀的看到:
$ cat /etc/kubernetes/manifests # 這下面增加了 lvscare 的 static pod $ ipvsadm -Ln # 可以看到創(chuàng)建的ipvs規(guī)則 $ cat /etc/hosts # 增加了虛擬IP的地址解析
sealos 對(duì) kubeadm 改動(dòng)非常少,主要是延長(zhǎng)了證書(shū)過(guò)期時(shí)間和擴(kuò)展了 join 命令。下面主要講講對(duì) join 命令的改造。
首先 join 命令增加 --master
參數(shù)用于指定 master 地址列表:
lagSet.StringSliceVar( &locallb.LVScare.Masters, "master", []string{}, "A list of ha masters, --master 192.168.0.2:6443 --master 192.168.0.2:6443 --master 192.168.0.2:6443", )
這樣就可以拿到 master 地址列表去做 ipvs 負(fù)載均衡了。
如果不是控制節(jié)點(diǎn)且不是單 master,那么就只創(chuàng)建一條 ipvs 規(guī)則,控制節(jié)點(diǎn)上不需要?jiǎng)?chuàng)建,連自己的 apiserver 即可:
if data.cfg.ControlPlane == nil { fmt.Println("This is not a control plan") if len(locallb.LVScare.Masters) != 0 { locallb.CreateLocalLB(args[0]) } }
然后再去創(chuàng)建 lvscare static pod 來(lái)守護(hù) ipvs:
if len(locallb.LVScare.Masters) != 0 { locallb.LVScareStaticPodToDisk("/etc/kubernetes/manifests") }
**所以哪怕你不使用 sealos,也可以直接用定制過(guò)的 kubeadm 去部署集群,只是麻煩一些。**下面給出安裝步驟。
kubeadm 配置文件:
apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: v1.14.0 controlPlaneEndpoint: "apiserver.cluster.local:6443" # apiserver DNS name apiServer: certSANs: - 127.0.0.1 - apiserver.cluster.local - 172.20.241.205 - 172.20.241.206 - 172.20.241.207 - 172.20.241.208 - 10.103.97.1 # virturl ip --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" ipvs: excludeCIDRs: - "10.103.97.1/32" # 注意:如果不加這個(gè),kube-proxy 就會(huì)清理你的規(guī)則
在 master0
(假設(shè) vip 地址為 10.103.97.100)上執(zhí)行以下命令:
$ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts # 解析的是 master0 的地址 $ kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs $ mkdir ~/.kube && cp /etc/kubernetes/admin.conf ~/.kube/config $ kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
在 master1
(假設(shè) vip 地址為 10.103.97.101)上執(zhí)行以下命令:
$ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts #解析的是 master0 的地址,為了能正常 join 進(jìn)去 $ kubeadm join 10.103.97.100:6443 --token 9vr73a.a8uxyaju799qwdjv \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \ --experimental-control-plane \ --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07 $ sed "s/10.103.97.100/10.103.97.101/g" -i /etc/hosts # 解析再換成自己的地址,否則就都依賴(lài) master0 的偽高可用了
在 master2
(假設(shè) vip 地址為 10.103.97.102)上執(zhí)行以下命令:
$ echo "10.103.97.100 apiserver.cluster.local" >> /etc/hosts $ kubeadm join 10.103.97.100:6443 --token 9vr73a.a8uxyaju799qwdjv \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 \ --experimental-control-plane \ --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07 $ sed "s/10.103.97.100/10.103.97.102/g" -i /etc/hosts
在 node 上 join 時(shí)加上 --master
參數(shù)指定 master 地址列表:
$ echo "10.103.97.1 apiserver.cluster.local" >> /etc/hosts # 需要解析成虛擬 ip $ kubeadm join 10.103.97.1:6443 --token 9vr73a.a8uxyaju799qwdjv \ --master 10.103.97.100:6443 \ --master 10.103.97.101:6443 \ --master 10.103.97.102:6443 \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
. ├── bin # 指定版本的二進(jìn)制文件,只需要這三個(gè),其它組件跑在容器里 │ ├── kubeadm │ ├── kubectl │ └── kubelet ├── conf │ ├── 10-kubeadm.conf # 這個(gè)文件新版本沒(méi)用到,我在 shell 里直接生成,這樣可以檢測(cè) cgroup driver │ ├── dashboard │ │ ├── dashboard-admin.yaml │ │ └── kubernetes-dashboard.yaml │ ├── heapster │ │ ├── grafana.yaml │ │ ├── heapster.yaml │ │ ├── influxdb.yaml │ │ └── rbac │ │ └── heapster-rbac.yaml │ ├── kubeadm.yaml # kubeadm 的配置文件 │ ├── kubelet.service # kubelet systemd 配置文件 │ ├── net │ │ └── calico.yaml │ └── promethus ├── images # 所有鏡像包 │ └── images.tar └── shell ├── init.sh # 初始化腳本 └── master.sh # 運(yùn)行master腳本
init.sh
腳本會(huì)將 bin 目錄下的二進(jìn)制文件拷貝到 $PATH
下面,并配置好 systemd,關(guān)閉 swap 和防火墻等等,然后導(dǎo)入集群所需要的鏡像。
master.sh
主要執(zhí)行了 kubeadm init。
conf 目錄下面包含了 kubeadm 的配置文件,calico yaml 文件等等。
sealos 會(huì)調(diào)用上面的兩個(gè)腳本,所以大部分兼容。不同版本都可以通過(guò)微調(diào)腳本來(lái)保持兼容。
感謝各位的閱讀!關(guān)于“如何安裝kubernetes”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
本文標(biāo)題:如何安裝kubernetes
文章來(lái)源:http://m.newbst.com/article18/jpjjgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、建站公司、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)