共計(jì) 2669 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。
本篇文章為大家展示了 Kubernetes Ingress 高可靠部署的實(shí)踐是怎樣的,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
簡(jiǎn)介
在 Kubernetes 集群中,Ingress 是授權(quán)入站連接到達(dá)集群服務(wù)的規(guī)則集合,為您提供七層負(fù)載均衡能力,您可以通過 Ingress 配置提供外部可訪問的 URL、負(fù)載均衡、SSL、基于名稱的虛擬主機(jī)等。作為集群流量接入層,Ingress 的高可靠性顯得尤為重要,今天我們主要探討如何部署一套高性能高可靠的 Ingress 接入層。
高可靠部署架構(gòu)
高可靠性首先要解決的就是單點(diǎn)故障問題,一般常用的是采用多副本部署的方式,我們?cè)?Kubernetes 集群中部署高可靠 Ingress 接入層同樣采用多節(jié)點(diǎn)部署架構(gòu),同時(shí)由于 Ingress 作為集群流量接入口,建議采用獨(dú)占 Ingress 節(jié)點(diǎn)的方式,以避免業(yè)務(wù)應(yīng)用與 Ingress 服務(wù)發(fā)生資源爭(zhēng)搶。
如上述部署架構(gòu)圖,由多個(gè)獨(dú)占 Ingress 實(shí)例組成統(tǒng)一接入層承載集群入口流量,同時(shí)可依據(jù)后端業(yè)務(wù)流量水平擴(kuò)縮容 Ingress 節(jié)點(diǎn)。當(dāng)然如果您前期的集群規(guī)模并不大,也可以采用將 Ingress 服務(wù)與業(yè)務(wù)應(yīng)用混部的方式,但建議進(jìn)行資源限制和隔離。
在阿里云容器服務(wù)集群中部署高可靠 Ingress 接入層部署說明
Ingress SLB:Ingress 接入層前端 SLB 實(shí)例
Ingress Node:部署 Ingress Pod 的集群節(jié)點(diǎn)
Ingress Pod:Ingress 服務(wù)實(shí)例
這三者之間依據(jù)標(biāo)簽 node-role.kubernetes.io/ingress=true 進(jìn)行關(guān)聯(lián):
Ingress SLB 后端只會(huì)掛載打標(biāo)了 node-role.kubernetes.io/ingress=true 的集群 Node;
Ingress Pod 只會(huì)被部署到打標(biāo)了 node-role.kubernetes.io/ingress=true 的集群 Node;
開始部署
1、創(chuàng)建 Kubernetes 集群
在創(chuàng)建集群之前,我們需要依據(jù)自身具體業(yè)務(wù)場(chǎng)景來適當(dāng)規(guī)劃集群的規(guī)模以及集群內(nèi)各節(jié)點(diǎn)角色,比如業(yè)務(wù)節(jié)點(diǎn)數(shù)、Ingress 節(jié)點(diǎn)數(shù)等,注意集群默認(rèn)會(huì)初始化 3 臺(tái) Master 節(jié)點(diǎn)來部署集群管控服務(wù)。
我們通過阿里云容器服務(wù)控制臺(tái)創(chuàng)建一個(gè) Kubernetes 集群,這里以創(chuàng)建 3 臺(tái) Worker 節(jié)點(diǎn)集群為例。
2、打標(biāo) Ingress Node
由于測(cè)試集群規(guī)模較小,我們暫采用混部的方式:即 3 臺(tái) Worker 節(jié)點(diǎn)既作為業(yè)務(wù)節(jié)點(diǎn)又作為 Ingress 節(jié)點(diǎn)。我們給 3 臺(tái) Worker 節(jié)點(diǎn)同時(shí)打標(biāo) node-role.kubernetes.io/ingress=true,注意不建議將 Ingress Pod 部署在集群 Master 節(jié)點(diǎn)上,因?yàn)?Master 節(jié)點(diǎn)承載著集群的所有管控服務(wù),以避免集群接入流量過高時(shí)對(duì)管控服務(wù)造成影響。
~ kubectl label no cn-hangzhou.i-bp1ecwpuisra0y0bizdb node-role.kubernetes.io/ingress=true
node cn-hangzhou.i-bp1ecwpuisra0y0bizdb
3、創(chuàng)建 Ingress 服務(wù)
集群初始化時(shí)默認(rèn)部署了一個(gè) Ingress Controller,具體部署說明請(qǐng)參考。這里我們通過 DaemonSet 方式將其重新部署到目標(biāo) Ingress Node 上,當(dāng)然您也可以采用 Deployment 配合親和性方式來部署。
~ kubectl -n kube-system delete deploy nginx-ingress-controller
deployment nginx-ingress-controller deleted
~ kubectl create -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-controller-ds.yml
daemonset nginx-ingress-controller created
~ kubectl -n kube-system get ds | grep nginx-ingress-controller
nginx-ingress-controller 3 3 3 3 3 node-role.kubernetes.io/ingress=true 42s
~ kubectl -n kube-system get pod -o wide | grep nginx-ingress-controller
nginx-ingress-controller-57j4l 1/1 Running 0 1m 172.16.3.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdd
nginx-ingress-controller-d7cxb 1/1 Running 0 1m 172.16.5.7 cn-hangzhou.i-bp1ecwpuisra0y0bizdc
nginx-ingress-controller-m9w75 1/1 Running 0 1m 172.16.4.2 cn-hangzhou.i-bp1ecwpuisra0y0bizdb
4、更新 Ingress SLB 服務(wù)
集群初始化時(shí)默認(rèn)部署了一個(gè) Ingress LoadBalancer Service,具體部署說明請(qǐng)參考,這里需要更新下 Ingress LoadBalancer Service,以自動(dòng)識(shí)別掛載打標(biāo)的 Ingress Node。
~ kubectl apply -f https://acs-k8s-ingress.oss-cn-hangzhou.aliyuncs.com/nginx-ingress-slb-service.yml
service nginx-ingress-lb configured
5、此時(shí)具有 3 個(gè) Ingress 實(shí)例的高可靠接入層部署完成。
快速擴(kuò)容
隨著您的業(yè)務(wù)流量不斷增長(zhǎng),集群規(guī)模不斷擴(kuò)大,您只需要簡(jiǎn)單地通過打標(biāo)的方式來快速擴(kuò)容 Ingress 接入層。
全方位監(jiān)控
集群 Ingress 接入層的監(jiān)控是必不可少的,您可以通過阿里云容器服務(wù)監(jiān)控以及阿里云云監(jiān)控對(duì) Ingress Pod 和 Ingress Node 進(jìn)行全方位監(jiān)控。
上述內(nèi)容就是 Kubernetes Ingress 高可靠部署的實(shí)踐是怎樣的,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。