1. 程式人生 > >50個你必須瞭解的Kubernetes面試問題

50個你必須瞭解的Kubernetes面試問題

Kubernetes一直是當今業界的流行語,也是最好的編排工具。它吸引了許多想要提升自己職業生涯的經驗豐富的專業人士。HuaWei,Pokemon,Box,eBay,Ing,Yahoo Japan,SAP,紐約時報,Open AI,Sound Cloud等跨國公司也使用Kubernetes。我相信你已經知道這些事實,這也是促使你開啟這個Kubernetes面試問題文章原因。 在這篇關於Kubernetes面試問題的文章中,我將討論在面試中提出的與Kubernetes相關的最重要問題。因此,為了您的理解,我將此部落格分為以下4個部分: Kubernetes基本面試問題 基於架構的面試問題 基於場景的面試問題 多項選擇題 所以讓我們開始吧!! 基本的Kubernetes面試問題 這部分問題將包含您需要了解的與Kubernetes工作相關的所有基本問題。 Q1。Kubernetes與Docker Swarm的區別如何? Q2。什麼是Kubernetes? Kubernetes是一個開源容器管理工具,負責容器部署,容器擴縮容以及負載平衡。作為Google的創意之作,它提供了出色的社群,並與所有云提供商合作。因此,我們可以說Kubernetes不是一個容器化平臺,而是一個多容器管理解決方案。 Q3。Kubernetes與Docker有什麼關係? 眾所周知,Docker提供容器的生命週期管理,Docker映象構建執行時容器。但是,由於這些單獨的容器必須通訊,因此使用Kubernetes。因此,我們說Docker構建容器,這些容器通過Kubernetes相互通訊。因此,可以使用Kubernetes手動關聯和編排在多個主機上執行的容器。 Q4。在主機和容器上部署應用程式有什麼區別? 請參考上圖。左側架構表示在主機上部署應用程式。因此,這種架構將具有作業系統,然後作業系統將具有核心,該核心將在應用程式所需的作業系統上安裝各種庫。因此,在這種框架中,您可以擁有n個應用程式,並且所有應用程式將共享該作業系統中存在的庫,而在容器中部署應用程式時,體系結構則略有不同。 這種架構將有一個核心,這是唯一一個在所有應用程式之間唯一共同的東西。因此,如果有一個需要Java的特定應用程式,那麼我們將獲得訪問Java的特定應用程式,如果有另一個需要Python的應用程式,則只有該特定應用程式才能訪問Python。 您可以在圖表右側看到的各個塊基本上是容器化的,並且這些塊與其他應用程式隔離。因此,應用程式具有與系統其餘部分隔離的必要庫和二進位制檔案,並且不能被任何其他應用程式侵佔。 Q5。什麼是Container Orchestration? 考慮一個應用程式有5-6個微服務的場景。現在,這些微服務被放在單獨的容器中,但如果沒有容器編排就無法進行通訊。因此,由於編排意味著所有樂器在音樂中和諧共處,所以類似的容器編排意味著各個容器中的所有服務協同工作以滿足單個伺服器的需求。 Q6。Container Orchestration需要什麼? 考慮到你有5-6個微服務用於執行各種任務的單個應用程式,所有這些微服務都放在容器中。現在,為了確保這些容器彼此通訊,我們需要容器編排。 正如您在上圖中所看到的,在沒有使用容器編排的情況下,還存在許多挑戰。因此,為了克服這些挑戰,容器編排就到位了。 Q7。Kubernetes有什麼特點? Kubernetes的功能如下: Q8。Kubernetes如何簡化容器化部署? 由於典型應用程式將具有跨多個主機執行的容器叢集,因此所有這些容器都需要相互通訊。因此,要做到這一點,你需要一些能夠負載平衡,擴充套件和監控容器的東西。由於Kubernetes與雲無關並且可以在任何公共/私有提供商上執行,因此必須是您簡化容器化部署的選擇。 Q9。您對Kubernetes的叢集瞭解多少? Kubernetes背後的基礎是我們可以實施所需的狀態管理,我的意思是我們可以提供特定配置的叢集服務,並且叢集服務將在基礎架構中執行並執行該配置。 因此,正如您在上圖中所看到的,部署檔案將具有提供給叢集服務所需的所有配置。現在,部署檔案將被提供給API,然後由叢集服務決定如何在環境中安排這些pod,並確保正確執行的pod數量。 因此,位於服務前面的API,工作節點和節點執行的Kubelet程序,共同構成了Kubernetes叢集。 Q10。什麼是Google容器引擎? Google Container Engine(GKE)是Docker容器和叢集的開源管理平臺。這個基於Kubernetes的引擎僅支援在Google的公共雲服務中執行的群集。 Q11。什麼是Heapster? Heapster是由每個節點上執行的Kubelet提供的叢集範圍的資料聚合器。此容器管理工具在Kubernetes叢集上本機支援,並作為pod執行,就像叢集中的任何其他pod一樣。因此,它基本上發現叢集中的所有節點,並通過機上Kubernetes代理查詢叢集中Kubernetes節點的使用資訊。 Q12。什麼是Minikube? Minikube是一種工具,可以在本地輕鬆執行Kubernetes。這將在虛擬機器中執行單節點Kubernetes群集。 Q13。什麼是Kubectl? Kubectl是一個平臺,您可以使用該平臺將命令傳遞給叢集。因此,它基本上為CLI提供了針對Kubernetes叢集執行命令的方法,以及建立和管理Kubernetes元件的各種方法。 Q14。什麼是Kubelet? 這是一個代理服務,它在每個節點上執行,並使從伺服器與主伺服器通訊。因此,Kubelet處理PodSpec中提供給它的容器的描述,並確保PodSpec中描述的容器執行正常。 Q15。你對Kubernetes的一個節點有什麼瞭解? 基於架構的Kubernetes訪談問題 這部分問題將涉及與Kubernetes架構相關的問題。 Q1。Kubernetes Architecture的不同元件有哪些? Kubernetes Architecture主要有兩個元件 - 主節點和工作節點。如下圖所示,master和worker節點中包含許多內建元件。主節點具有kube-controller-manager,kube-apiserver,kube-scheduler等。而工作節點具有在每個節點上執行的kubelet和kube-proxy。 Q2。你對Kube-proxy有什麼瞭解? Kube-proxy可以在每個節點上執行,並且可以跨後端網路服務進行簡單的TCP / UDP資料包轉發。基本上,它是一個網路代理,它反映了每個節點上Kubernetes API中配置的服務。因此,Docker可連結的相容環境變數提供由代理開啟的群集IP和埠。 Q3。您能否介紹一下Kubernetes中主節點的工作情況? Kubernetes master控制容器存在的節點和節點內部。現在,這些單獨的容器包含在容器內部和每個容器內部,您可以根據配置和要求擁有不同數量的容器。因此,如果必須部署pod,則可以使用使用者介面或命令列介面部署它們。然後,在節點上排程這些pod,並根據資源需求,將pod分配給這些節點。kube-apiserver確保在Kubernetes節點和主元件之間建立通訊。 Q4。kube-apiserver和kube-scheduler的作用是什麼? kube -apiserver遵循橫向擴充套件架構,是主節點控制面板的前端。這將公開Kubernetes主節點元件的所有API,並負責在Kubernetes節點和Kubernetes主元件之間建立通訊。 kube-scheduler負責工作節點上工作負載的分配和管理。因此,它根據資源需求選擇最合適的節點來執行未排程的pod,並跟蹤資源利用率。它確保不在已滿的節點上排程工作負載。 Q5。你能簡要介紹一下Kubernetes控制管理器嗎? 多個控制器程序在主節點上執行,但是一起編譯為單個程序執行,即Kubernetes控制器管理器。因此,Controller Manager是一個嵌入控制器並執行名稱空間建立和垃圾收集的守護程式。它擁有責任並與API伺服器通訊以管理端點。 因此,主節點上執行的不同型別的控制器管理器是: Q6。什麼是ETCD? Etcd是用Go程式語言編寫的,是一個分散式鍵值儲存,用於協調分散式工作。因此,Etcd儲存Kubernetes叢集的配置資料,表示在任何給定時間點的叢集狀態。 Q7。Kubernetes有哪些不同型別的服務? 以下是使用的不同型別的服務: Q8。你對Kubernetes的負載均衡器有什麼瞭解? 負載均衡器是暴露服務的最常見和標準方式之一。根據工作環境使用兩種型別的負載均衡器,即內部負載均衡器或外部負載均衡器。內部負載均衡器自動平衡負載並使用所需配置分配容器,而外部負載均衡器將流量從外部負載引導至後端容器。 Q9。什麼是Ingress網路,它是如何工作的? Ingress網路是一組規則,充當Kubernetes叢集的入口點。這允許入站連線,可以將其配置為通過可訪問的URL,負載平衡流量或通過提供基於名稱的虛擬主機從外部提供服務。因此,Ingress是一個API物件,通常通過HTTP管理叢集中服務的外部訪問,是暴露服務的最有效方式。 現在,讓我以一個例子向您解釋Ingress網路的工作。 有2個節點具有帶有Linux橋接器的pod和根網路名稱空間。除此之外,還有一個名為flannel0(網路外掛)的新虛擬乙太網裝置被新增到根網路中。 現在,假設我們希望資料包從pod1流向pod 4.請參閱下圖。 因此,資料包將pod1的網路保留在eth0,並進入veth0的根網路。 然後它被傳遞給cbr0,這使得ARP請求找到目的地,並且發現該節點上沒有人具有目的地IP地址。 因此,橋接器將資料包傳送到flannel0,因為節點的路由表配置了flannel0。 現在,flannel守護程式與Kubernetes的API伺服器通訊,以瞭解所有pod IP及其各自的節點,以建立pods IP到節點IP的對映。 網路外掛將此資料包封裝在UDP資料包中,其中額外的標頭將源和目標IP更改為各自的節點,並通過eth0傳送此資料包。 現在,由於路由表已經知道如何在節點之間路由流量,因此它將資料包傳送到目標節點2。 資料包到達node2的eth0並返回到flannel0以解封裝並在根網路名稱空間中將其發回。 同樣,資料包被轉發到Linux網橋以發出ARP請求以找出屬於veth1的IP。 資料包最終穿過根網路併到達目標Pod4。 Q10。您對雲控制器管理器有何瞭解? Cloud Controller Manager負責持久儲存,網路路由,從核心Kubernetes特定程式碼中抽象出特定於雲的程式碼,以及管理與底層雲服務的通訊。它可能會分成幾個不同的容器,具體取決於您執行的是哪個雲平臺,然後它可以使雲供應商和Kubernetes程式碼在沒有任何相互依賴的情況下開發。因此,雲供應商開發他們的程式碼並在執行Kubernetes時與Kubernetes雲控制器管理器連線。 各種型別的雲控制器管理器如下: Q11。什麼是Container資源監控? 對於使用者而言,瞭解應用程式的效能和所有不同抽象層的資源利用率非常重要,Kubernetes通過在容器,pod,服務和整個叢集等不同級別建立抽象來考慮叢集的管理。現在,可以監視每個級別,這只是容器資源監視。 各種容器資源監控工具如下: Q12。Replica Set 和 Replication Controller之間有什麼區別? Replica Set 和 Replication Controller幾乎完全相同。它們都確保在任何給定時間執行指定數量的pod副本。不同之處在於複製pod使用的選擇器。Replica Set使用基於集合的選擇器,而Replication Controller使用基於許可權的選擇器。 Equity-Based選擇器:這種型別的選擇器允許按標籤鍵和值進行過濾。因此,在外行術語中,基於Equity的選擇器將僅查詢與標籤具有完全相同短語的pod。 示例:假設您的標籤鍵表示app = nginx,那麼,使用此選擇器,您只能查詢標籤應用程式等於nginx的那些pod。 Selector-Based選擇器:此型別的選擇器允許根據一組值過濾鍵。因此,換句話說,基於Selector的選擇器將查詢已在集合中提及其標籤的pod。 示例:假設您的標籤鍵在(nginx,NPS,Apache)中顯示應用程式。然後,使用此選擇器,如果您的應用程式等於任何nginx,NPS或Apache,則選擇器將其視為真實結果。 Q13。什麼是Headless Service? Headless Service類似於“普通”服務,但沒有群集IP。此服務使您可以直接訪問pod,而無需通過代理訪問它。 Q14。使用Kubernetes時可以採取哪些最佳安全措施? 以下是使用Kubernetes時可以遵循的最佳安全措施: Q15。什麼是叢集聯邦? 在聯邦叢集的幫助下,可以將多個Kubernetes叢集作為單個叢集進行管理。因此,您可以在資料中心/雲中建立多個Kubernetes叢集,並使用聯邦來在一個位置控制/管理它們。 聯合叢集可以通過執行以下兩項操作來實現此目的。請參考下圖。 基於場景的面試問題 這部分問題將包含您在面試中可能遇到的各種基於場景的問題。 場景1: 假設一家基於單一架構的公司處理眾多產品。現在,隨著公司在當今的擴充套件行業的擴充套件,他們的單一架構開始引發問題。 您如何看待公司從單一服務轉向微服務並部署其服務容器? 解: 由於公司的目標是從單一應用程式轉向微服務,它們最終可以逐個構建,並行構建,只需在後臺切換配置。然後他們可以將這些內建微服務放在Kubernetes平臺上。因此,他們可以從一次或兩次遷移服務開始,並監控它們以確保一切執行穩定。一旦他們覺得一切順利,他們就可以將其餘的應用程式遷移到他們的Kubernetes叢集中。 場景2: 考慮一家擁有分散式系統的跨國公司,擁有大量資料中心,虛擬機器和許多從事各種任務的員工。 您認為這樣 的公司如何以與Kubernetes一致的方式管理所有任務? 解: 正如我們所有人都知道IT部門推出了數千個容器,其任務在分散式系統中遍佈全球眾多節點。 在這種情況下,公司可以使用能夠為基於雲的應用程式提供敏捷性,橫向擴充套件功能和DevOps實踐的東西。 因此,該公司可以使用Kubernetes來定製他們的排程架構並支援多種容器格式。這使得容器任務之間的親和性成為可能,從而提供更高的效率,併為各種容器網路解決方案和容器儲存提供廣泛支援。 場景3: 考慮一種情況,即公司希望通過維持最低成本來提高其效率和技術運營速度。 您認為公司將如何實現這一目標? 解: 公司可以通過構建CI/CD管道來實現DevOps方法,但是這裡可能出現的一個問題是配置可能需要一段時間才能啟動並執行。因此,在實施CI/CD管道之後,公司的下一步應該是在雲環境中工作。一旦他們開始處理雲環境,他們就可以在叢集上安排容器,並可以在Kubernetes的幫助下進行協調。這種方法將有助於公司縮短部署時間,並在各種環境中加快速度。 場景4: 假設一家公司想要修改它的部署方法,並希望建立一個更具可擴充套件性和響應性的平臺。 您如何看待這家公司能夠實現這一目標以滿足客戶需求? 解: 為了給數百萬客戶提供他們期望的數字體驗,公司需要一個可擴充套件且響應迅速的平臺,以便他們能夠快速地將資料傳送到客戶網站。現在,要做到這一點,公司應該從他們的私有資料中心(如果他們使用任何)轉移到任何雲環境,如AWS。不僅如此,他們還應該實現微服務架構,以便他們可以開始使用Docker容器。一旦他們準備好基礎框架,他們就可以開始使用最好的編排平臺,即Kubernetes。這將使團隊能夠自主地構建應用程式並快速交付它們。 場景5: 考慮一家擁有非常分散的系統的跨國公司,期待解決整體程式碼庫問題。 您認為公司如何解決他們的問題? 解 那麼,為了解決這個問題,我們可以將他們的單片程式碼庫轉移到微服務設計,然後每個微服務都可以被視為一個容器。因此,所有這些容器都可以在Kubernetes的幫助下進行部署和協調。 場景6: 我們所有人都知道,從單片到微服務的轉變解決了開發方面的問題,但卻增加了部署方面的問題。 公司如何解決部署方面的問題? 解 團隊可以試驗容器編排平臺,例如Kubernetes,並在資料中心執行。因此,通過這種方式,公司可以生成模板化應用程式,在五分鐘內部署它,並在此時將實際例項集中在暫存環境中。這種Kubernetes專案將有數十個並行執行的微服務,以提高生產率,即使節點出現故障,也可以立即重新安排,而不會影響效能。 場景7: 假設一家公司希望通過採用新技術來優化其工作負載的分配。 公司如何有效地實現這種資源分配? 解 這個問題的解決方案就是Kubernetes。Kubernetes確保資源得到有效優化,並且只使用特定應用程式所需的那些資源。因此,通過使用最佳容器編排工具,公司可以有效地實現資源分配。 場景8: 考慮一家拼車公司希望通過同時擴充套件其平臺來增加伺服器數量。 您認為公司如何處理伺服器及其安裝? 解 公司可以採用集裝箱化的概念。一旦他們將所有應用程式部署到容器中,他們就可以使用Kubernetes進行編排,並使用像Prometheus這樣的容器監視工具來監視容器中的操作。因此,利用容器的這種使用,在資料中心中為它們提供更好的容量規劃,因為它們現在將受到更少的限制,因為服務和它們執行的硬體之間存在抽象。 場景9: 考慮一種情況,公司希望向具有各種環境的客戶提供所有必需的分發。 您認為他們如何以動態的方式實現這一關鍵目標? 解 該公司可以使用Docker環境,組建一個橫截面團隊,使用Kubernetes構建Web應用程式。這種框架將幫助公司實現在最短的時間內將所需產品投入生產的目標。因此,在這樣的機器執行的情況下,公司可以向所有具有各種環境的客戶發放電子郵件。 場景10: 假設公司希望在不同的雲基礎架構上執行各種工作負載,從裸機到公共雲。 公司將如何在不同介面的存在下實現這一目標? 解 該公司可以將其基礎設施分解為微服務,然後採用Kubernetes。這將使公司在不同的雲基礎架構上執行各種工作負載。 多項選擇面試問題 這部分問題將包括多項面試問題,這些問題在面試中經常被問到。 Q1。什麼是Kubernetes叢集中的minions? 它們是主節點的元件。 它們是叢集的工作節點。[答案] 他們正在監控kubernetes中廣泛使用的引擎。 他們是docker容器服務。 Q2。Kubernetes叢集資料儲存在以下哪個位置? KUBE-API伺服器 Kubelet ETCD [答案] 以上都不是 Q3。哪個是Kubernetes控制器? ReplicaSet Deployment Rolling Updates ReplicaSet和Deployment [答案] Q4。以下哪個是核心Kubernetes物件? Pods Services Volumes 以上所有[答案] Q5。Kubernetes Network代理在哪個節點上執行? Master Node Worker Node 所有節點[答案] 以上都不是 Q6。 節點控制器的職責是什麼? 將CIDR塊分配給節點 維護節點列表 監視節點的執行狀況 以上所有[答案] Q7。Replication Controller的職責是什麼? 使用單個命令更新或刪除多個pod 有助於達到理想狀態 如果現有Pod崩潰,則建立新Pod 以上所有[答案] Q8。如何在沒有選擇器的情況下定義服務? 指定外部名稱[答案] 指定具有IP地址和埠的端點 只需指定IP地址即可 指定標籤和api版本 Q9。1.8版本的Kubernetes引入了什麼? Taints and Tolerations [答案] Cluster level Logging Secrets Federated Clusters Q10。Kubelet 呼叫的處理檢查容器的IP地址是否開啟的程式是? HTTPGetAction ExecAction TCPSocketAction [答案] 以上都不是 > 歡迎關注 [Java架構師社群](http://javajgs.com/)公眾號. > 本文轉載自[Java架構師必看](http://javajgs.com/archives/5504) ,更多內容點選