k8s&docker面試總結


花了大半個月對k8s&docker進行了梳理,包括之前讀過的書,官方文檔以及k&d在公司項目的實踐等。

以下是個人對docker & k8s 面試知識點的總結:

1 docker

常見面試題如下 每一點可根據回答進行適當深入

1.1 什么是docker

  • docker和傳統linux的差異?
  • 容器和鏡像的區別?
  • 如何理解docker的緩存機制?

1.2 docker 網絡模型是什么?有何局限

  • docker的網絡基礎是什么?
  • docker的網絡模型是?有什么局限?
  • docker如何實現容器間通信的?

1.3 docker 基礎命令

  • cmd和entryPoint差異?
  • copy和add的差異?
  • 簡單講下swam/compose?

2 kubernetes

常見面試題如下 每一點可根據回答進行適當深入

2.1 什么是k8s?

  • 1 為什么用k8s 解決了什么問題?
  • 2 k8s有哪些組件,有什么作用?【同:Master節點和Node節點都用哪些組件】
  • 3 可以簡單說下Node Pod container 之間的關系嗎? 【可引入2.2/2.3對Pod SVC的考察】
  • 4 什么是SVC可以簡單描述下嗎?【可引入2.3對SVC的考察】
  • 5 可以簡單講下k8s的網絡模型嗎?
  • 6 Pod SVC Node Container 之間如何相互訪問
  • 7 swarm和k8s如何選擇?

2.2 考察Pod

  • 靜態Pod和普通Pod的差異?
  • 簡單講下Pod的生命周期重啟策略呢?
    - 不同組件對Pod的重啟策略要求一樣嗎?
  • 如何檢查Pod的健康狀態?哪2種探針?
    - 2種探針的實現方式
  • 簡單說下Pod的調度方式?

2.3 考察SVC

  • SVC有哪4種類型

2.4 k8s網絡模型

  • DNS和Iptables在k8s中的運用?有何差異
    - k8s如何解決多機器部署容器的網絡問題?
  • Pod SVC Node Container 之間如何相互訪問

3 參考答案

答案是根據所在公司項目結合自己的理解給出的答案 不一定完全准確但在面試中要做到有理有據突出自己的思路即可。

4 docker

問題和答案 如下

4.1 什么是docker?

通常問這個問題主要在於考察候選人是否真正了解過docker,很多人項目中都有用到docker,真正去了解過概念,架構的不多。從而來辨別簡歷上的熟悉/了解docker的水分。

如果這個都無法回答,那么接下來的docker考察也就毫無意義了,此問題通常也會結合以下問題來進行考察。

  1. docker和傳統linux的差異?
  2. docker都有哪些核心組件?
  3. 可以簡單說下docker的架構嗎?
  4. 容器和鏡像的區別?

docker是什么: Docker是一個可以把開發的應用程序自動部署到容器的開源引擎。

docker和VM差異: docker是一個應用層的抽象,容器之間通過網絡命名空間進行隔離,多個容器共享同一個操作系統內核。VM是對物理硬件層的抽象,每個VM都包含獨立的操作系統,重且啟動緩慢。VM主要為了提供系統環境,容器主要是為了提供應用環境。

docker組件: docker引擎【包含Docker客戶端&服務端】,docker鏡像,docker容器,Registry【鏡像倉庫】

docker的架構: C/s架構

容器和鏡像的區別: 鏡像是一個只讀模板,包括運行容器所需的數據,其內容在構建之后就不會被改變,可以用來創建新的容器。 鏡像由多個只讀層組成,容器在只讀層的基礎上多了一個讀寫層。

4.2 docker 網絡模型是什么?有何局限

這里也經常會結合K8s網絡原理進行考察,以及如下幾個考點

  1. docker的網絡基礎是什么?
  2. docker的網絡模型是?有什么局限?
  3. docker如何實現容器間通信的?

Docker網絡基礎: Docker是在操作系統層上對應用的抽象,使用網絡命名空間來對不同容器之間進行網絡隔離,用Veth設備對來進行容器之間的通訊。

docker的網絡模型: 有4種網絡模型 分別是Bridge Container host none 默認使用bridge網絡模型,容器的初次啟動會虛擬化出來一個新的網卡名為docker0,在多機器部署下docker0地址可能會沖突。所以docker對多機部署支持的不夠友好。

4.3 docker 基礎命令

出現頻率較高的為以下幾條命令的考察

  1. cmd和entry差異?
  2. copy和add的差異?
  3. docker-compose & docker swarm?

CMD & ENTRYPONIT

都是容器操作指令:
CMD 用於指定容器啟動時候默認執行的命令。可以被docker run指定的啟動命令覆蓋。ENTRYPONIT 指令可讓容器以應用程序或者服務的形式運行。一般不會被docker run指定的啟動命令覆蓋。dockerfile中的多個CMD & ENTRYPONIT只有最后一個會生效。

注意區別docker run 和RUN 一個是容器啟動命令,一個是鏡像構建時候所用。

copy & add

ADD & COPY 選取目標文件復制到鏡像當中。是針對鏡像的指令,唯一差別在於add源文件可以支持url且可以對壓縮文件進行解壓操作。而copy針對的是當前構建環境。

docker-compose & docker swarm
使用Docker compose可以用YAML文件來定義一組需要啟動的容器,以及容器運行時的屬性。docker-compose用來對這一組容器進行操作。
docker swarm 原生的Docker集群管理工具,依賴docker本身,很多重要功能依賴團隊二次開發。且社區不夠活躍,一般公司生產環境會選擇k8s,個人項目或者容器數量較少可選swarm,只需要docker即可完成,相對較輕。

5 kubernetes

5.1 什么是k8s?

對k8s的考察一般逃不過這樣入門級的問題,針對入門級的問題,面試官可能也會針對如下幾個點進行考察,在候選人答出來的基礎上,選擇其中一個進行深入。

  1. 為什么用k8s 解決了什么問題?
  2. k8s有哪些組件,有什么作用?
  3. 可以簡單說下Node Pod container 之間的關系嗎? 【進一步可對Pod SVC細節進行考察】
  4. 什么是SVC可以簡單描述下嗎?【可引對SVC的考察】
  5. 可以簡單講下k8s的網絡模型嗎?【可以和docker網絡模型結合考察】
  6. Pod SVC Node Container 之間如何相互訪問【衍生 外部環境如何訪問k8s】
  7. swarm和k8s如何選擇?

1 什么是k8s 為什么用k8s:
一個開源的容器集群管理平台【容器編排工具】,可提供容器集群的自動部署,擴縮容,維護等功能。分為管理節點Master和工作節點Node。在我們的項目中主要解決了環境一致性的問題,通過CI/CD使得運維部署變得簡單起來,以及自動部署,故障監控,自動擴縮容。可以提升開發效率。

2 k8s有那些組件:

  • etcd保存了整個集群的狀態;
  • apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API注冊和發現等機制;
  • controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
  • scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
  • kubelet負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理;
  • Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
  • kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;

3 Node&Pod&container之間的關系:Node一般指工作節點包含多個Pod Pod中包含多個Container,Pod中的container共享同一個網絡命名空間。

4 什么是SVC: SVC是對一組功能相似的Pod資源的抽象,相當於一組服務的負載均衡。

5 k8s的網絡模型:IP-Per-Pod 每個Pod有獨立的Ip地址,無論是否處於同一個Node節點,Pod可以通過IP相互訪問,且Pod和容器的地址和外部看到的地址是同一個地址。

6 Pod SVC Node Container 之間如何相互訪問:

  • 同Pod內的容器:同一個Pod的容器共享同一個網絡命名空間可以直接進行通訊
  • 同Node內不同Pod的容器:多個Pod都關聯在同一個Docker0網橋上,通過docker0網橋完成相互通訊。
  • 不同Node內Pod的容器:不同Node上的docker0可能會相同,PodIP和docker0是同網段的,所以需要將PodIP和NodeIP進行關聯且保障唯一,不同Pod之間的數據通過物理機的端口進行轉發即可完成通訊。

7:k8s 和docker swarm如何選擇: :

5.2 對SVC的考察

SVC是k8s中的核心概念 這里涉及知識點眾多 常見的面試考點如下

  1. 什么是SVC? 如何創建SVC?
  2. 使用SVC創建多個副本和使用RC創建多個副本有什么差異?
  3. SVC有哪幾種類型?
  4. SVC 負載分發策略有那些?
  5. 集群外如何訪問SVC?

SVC:是對一組功能相似的Pod資源的抽象,相當於一組服務的負載均衡。可以使用配置文件的方式創建也可以使用命令創建kubectl expose
SVC和RC提供服務的差距: RC創建的服務PodIP可能會變。SVC提供的clusterIP不會。通過Iptables的NAT轉換重定向到本地端口,在均衡到后端Pod。
svc的幾種類型: ClusterIp/NodePort/LoadBalancer/ExternalName

  • ClusterIp 默認類型 分配的一個虛擬地址,內部可以相互訪問,外部不行
  • NodePort 將SVC端口號映射到物理機
  • LoadBalancer 基於NodePort,雲服務商在外部創建了一個負載均衡到Pod
  • ExternalName 將外部地址經過集群內部的再一次封裝(實際上就是集群DNS服務器將CNAME解析到了外部地址上),實現了集群內部訪問即可。

svc負載分發策略: RoundRobin/SessionAffinity/自定義實現【基於標簽選擇器】

集群外部訪問: 端口映射到物理機即可

5.2 Pod考察

  1. Pod和靜態Pod的區別
  2. 生命周期和重啟策略 【這里可擴展 不同控制器對Pod的重啟策略要求】
  3. Pod如何健康檢查?
  4. Pod的調度方式?【擴展調度算法】
  5. Pod如何擴縮容?【擴展 RC和RS的差異】
答案

待補充 --詳見《k8s權威指南》讀書筆記

5.3 基礎原理類考察

主要考察對基本組件的理解 和原理分析

  1. API Server
  2. Controller Manager【Replication Controller/Node Controller/ResourceQuota Controller/Namespace Controller/SVC Controller& Endpoint Controller】
  3. Scheduler
  4. Kubelet 【Pod健康檢查 資源監控】
  5. Kube-Proxy
  6. k8s-DNS & Iptables差異
  7. k8s中Ingress是什么
  8. 簡述k8s中的如下屬性及其作用resources tolerations affinity
  9. k8s中pod、rs、deployment、hpa的基本概念,以及他們之間的關系
答案

待補充 --詳見《k8s權威指南》讀書筆記

5.4 網絡原理類考察

主要考察對基本組件的理解 和原理分析

  1. k8s的網絡模型是什么?
  2. Docker的網絡基礎是什么?
  3. Docker的網絡模型和局限?
  4. k8s的網絡組件之間是如何通訊的?
  5. 外部如何訪問k8s集群?
  6. 有那些開源組件支持k8s網絡模型?
答案

待補充 --詳見《k8s權威指南》讀書筆記

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM