運維面試題之k8s

吐槽:linux

我幹嗎要知道這些,能用不就好了k8s真香docker

 

Kubernetes有哪些特性?數據庫

Kubernetes是自動化容器編排的開源平臺,目標是讓部署容器化的應用簡單而且高效,提供了應用部署,規劃,更新,維護的一種機制api

Kubernetes一個核心的特色就是可讓容器按照用戶的指望狀態運行網絡

 

Kubernetes有哪些核心組件這些組件負責什麼工做?負載均衡

etcd:提供數據庫服務保存了整個集羣的狀態
kube-apiserver:提供了資源操做的惟一入口,並提供認證、受權、訪問控制、API註冊和發現等機制
kube-controller-manager:負責維護集羣的狀態,好比故障檢測、自動擴展、滾動更新等
cloud-controller-manager:是與底層雲計算服務商交互的控制器
kub-scheduler:負責資源的調度,按照預約的調度策略將Pod調度到相應的機器上
kubelet:負責維護容器的生命週期,同時也負責Volume和網絡的管理
kube-proxy:負責爲Service提供內部的服務發現和負載均衡,並維護網絡規則
container-runtime:是負責管理運行容器的軟件,好比docker雲計算

 

Pod是什麼?設計

在k8s中最小的管理元素不是容器而是Pod,Pod的上下文能夠理解爲多個linux命名空間的聯合,包括PID命名空間同一個Pod中的容器能夠互相看到PID、網絡命名空間同一個Pod中的容器可使用同一IPserver

 

爲何Kubernetes要設計Pod?生命週期

Pod中的容器能夠共用Pod提供的基礎設施

Pod的生命週期與管理器的生命週期的分離

調度和管理的易用性,解偶控制器和服務,後段管理器僅僅監控Pod

 

描述一下Pod的生命週期有哪些狀態?

status 屬性裏面有一個phase字段記錄了Pod的狀態

正常狀況下起一個新Pod的過程

Pending表示Pod已經被贊成建立,正在等待kube-scheduler選擇合適的節點建立,通常是在準備鏡像

Running表示Pod中全部容器已經被建立,而且至少有一個容器正在運行或者是正在啓動或者正在重啓

Succeeded表示全部容器已經成功終止,且不會再啓動

Failed表示Pod中全部容器都是非0狀態退出

Unknown表示沒法讀取Pod狀態一般是kube-controller-manager沒法與Pod通訊

 

怎麼看Pod中的容器是否健康?

status 屬性裏面有一個conditions字段記錄了容器狀態

其中 type: Ready=True 表示Pod已經準備就緒,切已經加入了Service的負載均衡當中

type: ContainersReady=True表示全部Pod中全部容器都經過了健康檢查(若有),並所有準備就緒

 

建立一個Pod會發生什麼事?

一、客戶端提交Pod的配置信息(能夠是Deployment定義好的信息)到kube-apiserver,kube-apiserve會把Pod信息存儲到ETCD當中

二、kube-scheduler 檢測到Pod信息會開始調度

三、kube-scheduler 開始調度預選,主要是過濾掉不符合Pod要求的節點

四、kube-scheduler 開始調度調優,主要是會給節點打分以選擇更加適合的節點

五、kube-scheduler 選擇好節點後會把結果存儲到ETCD

六、kubelet  根據調度結果執行Pod建立操做

 

刪除一個Pod會發生什麼事情?

kube-apiserver會接受到用戶的刪除指令,默認有30秒時間等待優雅退出,超過30秒會被標記爲死亡狀態

此時Pod的狀態是Terminating,Kubelet看到Pod標記爲Terminating開始了關閉Pod的工做

一、Pod從service的列表中被刪除

二、若是該Pod定義了一箇中止前的鉤子,其會在pod內部被調用,中止鉤子通常定義瞭如何優雅結束進程

三、進程被髮送TERM信號(kill -14)

四、當超過優雅退出時間時,Pod中的全部進程都很被髮送SIGKILL信號(kill -9)

 

kubernetes 經常使用的集羣網絡模型,有哪些特性?
Flanneld:
經常使用於OpenStack等雲平臺配合host-gw防止數據被屢次封裝,支持多種協議UDP、VxLAN、AWS VPC等,不支持Network Policy
Open vSwitch:
能夠用於實現k8s多租戶的網絡隔離,支持多種隧道協議GRE、VxLAN、 IPsec
Contiv:
經常使用於面向應用的網絡策略,甚至能夠配合硬件設備使用好比Cisco-SDN,而且支持BGP、VxLAN等協議

 

k8s的Service是什麼?

Pod每次重啓或者重新部署IP地址都會產生變化,這使得Pod間通訊和Pod與外部通訊變得困難,這時候Pod就須要一個固定的入口這就是Service

每一個Service都有一個clusterIP,clusterIP是固定的是外界訪問Pod的惟一入口,Service背後一般綁定了一組相同配置的Pod,經過負載均衡的方式把外界請求分配的多個Pod

 

k8s是怎麼進行服務註冊的?

Pod啓動後會加載當前環境全部Service信息,以便不一樣Pod根據Service名進行通訊

 

k8s集羣外流量怎麼訪問Pod?

能夠經過Service的NodePort方式訪問,會在全部節點監聽同一個端口好比30000端口,訪問節點30000端口的流量會被重定向到對應的Service上面

相關文章
相關標籤/搜索