【DevOps工程師】【Kubernetes】面試題

容器化和Docker相關(guān)的問題

選擇題

  • Docker命令的參數(shù)中,哪個是指定容器環(huán)境變量的參數(shù)?
    A:-t
    *B:-e
    C:-i
    D:-v
  • Docker下列哪個不是Docker技術(shù)實現(xiàn)的基礎(chǔ)
    A:UnionFS
    B:Cgroup
    C:Namespace
    *D:etcd

問答題

  • 簡單說一下你對docker的理解/優(yōu)點
    (這是一道開放性題目,可以一次性挖出面試者對于docker的理解,然后針對他所了解的部分進行深挖,然后針對沒有涉及的問題進行橫向擴展)

Docker是一個開源的應(yīng)用容器引擎,是容器虛擬化的一種實現(xiàn)方式,他是基于庫的虛擬化,讓開發(fā)/運維人員把程序所需要的依賴全部打包在一個鏡像中,具有一次打包,到處運行的特點,體積小且啟動快

  • Dockerfile中的RUN, CMD和ENTRYPOINT的區(qū)別

RUN命令執(zhí)行命令并創(chuàng)建新的鏡像層,通常用于安裝軟件包
CMD命令設(shè)置容器啟動后默認執(zhí)行的命令及其參數(shù),但CMD設(shè)置的命令能夠被docker run命令后面的命令行參數(shù)替換
ENTRYPOINT配置容器啟動時的執(zhí)行命令(不會被忽略,一定會被執(zhí)行,即使運行 docker run時指定了其他命令)

  • 簡述Docker技術(shù)三大要點:cgroup, namespace和unionFS實現(xiàn)方式

-- cgroup:Linux CGroupCgroup 可???讓???您???為???系???統(tǒng)???中???所???運???行???任???務(wù)???(進???程???)的???用???戶???定???義???組???群???分???配???資???源??? — 比???如??? CPU 時???間???、???系???統(tǒng)???內(nèi)???存???、???網(wǎng)???絡(luò)???帶???寬???或???者???這???些???資???源???的???組???合???。???您???可???以???監(jiān)???控???您???配???置???的??? cgroup,拒???絕??? cgroup 訪???問???某???些???資???源???,甚???至???在???運???行???的???系???統(tǒng)???中???動???態(tài)???配???置???您???的??? cgroup
-- namespace:
PID NameSpace:Linux 2.6.24 ,PID隔離
Network NameSpace:Linux 2.6.29,網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等網(wǎng)絡(luò)資源隔離
User NameSpace:Linux 3.8,用戶和用戶組資源隔離
IPC NameSpace:Linux 2.6.19,信號量、消息隊列和共享內(nèi)存的隔離
UTS NameSpace:Linux 2.6.19,主機名和域名的隔離;
Mount NameSpace:Linux 2.4.19,掛載點(文件系統(tǒng))隔離;
-- AUFS:
UnionFS:把不同的物理位置的目錄合并到同一個目錄中。
Device mapper/OverlayFS:由于Redhat并不原生支持AUFS,但是為了適應(yīng)Docker技術(shù),在RHEL6中引進的文件系統(tǒng),也可以使用OverlayFS,但是需要額外的配置

  • 在主機和容器上部署應(yīng)用程序有什么區(qū)別?


    image.png

請參考上圖。左側(cè)架構(gòu)表示在主機上部署應(yīng)用程序。因此,這種架構(gòu)將具有操作系統(tǒng),然后操作系統(tǒng)將具有內(nèi)核,該內(nèi)核將在應(yīng)用程序所需的操作系統(tǒng)上安裝各種庫。因此,在這種框架中,您可以擁有n個應(yīng)用程序,并且所有應(yīng)用程序?qū)⒐蚕碓摬僮飨到y(tǒng)中存在的庫,而在容器中部署應(yīng)用程序時,體系結(jié)構(gòu)則略有不同。

這種架構(gòu)將有一個內(nèi)核,這是唯一一個在所有應(yīng)用程序之間唯一共同的東西。因此,如果有一個需要Java的特定應(yīng)用程序,那么我們將獲得訪問Java的特定應(yīng)用程序,如果有另一個需要Python的應(yīng)用程序,則只有該特定應(yīng)用程序才能訪問Python。

您可以在圖表右側(cè)看到的各個塊基本上是容器化的,并且這些塊與其他應(yīng)用程序隔離。因此,應(yīng)用程序具有與系統(tǒng)其余部分隔離的必要庫和二進制文件,并且不能被任何其他應(yīng)用程序侵占。

Kubernetes基本面試問題

選擇題

  • Kubernetes集群數(shù)據(jù)存儲在以下哪個位置?
    A. kube-apiserver
    B. Kubelet
    *C. etcd
    D. promethues
  • 哪個是Kubernetes的Pod控制器?
    *A. ReplicaSet
    *B. Deployment
    C. kube-controller-manager
    D. Service
  • 以下哪個是核心Kubernetes對象?
    *A. Pods
    *B. Services
    *C. Volumes
    D. ReplicaSet
  • Kubernetes Network代理在哪個節(jié)點上運行?
    A. Master Node
    B. Worker Node
    *C. 所有節(jié)點
    D. 以上都不是
  • Controller-Manager的職責(zé)是什么?
    *A. 將CIDR塊分配給節(jié)點
    *B. 維護節(jié)點列表
    *C. 監(jiān)視節(jié)點的運行狀況
    D. 監(jiān)控文件大小
  • Replication Controller的職責(zé)是什么?
    *A. 使用單個命令更新或刪除多個pod
    *B. 有助于達到理想狀態(tài)
    *C. 如果現(xiàn)有Pod崩潰,則創(chuàng)建新Pod
    D. 維護節(jié)點列表
  • 如何在沒有選擇器的情況下定義服務(wù)?
    *A. 指定外部名稱
    B. 指定具有IP地址和端口的端點
    C. 只需指定IP地址即可
    D. 指定標簽和api版本

問答題

  • 簡單說一下你對Kubernetes的了解

Kubernetes是一個開源容器管理工具,負責(zé)容器部署,容器擴縮容以及負載平衡。作為Google的創(chuàng)意之作,它提供了出色的社區(qū),并與所有云提供商合作(如果可以說的CNCF的話證明經(jīng)常關(guān)注社區(qū))。因此,我們可以說Kubernetes不是一個容器化平臺,而是一個多容器管理解決方案。

  • Kubernetes的基本組成以及他們的作用,組件之間是如何交互的


    image.png

Master
-- kube-apiserver:Api Server 是唯一可以操作etcd 數(shù)據(jù)庫的組件,并提供了認證、授權(quán)等機制。它嚴格遵守了REST規(guī)范,去操作這些資源,具有CRUD特性。它是Kubernetes控制的前端工程,它能夠水平擴展,可以通過部署多個實例來達到高可用的目的。

-- kube-scheduler:通過API Server的watch接口監(jiān)聽新建Pod副本信息,并通過算法為該pod選擇一個合適的node。調(diào)度器可用選擇合適的策略,策略的考慮包括個人和集體資源的情況,軟件、硬件條件的影響,親和性和反親和性的規(guī)范等因素。調(diào)度器是可插拔的,并且我們期待支持多集群的調(diào)度,未來甚至希望可以支持用戶自定義的調(diào)度器。

-- kube-controller-manager:集群內(nèi)各種資源controller 的核心管理者。針對于每一種具體的資源,都有相應(yīng)的Controller,保證其下管理的每個Controller所對應(yīng)的資源始終處于“期望的狀態(tài)”。從邏輯上講,每個控制器都是一個單獨的過程,但為了降低復(fù)雜性,它們都被編譯成單個二進制文件并在單個進程中運行。

--- etcd:用于存儲集群中所有對象產(chǎn)生的數(shù)據(jù)。etcd是Coreos開源的(Apache 2.0協(xié)議)一個分布式鍵值存儲數(shù)據(jù)庫,它提供了一種在一組機器上存儲數(shù)據(jù)的可靠方法。 etcd采用了master-slave架構(gòu),在網(wǎng)絡(luò)分區(qū)期間優(yōu)雅地處理Leader選舉,并且可以容忍機器故障,包括Leader。

Worker
-- kubelet:用于和Master節(jié)點交互,運行了node上的Service進程
它位于集群中每個 node上非容器形式的服務(wù)進程組件,是Master和node之間的橋梁。處理Master下發(fā)到本Node上的pod創(chuàng)建、啟停等管理任務(wù),向API server注冊Node信息。監(jiān)控本Node上容器和節(jié)點資源情況,并定期向Master匯報節(jié)點資源占用情況。它還會向Master匯報容器運行的健康情況。

-- kube-proxy:Service抽象概念的實現(xiàn),將到service的請求按策略(負載均衡算法分發(fā)到后端的pod )上,默認使用iptables mode實現(xiàn);支持nodeport模式,實現(xiàn)從外部訪問集群內(nèi)的service。

  • k8s的pause容器有什么用

Pause容器,又叫Infra容器。在pod中擔(dān)任Linux命名空間共享的基礎(chǔ)。
PID命名空間:Pod中的不同應(yīng)用程序可以看到其他應(yīng)用程序的進程ID。
網(wǎng)絡(luò)命名空間:Pod中的多個容器能夠訪問同一個IP和端口范圍。
IPC命名空間:Pod中的多個容器能夠使用SystemV IPC或POSIX消息隊列進行通信。
UTS命名空間:Pod中的多個容器共享一個主機名;Volumes(共享存儲卷):
Pod中的各個容器可以訪問在Pod級別定義的Volumes。

  • 一個pod的創(chuàng)建過程
    Pod是Kubernetes的基礎(chǔ)單元,了解其創(chuàng)建的過程,更有助于理解系統(tǒng)的運作。
    ①用戶通過kubectl或其他API客戶端提交Pod Spec給API Server。
    ②API Server嘗試將Pod對象的相關(guān)信息存儲到etcd中,等待寫入操作完成,API Server返回確認信息到客戶端。
    ③API Server開始反映etcd中的狀態(tài)變化。
    ④所有的Kubernetes組件通過"watch"機制跟蹤檢查API Server上的相關(guān)信息變動。
    ⑤kube-scheduler(調(diào)度器)通過其"watcher"檢測到API Server創(chuàng)建了新的Pod對象但是沒有綁定到任何工作節(jié)點。
    ⑥kube-scheduler為Pod對象挑選一個工作節(jié)點并將結(jié)果信息更新到API Server。
    ⑦調(diào)度結(jié)果新消息由API Server更新到etcd,并且API Server也開始反饋該Pod對象的調(diào)度結(jié)果。
    ⑧Pod被調(diào)度到目標工作節(jié)點上的kubelet嘗試在當前節(jié)點上調(diào)用docker engine進行啟動容器,并將容器的狀態(tài)結(jié)果返回到API Server。
    ⑨API Server將Pod信息存儲到etcd系統(tǒng)中。
    ⑩在etcd確認寫入操作完成,API Server將確認信息發(fā)送到相關(guān)的kubelet。

  • 詳述kube-proxy原理,一個請求是如何經(jīng)過層層轉(zhuǎn)發(fā)落到某個pod上的整個過程。請求可能來自pod也可能來自外部。

kube-proxy其實就是管理service的訪問入口,包括集群內(nèi)Pod到Service的訪問和集群外訪問service。 kube-proxy管理sevice的Endpoints,該service對外暴露一個Virtual IP,也成為Cluster IP, 集群內(nèi)通過訪問這個Cluster IP:Port就能訪問到集群內(nèi)對應(yīng)的serivce下的Pod。 service是通過Selector選擇的一組Pods的服務(wù)抽象,其實就是一個微服務(wù),提供了服務(wù)的LB和反向代理的能力,而kube-proxy的主要作用就是負責(zé)service的實現(xiàn)。 service另外一個重要作用是,一個服務(wù)后端的Pods可能會隨著生存滅亡而發(fā)生IP的改變,service的出現(xiàn),給服務(wù)提供了一個固定的IP,而無視后端Endpoint的變化。
kube-proxy當前實現(xiàn)了兩種proxyMode:userspace和iptables。其中userspace mode是v1.0及之前版本的默認模式,從v1.1版本中開始增加了iptables mode,在v1.2版本中正式替代userspace模式成為默認模式。最新版本中iptables已經(jīng)改成了LVS。

  • 一個最小的可以運行容器的K8S平臺應(yīng)該包含哪些組件
    除了Master和Worker節(jié)點上運行的組件之外還需要安裝下面的組件才可以正常部署容器
    -- CNI(網(wǎng)絡(luò)方案calico、flannel、canel、weaver)
    -- DNS(CoreDNS、dnsmasq)

  • 什么是Ingress網(wǎng)絡(luò),它是如何工作的?
    Ingress網(wǎng)絡(luò)是一組規(guī)則,充當Kubernetes集群的入口點。這允許入站連接,可以將其配置為通過可訪問的URL,負載平衡流量或通過提供基于名稱的虛擬主機從外部提供服務(wù)。因此,Ingress是一個API對象,通常通過HTTP管理集群中服務(wù)的外部訪問,是暴露服務(wù)的最有效方式。
    現(xiàn)在,讓我以一個例子向您解釋Ingress網(wǎng)絡(luò)的工作。
    有2個節(jié)點具有帶有Linux橋接器的pod和根網(wǎng)絡(luò)命名空間。除此之外,還有一個名為flannel0(網(wǎng)絡(luò)插件)的新虛擬以太網(wǎng)設(shè)備被添加到根網(wǎng)絡(luò)中。
    現(xiàn)在,假設(shè)我們希望數(shù)據(jù)包從pod1流向pod 4.請參閱下圖。


    image.png

    因此,數(shù)據(jù)包將pod1的網(wǎng)絡(luò)保留在eth0,并進入veth0的根網(wǎng)絡(luò)。
    然后它被傳遞給cbr0,這使得ARP請求找到目的地,并且發(fā)現(xiàn)該節(jié)點上沒有人具有目的地IP地址。
    因此,橋接器將數(shù)據(jù)包發(fā)送到flannel0,因為節(jié)點的路由表配置了flannel0。
    現(xiàn)在,flannel守護程序與Kubernetes的API服務(wù)器通信,以了解所有pod IP及其各自的節(jié)點,以創(chuàng)建pods IP到節(jié)點IP的映射。
    網(wǎng)絡(luò)插件將此數(shù)據(jù)包封裝在UDP數(shù)據(jù)包中,其中額外的標頭將源和目標IP更改為各自的節(jié)點,并通過eth0發(fā)送此數(shù)據(jù)包。
    現(xiàn)在,由于路由表已經(jīng)知道如何在節(jié)點之間路由流量,因此它將數(shù)據(jù)包發(fā)送到目標節(jié)點2。
    數(shù)據(jù)包到達node2的eth0并返回到flannel0以解封裝并在根網(wǎng)絡(luò)命名空間中將其發(fā)回。
    同樣,數(shù)據(jù)包被轉(zhuǎn)發(fā)到Linux網(wǎng)橋以發(fā)出ARP請求以找出屬于veth1的IP。
    數(shù)據(jù)包最終穿過根網(wǎng)絡(luò)并到達目標Pod4。

  • Replica Set 和 Replication Controller之間有什么區(qū)別?
    Replica Set 和 Replication Controller幾乎完全相同。它們都確保在任何給定時間運行指定數(shù)量的pod副本。不同之處在于復(fù)制pod使用的選擇器。Replica Set使用基于集合的選擇器,而Replication Controller使用基于權(quán)限的選擇器。
    -- Equity-Based選擇器:這種類型的選擇器允許按標簽鍵和值進行過濾。因此,在外行術(shù)語中,基于Equity的選擇器將僅查找與標簽具有完全相同短語的pod。 示例:假設(shè)您的標簽鍵表示app = nginx,那么,使用此選擇器,您只能查找標簽應(yīng)用程序等于nginx的那些pod。
    -- Selector-Based選擇器:此類型的選擇器允許根據(jù)一組值過濾鍵。因此,換句話說,基于Selector的選擇器將查找已在集合中提及其標簽的pod。 示例:假設(shè)您的標簽鍵在(nginx,NPS,Apache)中顯示應(yīng)用程序。然后,使用此選擇器,如果您的應(yīng)用程序等于任何nginx,NPS或Apache,則選擇器將其視為真實結(jié)果。

基礎(chǔ)產(chǎn)品的面試問題

除了Kubernetes,你還知道哪些容器編排工具,說說他們的優(yōu)缺點。

Kubernetes與Docker Swarm的區(qū)別


image.png

你還了解哪些Devops相關(guān)的產(chǎn)品。

Devops產(chǎn)品:Openshift,AWS EKS
CI產(chǎn)品:Jenkins,rundeck
CD產(chǎn)品:Spinnaker,JenkinsX
Docker倉庫:Vmware Harbor
GIT倉庫:GitLab,BitBucket
Agile工具:JIRA
自動化工具:ansible,chef,puppet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容