視頻解析接口網(wǎng)站怎么做百度提交網(wǎng)站
目錄
?
83.簡(jiǎn)述你知道的 K8s 中幾種 Controller 控制器并詳述其工作原理。簡(jiǎn)述 ingress-controller 的工作機(jī)制。
特別說(shuō)明:
題目? ?1-68? ?屬于【Kubernetes】的常規(guī)概念題,即 “ 匯總(一)~(二十二)” 。
題目 69-113 屬于【Kubernetes】的生產(chǎn)應(yīng)用題。
83.簡(jiǎn)述你知道的 K8s 中幾種 Controller 控制器并詳述其工作原理。簡(jiǎn)述 ingress-controller 的工作機(jī)制。
(一)deployment(適合無(wú)狀態(tài)的服務(wù)部署):
(1)適合部署無(wú)狀態(tài)的應(yīng)用服務(wù),用來(lái)管理 pod 和 replicaset,具有上線(xiàn)部署、副本設(shè)定、滾動(dòng)更新、回滾等功能,還可提供聲明式更新,例如只更新一個(gè)新的 Image。
(2)編寫(xiě) yaml 文件,并創(chuàng)建 nginx 服務(wù) pod 資源。
[root@master test] # vim nginx-deployment.yam
apiVersion: apps/v1
kind: Deployment
metadata:
? name: nginx-deployment
? labels:
? ? app: nginx
spec:
? replicas: 3
? selector:
? ? matchLabels:
? ? app: nginx
template:
? metadata:
? ? labels:
? ? ? app: nginx
spec:
? containers:
? ? - name:nginx1
? ? ? image: nginx:1.15.4
? ? ? ports:
? ? ? - containerPort: 80
(3)查看控制器參數(shù):可以使用 describe 或者 edit 兩種方式。
① describe 方式:[root@master test] # kubectl describe deploy nginx-deployment
②???edit? ?方? 式? :[root@master test] # kubectl edit deploy nginx-deployment/
(二)Statefulset(適合有狀態(tài)的服務(wù)部署):
(1)特點(diǎn):
① 適合部署有狀態(tài)應(yīng)用;
②?解決 Pod 的獨(dú)立生命周期,保持 Pod 啟動(dòng)順序和唯一性;
③ 穩(wěn)定,唯一的網(wǎng)絡(luò)標(biāo)識(shí)符,持久存儲(chǔ)(例如:etcd 配置文件,節(jié)點(diǎn)地址發(fā)生變化,將無(wú)法使用);
④ 有序,優(yōu)雅的部署和擴(kuò)展、刪除和終止(例如:mysql 主從關(guān)系,先啟動(dòng)主,再啟動(dòng)從);
⑤ 有序,滾動(dòng)更新。
(2)應(yīng)用場(chǎng)景:例如數(shù)據(jù)庫(kù)
(3)無(wú)狀態(tài)服務(wù)的特點(diǎn):
① deployment 認(rèn)為所有的 pod 都是一樣的;
② 不用考慮順序的要求;
③ 不用考慮在哪個(gè) node 節(jié)點(diǎn)上運(yùn)行;
④ 可以隨意擴(kuò)容和縮容。
(4)有狀態(tài)服務(wù)的特點(diǎn):
① 實(shí)例之間有差別,每個(gè)實(shí)例都有自己的獨(dú)特性,元數(shù)據(jù)不同,例如 etcd,zookeeper;
② 實(shí)例之間不對(duì)等的關(guān)系,以及依靠外部存儲(chǔ)的應(yīng)用;
(5)常規(guī)的 service 服務(wù)和無(wú)頭服務(wù)的區(qū)別:
① service:一組 Pod 訪(fǎng)問(wèn)策略,提供 cluster-IP 群集之間通訊,還提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)。
② Headless service 無(wú)頭服務(wù),不需要 cluster-IP,直接綁定具體的 Pod 的 IP,無(wú)頭服務(wù)經(jīng)常用于 statefulset 的有狀態(tài)部署。
③ 創(chuàng)建無(wú)頭服務(wù)的 service 資源和 dns 資源:由于有狀態(tài)服務(wù)的 IP 地址是動(dòng)態(tài)的,所以使用無(wú)頭服務(wù)的時(shí)候要綁定 dns服務(wù)。
(三)Daemonset(一次部署):
(1)一次部署,所有的 node 節(jié)點(diǎn)都會(huì)部署,例如一些典型的應(yīng)用場(chǎng)景:
① 運(yùn)行集群存儲(chǔ) daemon,例如在每個(gè)Node 上運(yùn)行 glusterd、ceph;
② 在每個(gè) Node 上運(yùn)行日志收集 daemon,例如 fluentd、logstash;
③ 在每個(gè)Node 上運(yùn)行監(jiān)控 daemon,例如 Prometheus Node Exporter;
④ 在每一個(gè) Node 上運(yùn)行一個(gè) Pod;
⑤ 新加入的 Node 也同樣會(huì)自動(dòng)運(yùn)行一個(gè) Pod。
(2)應(yīng)用場(chǎng)景:
監(jiān)控,分布式存儲(chǔ),日志收集等。
(四)Job(一次性的執(zhí)行任務(wù)):
一次性執(zhí)行任務(wù),類(lèi)似 Linux 中的 job。
應(yīng)用場(chǎng)景:如離線(xiàn)數(shù)據(jù)處理,視頻解碼等業(yè)務(wù)。
(五)Cronjob(周期性的執(zhí)行任務(wù)):
周期性任務(wù),像 Linux 的 Crontab 一樣。
應(yīng)用場(chǎng)景:如通知,備份等。
使用 cronjob 要慎重,用完之后要?jiǎng)h掉,不然會(huì)占用很多資源。
(六)ingress-controller 的工作機(jī)制:
(1)誕生:
- 通常情況下,service 和 pod 的 IP 僅可在集群內(nèi)部訪(fǎng)問(wèn)。
- k8s 提供了 service 方式:NodePort 來(lái)提供對(duì)外的服務(wù),外部的服務(wù)可以通過(guò)訪(fǎng)問(wèn) Node 節(jié)點(diǎn) ip+NodePort 端口來(lái)訪(fǎng)問(wèn)集群內(nèi)部的資源,外部的請(qǐng)求先到達(dá) service 所選中的節(jié)點(diǎn)上,然后負(fù)載均衡到每一個(gè)節(jié)點(diǎn)上。
- NodePort 雖然提供了對(duì)外的方式但也有很大弊端:
① 由于 service 的實(shí)現(xiàn)方式:user_space 、iptebles、3ipvs、方式這三種方式只支持在 4 層協(xié)議通信,不支持 7 層協(xié)議,因此 NodePort 不能代理 https服務(wù);
② NodePort 需要暴露 service 所屬每個(gè) node 節(jié)點(diǎn)上端口,當(dāng)需求越來(lái)越多,端口數(shù)量過(guò)多,導(dǎo)致維護(hù)成本過(guò)高,并且集群不好管理。
(2)原理:
- Ingress 也是 Kubernetes APl 的標(biāo)準(zhǔn)資源類(lèi)型之一,它其實(shí)就是一組基于 DNS 名稱(chēng)(host)或 URL 路徑把請(qǐng)求轉(zhuǎn)發(fā)到指定的 Service 資源的規(guī)則。用于將集群外部的請(qǐng)求流量轉(zhuǎn)發(fā)到集群內(nèi)部完成的服務(wù)發(fā)布。
- 我們需要明白的是,Ingress 資源自身不能進(jìn)行 “ 流量穿透 ”,僅僅是一組規(guī)則的集合,這些集合規(guī)則還需要其他功能的輔助,比如監(jiān)聽(tīng)某套接字,然后根據(jù)這些規(guī)則的匹配進(jìn)行路由轉(zhuǎn)發(fā),這些能夠?yàn)?Ingress 資源監(jiān)聽(tīng)套接字并將流量轉(zhuǎn)發(fā)的組件就是 IngressController。
- Ingress 控制器不同于 Deployment 等 pod 控制器的是,Ingress 控制器不直接運(yùn)行為 kube-controller-manager 的一部分,它僅僅是 Kubernetes 集群的一個(gè)附件,類(lèi)似于 CoreDNS,需要在集群上單獨(dú)部署。
- ingress controller 通過(guò)監(jiān)視 api server 獲取相關(guān) ingress、service、endpoint、secret、node、configmap 對(duì)象,并在程序內(nèi)部不斷循環(huán)監(jiān)視相關(guān) service 是否有新的 endpoints 變化,一旦發(fā)生變化則自動(dòng)更新 nginx.conf 模板配置并產(chǎn)生新的配置文件進(jìn)行 reload。
“【Kubernetes】常見(jiàn)面試題匯總” 系列文章,可點(diǎn)擊鏈接查看專(zhuān)欄詳情:K8s 面試題匯總
?