開(kāi)始是一個(gè)master,兩個(gè)node節(jié)點(diǎn),后面再擴(kuò)。
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作服務(wù),網(wǎng)站設(shè)計(jì),綿陽(yáng)服務(wù)器托管等一站式綜合服務(wù)型公司,專(zhuān)業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)。
使用centos7系統(tǒng),前面文章已經(jīng)安裝過(guò)etcd。
wget
tar -zxf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /usr/local/bin
scp kubelet kube-proxy FNSHB109:/usr/local/bin
scp kubelet kube-proxy node1:/usr/local/bin
scp kubelet kube-proxy node2:/usr/local/bin
mkdir -p /etc/kubernetes
mkdir -p /etc/kubernetes/ssl
mkdir -p /var/log/kubernetes
一個(gè)應(yīng)用程序訪問(wèn)https API(自簽證書(shū)),有兩種方式,證書(shū)添加IP可信任(寫(xiě)在證書(shū)的json的host文件里面)和攜帶CA證書(shū)。ca證書(shū)在etcd那篇文章里面已經(jīng)配置過(guò),這里直接配置kube-apiserver-csr.json請(qǐng)求文件,再利用ca證書(shū)和私鑰,形成kube-apiserver證書(shū)。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver
隨機(jī)生成序列號(hào),并定義token.csv
kubelet 采用 TLS Bootstrapping 機(jī)制,自動(dòng)完成到 kube-apiserver 的注冊(cè),在 node 節(jié)點(diǎn)量較大或者后期自動(dòng)擴(kuò)容時(shí)非常有用。
Master apiserver 啟用 TLS 認(rèn)證后,node 節(jié)點(diǎn) kubelet 組件想要加入集群,必須使用CA簽發(fā)的有效證書(shū)才能與 apiserver 通信,當(dāng) node 節(jié)點(diǎn)很多時(shí),簽署證書(shū)是一件很繁瑣的事情。因此 Kubernetes 引入了 TLS bootstraping 機(jī)制來(lái)自動(dòng)頒發(fā)客戶(hù)端證書(shū),kubelet 會(huì)以一個(gè)低權(quán)限用戶(hù)自動(dòng)向 apiserver 申請(qǐng)證書(shū),kubelet 的證書(shū)由 apiserver 動(dòng)態(tài)簽署。
kubelet 首次啟動(dòng)通過(guò)加載 bootstrap.kubeconfig 中的用戶(hù) Token 和 apiserver CA 證書(shū)發(fā)起首次 CSR 請(qǐng)求,這個(gè) Token 被預(yù)先內(nèi)置在 apiserver 節(jié)點(diǎn)的 token.csv 中,其身份為 kubelet-bootstrap 用戶(hù)和 system:kubelet-bootstrap 用戶(hù)組;想要首次 CSR 請(qǐng)求能成功(即不會(huì)被 apiserver 401 拒絕),則需要先創(chuàng)建一個(gè) ClusterRoleBinding,將 kubelet-bootstrap 用戶(hù)和 system:node-bootstrapper 內(nèi)置 ClusterRole 綁定(通過(guò) kubectl get clusterroles 可查詢(xún)),使其能夠發(fā)起 CSR 認(rèn)證請(qǐng)求。
TLS bootstrapping 時(shí)的證書(shū)實(shí)際是由 kube-controller-manager 組件來(lái)簽署的,也就是說(shuō)證書(shū)有效期是 kube-controller-manager 組件控制的;kube-controller-manager 組件提供了一個(gè) --experimental-cluster-signing-duration 參數(shù)來(lái)設(shè)置簽署的證書(shū)有效時(shí)間;默認(rèn)為 8760h0m0s,將其改為 87600h0m0s,即 10 年后再進(jìn)行 TLS bootstrapping 簽署證書(shū)即可。
也就是說(shuō) kubelet 首次訪問(wèn) API Server 時(shí),是使用 token 做認(rèn)證,通過(guò)后,Controller Manager 會(huì)為 kubelet 生成一個(gè)證書(shū),以后的訪問(wèn)都是用證書(shū)做認(rèn)證了。
cd /root/k8sbinary/TLS/k8s
cp /root/k8sbinary/TLS/k8s/token.csv /etc/kubernetes/ssl
cp /root/k8sbinary/TLS/k8s/ca*.pem /etc/kubernetes/ssl
cp /root/k8sbinary/TLS/k8s/kube-api*.pem /etc/kubernetes/ssl
scp ca*.pem node1:/etc/kubernetes/ssl
scp ca*.pem node2:/etc/kubernetes/ssl
scp /root/k8sbinary/TLS/k8s/token.csv node1:/etc/kubernetes/ssl
scp /root/k8sbinary/TLS/k8s/token.csv node1:/etc/kubernetes/ssl
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver
systemctl status kube-apiserver
通過(guò)kubeadmin安裝K8S集群可以做到快速部署,但是如果需要調(diào)整K8S各個(gè)組件及服務(wù)的安全配置,高可用模式,最好通過(guò)二進(jìn)制模式進(jìn)行K8S的安裝
生產(chǎn)環(huán)境K8S Master節(jié)點(diǎn)最好在3個(gè)節(jié)點(diǎn)以上,且配置不低于4核16g
生產(chǎn)環(huán)境:確保Master高可用,啟用安全訪問(wèn)機(jī)制
PS:
服務(wù)器節(jié)點(diǎn)只是起名字,與是否為k8s-master或k8s-node無(wú)關(guān),可根據(jù)需要增加或刪減測(cè)試用例的數(shù)量,如多臺(tái)master主機(jī)只部署k8s-master組件。多臺(tái)node主機(jī)只部署k8s-node組件
master1 192.168.100.100
node1 192.168.100.101
node2 192.168.100.102
注:本節(jié)中創(chuàng)建的證書(shū)為部署流程全過(guò)程證書(shū),測(cè)試用例為openssl生成證書(shū),cfssl生成證書(shū)需要參考cfssl生成k8s證書(shū),并在對(duì)應(yīng)配置文件的相關(guān)證書(shū)位置替換對(duì)應(yīng)證書(shū)
在配置文件中需要在[alt_names]設(shè)置Master服務(wù)的全部域名和IP地址,包括:
參數(shù)解析
配置文件詳解:
分發(fā)配置文件
配置文件詳解:
配置詳解
分發(fā)配置文件
分發(fā)配置文件
在三個(gè)kube-apiserver的前段部署HAProxy和keepalived,使用VIP(虛擬IP地址)192.168.100.200作為Master的唯一入口地址,供客戶(hù)端訪問(wèn)
將HAProxy和keepalived均部署為至少有兩個(gè)實(shí)例的高可用架構(gòu),以避免單點(diǎn)故障。
接下來(lái)在主機(jī)master(192.168.100.100)和主機(jī)node1(192.168.100.101)中部署
HAProxy負(fù)責(zé)將客戶(hù)端請(qǐng)求轉(zhuǎn)發(fā)到后端的3個(gè)kube-apiserver實(shí)例上,keepalived負(fù)責(zé)維護(hù)VIP的高可用
準(zhǔn)備 HAProxy 的配置文件 haproxy.cfg
參數(shù)說(shuō)明:
分發(fā)配置文件
在master(192.168.100.100)和node1(192.168.100.101)上使用docker部署HAProxy,并將配置文件掛載到容器的/usr/local/etc/haproxy下
訪問(wèn)192.168.100.100:8888/stats,192.168.100.101:8888/stats
keepalived用于維護(hù)VIP地址的高可用,同樣在master和node1中部署
主節(jié)點(diǎn)配置文件
子節(jié)點(diǎn)配置文件
參數(shù)解析
主節(jié)點(diǎn)和子節(jié)點(diǎn)配置異同
健康檢查腳本
keeplived需要持續(xù)監(jiān)控HAProxy的運(yùn)行狀態(tài),在某個(gè)節(jié)點(diǎn)運(yùn)行不正常時(shí)轉(zhuǎn)移到另外的節(jié)點(diǎn)上去
監(jiān)控運(yùn)行狀態(tài)需要?jiǎng)?chuàng)建健康檢查腳本,定期運(yùn)行監(jiān)控
腳本內(nèi)容如下:
分發(fā)腳本
在master(192.168.100.100)和node1(192.168.100.101)上使用docker部署keeplived,并將配置文件掛載到容器的/container/service/keepalived/assets下,將腳本掛載到容器的/usr/bin下
檢查ens33網(wǎng)卡是否存在keeplived VIP地址
檢測(cè)keeplived是否進(jìn)行轉(zhuǎn)發(fā)
注:master集群已經(jīng)配置完畢,后續(xù)需要在node中需要部署docker,kubelet,kube-proxy,且在加入k8s集群后,還需要部署CNI網(wǎng)絡(luò)插件、DNS插件等
之前已經(jīng)在master,node1,node2中部署了docker,接下來(lái)需要部署其他服務(wù)組件,本節(jié)部署kubelet組件
參數(shù)說(shuō)明
參數(shù)說(shuō)明
參數(shù)說(shuō)明
當(dāng)前顯示所有node為NOT READY,需要部署完網(wǎng)絡(luò)插件才可使用
為方便使用kubectl
二進(jìn)制包
注:推薦用二進(jìn)制包部署Kubernetes集群,雖手動(dòng)部署麻煩,但可以學(xué)習(xí)很多工作原理利于后期維護(hù)。
環(huán)境
可以使用VMware虛擬機(jī),宿主機(jī)必須8G內(nèi)存以上
? 服務(wù)器可以訪問(wèn)外網(wǎng),有從網(wǎng)上拉取鏡像的需求
單Master服務(wù)器規(guī)劃:( 注:部署時(shí)候根據(jù)具體環(huán)境進(jìn)行IP地址調(diào)整即可 )
這里使用3臺(tái)組建集群,可容忍1臺(tái)機(jī)器故障,當(dāng)然,你也可以使用5臺(tái)組建集群
etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113
cfssl是一個(gè)開(kāi)源的證書(shū)管理工具,使用json文件生成證書(shū),相比openssl更方便使用。
找任意一臺(tái)服務(wù)器操作,這里用Master節(jié)點(diǎn)。
創(chuàng)建工作目錄:
自簽CA:
生成證書(shū):
會(huì)生成ca.pem和ca-key.pem文件。
創(chuàng)建證書(shū)申請(qǐng)文件:
注:上述文件hosts字段中IP為所有etcd節(jié)點(diǎn)的集群內(nèi)部通信IP,一個(gè)都不能少!為了方便后期擴(kuò)容可以多寫(xiě)幾個(gè)預(yù)留的IP。
生成證書(shū):
會(huì)生成etcd.pem和etcd-key.pem文件。
etcd-v3.5.1-linux-amd64.tar.gz
以下在節(jié)點(diǎn)1上操作,然后將文件拷貝到其他集群機(jī)器
把剛才生成的證書(shū)拷貝到配置文件中的路徑:
注意修改節(jié)點(diǎn)2和節(jié)點(diǎn)3分別etcd.conf配置,按照下面提示的修改
啟動(dòng)各節(jié)點(diǎn)的etcd服務(wù)
如果輸出上面信息,就說(shuō)明集群部署成功。
如果有問(wèn)題看日志:/var/log/message
docker二進(jìn)制下載地址:
注:使用yum安裝也行
集群所有機(jī)器都安裝docker
生成證書(shū):
會(huì)生成ca.pem和ca-key.pem文件。
創(chuàng)建證書(shū)申請(qǐng)文件:
生成證書(shū):
會(huì)生成k8s.pem和k8s-key.pem文件。
下載地址參考:
Wget
把剛才生成的證書(shū)拷貝到配置文件中的路徑:
TLS Bootstrapping 機(jī)制,對(duì)work-node加入進(jìn)行自簽證書(shū)用
創(chuàng)建上述配置文件中token文件:
token 可以自行生產(chǎn),百度下怎么生產(chǎn)
kube-apiserver服務(wù)
生成kube-controller-manager證書(shū):
生成kubeconfig文件(以下是shell命令,直接在終端執(zhí)行):
生成kube-scheduler證書(shū):
生成kubeconfig文件:
生成kubeconfig文件:
通過(guò)kubectl工具查看當(dāng)前集群組件狀態(tài):
在所有worker node創(chuàng)建工作目錄:
從master節(jié)點(diǎn)拷貝:
注:由于網(wǎng)絡(luò)插件還沒(méi)有部署,節(jié)點(diǎn)會(huì)沒(méi)有準(zhǔn)備就緒 NotReady
二進(jìn)制包下載地址:
確保kubelet啟用CNI:
在Master執(zhí)行:
應(yīng)用場(chǎng)景:例如kubectl logs
在Master節(jié)點(diǎn)將Worker Node涉及文件拷貝到新節(jié)點(diǎn)192.168.3.112/113
注:這幾個(gè)文件是證書(shū)申請(qǐng)審批后自動(dòng)生成的,每個(gè)Node不同,必須刪除
Node2(192.168.3.113 )節(jié)點(diǎn)同上。記得修改主機(jī)名!
訪問(wèn)地址:
創(chuàng)建service account并綁定默認(rèn)cluster-admin管理員集群角色:
使用輸出的token登錄Dashboard。
CoreDNS用于集群內(nèi)部Service名稱(chēng)解析。
DNS解析測(cè)試:
這樣 單Master集群就搭建完成了