1. 程式人生 > 其它 >k8s面試常問問題

k8s面試常問問題

1,k8s是什麼?

   答:k8s是一個開源容器管理工具,負責容器部署,容器擴縮容以及負載均衡,是一個多容器管理解決方案。

k8s的目標是讓部署容器化的應用簡單並且高效,k8s提供了應用部署、規劃、更新、維護的一種機制!

Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單高效,Kubernetes提供了應用部署、規劃、更新、維護的一種機制。 在Kubenetes中,所有的容器均在Pod中執行,一個Pod可以承載一個或者多個相關的容器。同一個Pod中的容器會部署在同一個物理機器上並且能夠共享資源。一個Pod也可以包含0個或者多個磁碟卷組(volumes),這些卷組將會以目錄的形式提供給一個容器,或者被所有Pod中的容器共享。

 

2,k8s是由什麼組成的?

大多數分散式系統一樣,K8S叢集至少需要一個主節點(Master)和多個計算節點(Node)。
主節點主要用於暴露API,排程部署和節點的管理;
計算節點執行一個容器執行環境,一般是docker環境(類似docker環境的還有rkt),同時執行一
個K8s的代理(kubelet)用於和master通訊。計算節點也會執行一些額外的元件,像記錄日誌,
節點監控,服務發現等等。計算節點是k8s叢集中真正工作的節點。
K8S架構細分:
(1)、Master節點(預設不參加實際工作):
Kubectl:客戶端命令列工具,作為整個K8s叢集的操作入口;
Api Server:在K8s架構中承擔的是“橋樑”的角色,作為資源操作的唯一入口,它提供了認證、授
權、訪問控制、API註冊和發現等機制。客戶端與k8s群集及K8s內部元件的通訊,都要通過Api
Server這個元件;
Controller-manager:負責維護群集的狀態,比如故障檢測、自動擴充套件、滾動更新等;
Scheduler:負責資源的排程,按照預定的排程策略將pod排程到相應的node節點上;
Etcd:擔任資料中心的角色,儲存了整個群集的狀態;
(2)、Node節點:
Kubelet:負責維護容器的生命週期,同時也負責Volume和網路的管理,一般執行在所有的節點,
是Node節點的代理,當Scheduler確定某個node上執行pod之後,會將pod的具體資訊(image,
volume)等傳送給該節點的kubelet,kubelet根據這些資訊建立和執行容器,並向master返回運
行狀態。(自動修復功能:如果某個節點中的容器宕機,它會嘗試重啟該容器,若重啟無效,則會
將該pod殺死,然後重新建立一個容器);
Kube-proxy:Service在邏輯上代表了後端的多個pod。負責為Service提供cluster內部的服務發現
和負載均衡(外界通過Service訪問pod提供的服務時,Service接收到的請求後就是通過kubeproxy來轉發到pod上的);
container-runtime:是負責管理執行容器的軟體,比如docker
Pod:是k8s叢集裡面最小的單位。每個pod裡邊可以執行一個或多個container(容器),如果一
個pod中有兩個container,那麼container的USR(使用者)、MNT(掛載點)、PID(程序號)是
相互隔離的,UTS(主機名和域名)、IPC(訊息佇列)、NET(網路棧)是相互共享的。我比較喜
歡把pod來當做豌豆夾,而豌豆就是pod中的container;

 

3,什麼是pod?

pod是k8s管理的基本單元,pod的內部是容器,k8s不是直接管理容器,而是管理pod.

運行於Node節點上,若干相關容器的組合(Kubernetes 之 Pod 實現原理)。Pod內包含的容器執行在同一宿主機上,使用相同的網路名稱空間、IP地址和埠,能夠通過localhost進行通訊。

一個pod執行多個容器,容器間的通訊方式有三種:分別是(1),通過共享卷通訊。(2), 程序間通訊。 (3), 容器間的網路通訊,就是通過localhost通訊,因為他們使用同一個網路空間。主要這種方式。

Pod中的容器可以通過“localhost”來互相通訊,因為他們使用同一個網路名稱空間。而且,對容器來說,hostname就是Pod的名稱。因為Pod中的所有容器共享同一個IP地址和埠空間,你需要為每個需要接收連線的容器分配不同的埠。也就是說,Pod中的應用需要自己協調埠的使用。

Pod是Kurbernetes進行建立、排程和管理的最小單位,它提供了比容器更高層次的抽象,使得部署和管理更加靈活。一個Pod可以包含一個容器或者多個相關容器。

 

4,k8s與docker有什麼關係?

Docker提供了容器的生命週期管理,而Docker映像構建了執行時容器。但是,由於這些容器必須進行通訊,因此使用了Kubernetes。因此,Docker構建了容器,這些容器通過Kubernetes相互通訊。因此,可以使用Kubernetes進行協調和管理容器。   5,什麼是容器編排? 考慮一個應用程式有5-6個微服務的情況。現在,這些微服務放置在單獨的容器中,但是如果沒有容器編排,將無法進行通訊。因此,由於編排意味著將所有樂器在音樂中和諧地融合在一起,因此類似的容器編排意味著單個容器中的所有服務可以一起工作以滿足單個伺服器的需求。
6,你對k8s中的負載均衡器有什麼看法? 負載平衡器是公開服務的最常見和標準的方法之一。根據工作環境有兩種型別的負載均衡器,即內部負載均衡器或外部負載均衡器。
內部負載均衡器自動平衡負載並使用所需的配置分配pod,而外部負載均衡器將流量從外部負載定向到後端pod。   7,簡述Kubernetes建立一個Pod的主要流程?

Kubernetes中建立一個Pod涉及多個元件之間聯動,主要流程如下:
(1)、客戶端提交Pod的配置資訊(可以是yaml檔案定義的資訊)到kube-apiserver。
(2)、Apiserver收到指令後,通知給controller-manager建立一個資源物件。
(3)、Controller-manager通過api-server將pod的配置資訊儲存到ETCD資料中心中。
(4)、Kube-scheduler檢測到pod資訊會開始排程預選,會先過濾掉不符合Pod資源配置要求的節
點,然後開始排程調優,主要是挑選出更適合執行pod的節點,然後將pod的資源配置單傳送到
node節點上的kubelet元件上。
(5)、Kubelet根據scheduler發來的資源配置單執行pod,執行成功後,將pod的執行資訊返回給
scheduler,scheduler將返回的pod執行狀況的資訊儲存到etcd資料中心。

 

8,容器部署和主機部署的區別?

容器的中心思想就是秒級啟動;一次封裝、到處執行;這是主機部署應用無法達到的效果,但同時
也更應該注重容器的資料持久化問題。
另外,容器部署可以將各個服務進行隔離,互不影響,這也是容器的另一個核心概念。

 

9,簡述Kubernetes中,如何使用EFK實現日誌的統一管理?

在Kubernetes叢集環境中,通常一個完整的應用或服務涉及元件過多,建議對日誌系統進行集中化管
理,通常採用EFK實現。
EFK是 Elasticsearch、Fluentd 和 Kibana 的組合,其各元件功能如下:
Elasticsearch:是一個搜尋引擎,負責儲存日誌並提供查詢介面;
Fluentd:負責從 Kubernetes 蒐集日誌,每個node節點上面的fluentd監控並收集該節點上面的系
統日誌,並將處理過後的日誌資訊傳送給Elasticsearch;
Kibana:提供了一個 Web GUI,使用者可以瀏覽和搜尋儲存在 Elasticsearch 中的日誌。
通過在每臺node上部署一個以DaemonSet方式執行的fluentd來收集每臺node上的日誌。Fluentd將
docker日誌目錄/var/lib/docker/containers和/var/log目錄掛載到Pod中,然後Pod會在node節點
的/var/log/pods目錄中建立新的目錄,可以區別不同的容器日誌輸出,該目錄下有一個日誌檔案連結
到/var/lib/docker/contianers目錄下的容器日誌輸出。

 

10,Kubernetes與Docker Swarm有何不同?