[toc] # Linux運維工程師面試題(9) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 pod 的生命周期 第一階段: - Pending:正在創建 Pod 但是 Pod ...
目錄
Linux運維工程師面試題(9)
祝各位小伙伴們早日找到自己心儀的工作。
持續學習才不會被淘汰。
地球不爆炸,我們不放假。
機會總是留給有有準備的人的。
加油,打工人!
1 pod 的生命周期
第一階段:
- Pending:正在創建 Pod 但是 Pod 中的容器還沒有全部被創建完成,處於此狀態的 Pod 應該檢查 Pod 依賴的存儲是否有許可權掛載、鏡像是否可以下載、調度是否正常等。
- Failed:Pod 中有容器啟動失敗而導致 pod 工作異常。
- Unknown:由於某種原因無法獲得 pod 的當前狀態,通常是由於與 pod 所在的 node 節點通信錯誤。
- Succeeded:Pod 中的所有容器都被成功終止即 pod 里所有的 containers 均已 terminated。
第二階段:
- Unschedulable:Pod不能被調度,kube-scheduler 沒有匹配到合適的node節點
- CPU資源不夠,記憶體資源不夠
- 打 labels 標簽
- PodScheduled:pod 正處於調度中,在 kube-scheduler 剛開始調度的時候,還沒有將 pod 分配到指定node,在篩選出合適的節點後就會更新 etcd 數據,將 pod 分配到指定的 node
- Initialized:所有 pod 中的初始化容器已經完成了
- ImagePullBackOff:Pod 所在的 node 節點下載鏡像失敗
- node 節點無法下載鏡像
- 網路問題
- 許可權問題
- 鏡像地址或者名稱寫錯
- Running:Pod 內部的容器已經被創建並且啟動
- Ready:表示 pod 中的容器已經可以提供訪問服務
2 探針類型
- livenessProbe:存活探針,檢測容器是否正在運行,如果存活探測失敗,則 kubelet 會殺死容器,並且容器將受到其重啟策略的影響,如果容器不提供存活探針,則預設狀態為 Success,livenessProbe 用戶控制是否重啟 pod。
- readinessProbe:就緒探針,如果就緒探測失敗,端點控制器將從與 Pod 匹配的所有 Service 的端點中刪除該 Pod 的 IP 地址,初始延遲之前的就緒狀態預設為 Failure,如果容器不提供就緒探針,則預設狀態為 Success,readinessProbe 用於控制 pod 是否添加至 service。
livenessProbe 和 readinessProbe 的對比
配置參數一樣
livenessProbe:連續探測失敗會重啟、重建 pod,readinessProbe 不會執行重啟或者重建Pod操作
livenessProbe:連續檢測指定次數失敗後會將容器置於 (Crash Loop BackOff) 切不可用,readinessProbe 不會
readinessProbe:連續探測失敗會從 service 的 endpointd 中刪除該 Pod,livenessProbe 不具備此功能,但是會將容器掛起 livenessProbe
livenessProbe 用戶控制是否重啟 pod,readinessProbe 用於控制 pod 是否添加至 service
3 探針方式
- ExecAction: 在容器內執行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。
- TCPSocketAction: 對容器的 IP 地址上的指定埠執行 TCP 檢查。如果埠打開,則診斷被認為是成功的。
- HTTPGetAction: 對容器的 IP 地址上指定埠和路徑執行 HTTP Get 請求。如果響應的狀態碼大於等於 200 且小於 400,則診斷被認為是成功的。
4 探針結果
- Success (成功):容器通過了診斷。
- Failure (失敗):容器未通過診斷。
- Unknown (未知):診斷失敗,因此不會採取任何行動。
5 Pod 重啟策略
restartPolicy:
- Always:當容器異常時,k8s 自動重啟該容器,ReplicationController/Replicaset/Deployment。
- OnFailure:當容器失敗時 (容器停止運行且退出碼不為0),k8s 自動重啟該容器。
- Never:不論容器運行狀態如何都不會重啟該容器,Job 或 CronJob。
6 鏡像獲取策略
imagePullPolicy:
- Always:每次啟動Pod時都要從指定的倉庫下載鏡像。
- IfNotPresent:僅本地鏡像缺失時才從目標倉庫下載鏡像。
- Never:禁止從倉庫下載鏡像,僅使用本地鏡像。
對於標簽為 latest 的鏡像文件,其預設的鏡像獲取策略為Always;
其他標簽的鏡像,預設策略則為IfNotPresent。
7 k8s 的服務類型
ClusterIP
:通過集群的內部 IP 暴露服務,選擇該值時服務只能夠在集群內部訪問。 這也是你沒有為服務顯式指定type
時使用的預設值。 你可以使用 Ingress 或者 Gateway API 向公眾暴露服務。NodePort
:通過每個節點上的 IP 和靜態埠(NodePort
)暴露服務。 為了讓節點埠可用,Kubernetes 設置了集群 IP 地址,這等同於你請求type: ClusterIP
的服務。LoadBalancer
:使用雲提供商的負載均衡器向外部暴露服務。 外部負載均衡器可以將流量路由到自動創建的NodePort
服務和ClusterIP
服務上。ExternalName
:通過返回CNAME
記錄和對應值,可以將服務映射到externalName
欄位的內容(例如,foo.bar.example.com
)。 無需創建任何類型代理。
8 k8s中 service 和 ingress 的區別
service 只能通過四層負載就是ip+埠的形式來暴露
ingress 可以提供7層的負責對外暴露介面,而且可以調度不同的業務域,不同的url訪問路徑的業務流量。
9 有狀態和無狀態服務的區別
http請求無狀態,多次請求之間沒有依賴關係
有狀態就是多次訪問之間有關聯關係,需要記錄多次之間的訪問關係
10 k8s 中 service 是做什麼的?
主要是做動態的發現後端主機的endpoint並提供負載均衡的一個入口。
關於我
全網可搜《阿賢Linux》
CSDN、知乎、嗶哩嗶哩、博客園、51CTO、掘金、思否、開源中國、阿裡雲、騰訊雲、華為雲、今日頭條、百家號、GitHub、個人博客
公眾號:阿賢Linux
個人博客:blog.waluna.top
https://blog.waluna.top/
原文鏈接: Linux運維工程師面試題(9).