發布時間:2024-01-24閱讀(14)
etcd 是 CoreOS 團隊發起的開源項目,是一個管理配置信息和服務發現(service discovery)的項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫,基于 Go 語言實現,今天小編就來聊一聊關于kubernetes底層系統選擇?接下來我們就一起去研究一下吧!

kubernetes底層系統選擇
簡述 ETCD 及其特點?etcd 是 CoreOS 團隊發起的開源項目,是一個管理配置信息和服務發現(service discovery)的項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫,基于 Go 語言實現。
轉自:https://blog.csdn.net/estarhao/article/details/114703958?spm=1001.2014.3001.5501
參考:go語言中文文檔:www.topgoer.com
特點:
etcd 基于其優秀的特點,可廣泛的應用于以下場景:
服務發現 (Service Discovery):服務發現主要解決在同一個分布式集群中的進程或服務,要如何才能找到對方并建立連接。本質上來說,服務發現就是想要了解集群中是否有進程在監聽 udp 或 tcp 端口,并且通過名字就可以查找和連接。消息發布與訂閱:在分布式系統中,最適用的一種組件間通信方式就是消息發布與訂閱。即構建一個配置共享中心,數據提供者在這個配置中心發布消息,而消息使用者則訂閱他們關心的主題,一旦主題有消息發布,就會實時通知訂閱者。通過這種方式可以做到分布式系統配置的集中式管理與動態更新。應用中用到的一些配置信息放到 etcd 上進行集中管理。負載均衡:在分布式系統中,為了保證服務的高可用以及數據的一致性,通常都會把數據和服務部署多份,以此達到對等服務,即使其中的某一個服務失效了,也不影響使用。etcd 本身分布式架構存儲的信息訪問支持負載均衡。etcd 集群化以后,每個 etcd 的核心節點都可以處理用戶的請求。所以,把數據量小但是訪問頻繁的消息數據直接存儲到 etcd 中也可以實現負載均衡的效果。分布式通知與協調:與消息發布和訂閱類似,都用到了 etcd 中的 Watcher 機制,通過注冊與異步通知機制,實現分布式環境下不同系統之間的通知與協調,從而對數據變更做到實時處理。分布式鎖:因為 etcd 使用 Raft 算法保持了數據的強一致性,某次操作存儲到集群中的值必然是全局一致的,所以很容易實現分布式鎖。鎖服務有兩種使用方式,一是保持獨占,二是控制時序。集群監控與 Leader 競選:通過 etcd 來進行監控實現起來非常簡單并且實時性強。
簡述 HAProxy 及其特性?HAProxy 是可提供高可用性、負載均衡以及基于 tcp 和 HTTP 應用的代理,是免費、快速并且可靠的一種解決方案。HAProxy 非常適用于并發大(并發達 1w 以上)web 站點,這些站點通常又需要會話保持或七層處理。HAProxy 的運行模式使得它可以很簡單安全的整合至當前的架構中,同時可以保護 web 服務器不被暴露到網絡上。
HAProxy 的主要特性有:
HAProxy 負載均衡策略非常多,常見的有如下 8 種:
四層負載均衡器也稱為 4 層交換機,主要通過分析 IP 層及 TCP/UDP 層的流量實現基于 IP 加端口的負載均衡,如常見的 LVS、F5 等;
七層負載均衡器也稱為 7 層交換機,位于 OSI 的最高層,即應用層,此負載均衡器支持多種協議,如 HTTP、FTP、SMTP 等。7 層負載均衡器可根據報文內容,配合一定的負載均衡算法來選擇后端服務器,即“內容交換器”。如常見的 HAProxy、Nginx。
Heartbeat 是 Linux-HA 項目中的一個組件,它提供了心跳檢測和資源接管、集群中服務的監測、失效切換等功能。heartbeat 最核心的功能包括兩個部分,心跳監測和資源接管。心跳監測可以通過網絡鏈路和串口進行,而且支持冗余鏈路,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那么就認為對方失效,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務。
簡述 keepalived 及其工作原理?Keepalived 是一個基于 VRRP 協議來實現的 LVS 服務高可用方案,可以解決靜態路由出現的單點故障問題。
在一個 LVS 服務集群中通常有主服務器(MASTER)和備份服務器(BACKUP)兩種角色的服務器,但是對外表現為一個虛擬 IP,主服務器會發送 VRRP 通告信息給備份服務器,當備份服務器收不到 VRRP 消息的時候,即主服務器異常的時候,備份服務器就會接管虛擬 IP,繼續提供服務,從而保證了高可用性。
簡述 Keepalived 體系主要模塊及其作用?keepalived 體系架構中主要有三個模塊,分別是 core、check 和 vrrp。
Keepalived 工作在 TCP/IP 模型的第三、四和五層,即網絡層、傳輸層和應用層。
Keepalived 通過完整的健康檢查機制,保證集群中的所有節點均有效從而實現高可用。
簡述 LVS 的概念及其作用?LVS 是 linux virtual server 的簡寫 linux 虛擬服務器,是一個虛擬的服務器集群系統,可以在 unix/linux 平臺下實現負載均衡集群功能。
LVS 的主要作用是:通過 LVS 提供的負載均衡技術實現一個高性能、高可用的服務器群集。因此 LVS 主要可以實現:
LVS 有三種負載均衡的模式,分別是 VS/NAT(NAT 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。
LVS 調度器用的調度方法基本分為兩類:
代理服務器是一個位于客戶端和原始(資源)服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理服務器發送一個請求并指定目標原始服務器,然后代理服務器向原始服務器轉交請求并將獲得的內容返回給客戶端。
其主要作用有:
CAP 理論指出了在分布式系統中需要滿足的三個條件,主要包括:
CAP 理論的核心是:一個分布式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多只能同時較好的滿足兩個。
簡述什么是 ACID 理論?Kubernetes 是一個全新的基于容器技術的分布式系統支撐平臺。是 Google 開源的容器集群管理系統(谷歌內部:Borg)。在 Docker 技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的便捷性。并且具有完備的集群管理能力,多層次的安全防護和準入機制、多租戶應用支撐能力、透明的服務注冊和發現機制、內建智能負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制以及多粒度的資源配額管理能力。
簡述 Kubernetes 和 Docker 的關系?常見的 Kubernetes 部署方式有:
在集群管理方面,Kubernetes 將集群中的機器劃分為一個 Master 節點和一群工作節點 Node。其中,在 Master 節點運行著集群管理相關的一組進程 kube-apiserver、kube-controller-manager 和 kube-scheduler,這些進程實現了整個集群的資源管理、Pod 調度、彈性伸縮、安全控制、系統監控和糾錯等管理能力,并且都是全自動完成的。
簡述 Kubernetes 的優勢、適應場景及其特點?Kubernetes 作為一個完備的分布式系統支撐平臺,其主要優勢:
Kubernetes 常見場景:
Kubernetes 相關特點:
Kubernetes 當前存在的缺點(不足)如下:
Kubernetes Master 控制組件,調度管理整個系統(集群),包含如下組件:
Replication Controller 用來管理 Pod 的副本,保證集群中存在指定數量的 Pod 副本。當定義了 RC 并提交至 Kubernetes 集群中之后,Master 節點上的 Controller Manager 組件獲悉,并同時巡檢系統中當前存活的目標 Pod,并確保目標 Pod 實例的數量剛好等于此 RC 的期望值,若存在過多的 Pod 副本在運行,系統會停止一些 Pod,反之則自動創建一些 Pod。
簡述 Kubernetes Replica Set 和 Replication Controller 之間有什么區別?Replica Set 和 Replication Controller 類似,都是確保在任何給定時間運行指定數量的 Pod 副本。不同之處在于 RS 使用基于集合的選擇器,而 Replication Controller 使用基于權限的選擇器。
簡述 kube-proxy 作用?kube-proxy 運行在所有節點上,它監聽 apiserver 中 service 和 endpoint 的變化情況,創建路由規則以提供服務 IP 和負載均衡功能。簡單理解此進程是 Service 的透明代理兼負載均衡器,其核心功能是將到某個 Service 的訪問請求轉發到后端的多個 Pod 實例上。
簡述 kube-proxy iptables 原理?Kubernetes 從 1.2 版本開始,將 iptables 作為 kube-proxy 的默認模式。iptables 模式下的 kube-proxy 不再起到 Proxy 的作用,其核心功能:通過 API Server 的 Watch 接口實時跟蹤 Service 與 Endpoint 的變更信息,并更新對應的 iptables 規則,Client 的請求流量則通過 iptables 的 NAT 機制“直接路由”到目標 Pod。
簡述 kube-proxy ipvs 原理?IPVS 在 Kubernetes1.11 中升級為 GA 穩定版。IPVS 則專門用于高性能負載均衡,并使用更高效的數據結構(Hash 表),允許幾乎無限的規模擴張,因此被 kube-proxy 采納為最新模式。
在 IPVS 模式下,使用 iptables 的擴展 ipset,而不是直接調用 iptables 來生成規則鏈。iptables 規則鏈是一個線性的數據結構,ipset 則引入了帶索引的數據結構,因此當規則很多時,也可以很高效地查找和匹配。
可以將 ipset 簡單理解為一個 IP(段)的集合,這個集合的內容可以是 IP 地址、IP 網段、端口等,iptables 可以直接添加規則對這個“可變的集合”進行操作,這樣做的好處在于可以大大減少 iptables 規則的數量,從而減少性能損耗。
簡述 kube-proxy ipvs 和 iptables 的異同?iptables 與 IPVS 都是基于 Netfilter 實現的,但因為定位不同,二者有著本質的差別:iptables 是為防火墻而設計的;IPVS 則專門用于高性能負載均衡,并使用更高效的數據結構(Hash 表),允許幾乎無限的規模擴張。
與 iptables 相比,IPVS 擁有以下明顯優勢:
靜態 pod 是由 kubelet 進行管理的僅存在于特定 Node 的 Pod 上,他們不能通過 API Server 進行管理,無法與 ReplicationController、Deployment 或者 DaemonSet 進行關聯,并且 kubelet 無法對他們進行健康檢查。靜態 Pod 總是由 kubelet 進行創建,并且總是在 kubelet 所在的 Node 上運行。
簡述 Kubernetes 中 Pod 可能位于的狀態?Kubernetes 中創建一個 Pod 涉及多個組件之間聯動,主要流程如下:
Pod 重啟策略(RestartPolicy)應用于 Pod 內的所有容器,并且僅在 Pod 所處的 Node 上由 kubelet 進行判斷和重啟操作。當某個容器異常退出或者健康檢查失敗時,kubelet 將根據 RestartPolicy 的設置來進行相應操作。
Pod 的重啟策略包括 Always、OnFailure 和 Never,默認值為 Always。
同時 Pod 的重啟策略與控制方式關聯,當前可用于管理 Pod 的控制器包括 ReplicationController、Job、DaemonSet 及直接管理 kubelet 管理(靜態 Pod)。
不同控制器的重啟策略限制如下:
對 Pod 的健康檢查可以通過兩類探針來檢查:LivenessProbe 和 ReadinessProbe。
kubelet 定期執行 LivenessProbe 探針來診斷容器的健康狀態,通常有以下三種方式:
Kubernetes 中,Pod 通常是容器的載體,主要有如下常見調度方式:
init container的運行方式與應用容器不同,它們必須先于應用容器執行完成,當設置了多個 init container 時,將按順序逐個運行,并且只有前一個 init container 運行成功后才能運行后一個 init container。當所有 init container 都成功運行后,Kubernetes 才會初始化 Pod 的各種信息,并開始創建和運行應用容器。
簡述 Kubernetes deployment 升級過程?在 Deployment 的定義中,可以通過 spec.strategy 指定 Pod 更新的策略,目前支持兩種策略:Recreate(重建)和 RollingUpdate(滾動更新),默認值為 RollingUpdate。
DaemonSet 資源對象會在每個 Kubernetes 集群中的節點上運行,并且每個節點只能運行一個 pod,這是它和 deployment 資源對象的最大也是唯一的區別。
因此,在定義 yaml 文件中,不支持定義 replicas。
它的一般使用場景如下:
Kubernetes 使用 Horizontal Pod Autoscaler(HPA)的控制器實現基于 CPU 使用率進行自動 Pod 擴縮容的功能。
HPA 控制器周期性地監測目標 Pod 的資源性能指標,并與 HPA 資源對象中的擴縮容條件進行對比,在滿足條件時對 Pod 副本數量進行調整。
ubernetes 中的某個 Metrics Server(Heapster 或自定義 Metrics Server)持續采集所有 Pod 副本的指標數據。
HPA 控制器通過 Metrics Server 的 API(Heapster 的 API 或聚合 API)獲取這些數據,基于用戶定義的擴縮容規則進行計算,得到目標 Pod 副本數量。
當目標 Pod 副本數量與當前副本數量不同時,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)發起 scale 操作,調整 Pod 的副本數量,完成擴縮容操作。
簡述 Kubernetes Service 類型?通過創建 Service,可以為一組具有相同功能的容器應用提供一個統一的入口地址,并且將請求負載分發到后端的各個容器應用上。其主要類型有:
Service 負載分發的策略有:RoundRobin 和 SessionAffinity
在某些應用場景中,若需要人為指定負載均衡器,不使用 Service 提供的默認負載均衡的功能,或者應用程序希望知道屬于同組服務的其他實例。
Kubernetes 提供了 Headless Service 來實現這種功能,即不為 Service 設置 ClusterIP(入口 IP 地址),僅通過 Label Selector 將后端的 Pod 列表返回給調用的客戶端。
簡述 Kubernetes 外部如何訪問集群內的服務?對于 Kubernetes,集群外的客戶端默認情況,無法通過 Pod 的 IP 地址或者 Service 的虛擬 IP 地址:虛擬端口號進行訪問。
通常可以通過以下方式進行訪問 Kubernetes 集群內的服務:
Kubernetes 的 Ingress 資源對象,用于將不同 URL 的訪問請求轉發到后端不同的 Service,以實現 HTTP 層的業務路由機制。
Kubernetes 使用了 Ingress 策略和 Ingress Controller,兩者結合并實現了一個完整的 Ingress 負載均衡器。
使用 Ingress 進行負載分發時,Ingress Controller 基于 Ingress 規則將客戶端請求直接轉發到 Service 對應的后端 Endpoint(Pod)上,從而跳過 kube-proxy 的轉發功能,kube-proxy 不再起作用,全過程為:ingress controller ingress 規則 —-> services。
同時當 Ingress Controller 提供的是對外服務,則實際上實現的是邊緣路由器的功能。
簡述 Kubernetes 鏡像的下載策略?K8s 的鏡像下載策略有三種:Always、Never、IFNotPresent。
負載均衡器是暴露服務的最常見和標準方式之一。
根據工作環境使用兩種類型的負載均衡器,即內部負載均衡器或外部負載均衡器。
內部負載均衡器自動平衡負載并使用所需配置分配容器,而外部負載均衡器將流量從外部負載引導至后端容器。
簡述 Kubernetes 各模塊如何與 API Server 通信?Kubernetes API Server 作為集群的核心,負責集群各功能模塊之間的通信。
集群內的各個功能模塊通過 API Server 將信息存入 etcd,當需要獲取和操作這些數據時,則通過 API Server 提供的 REST 接口(用 GET、LIST 或 WATCH 方法)來實現,從而實現各模塊之間的信息交互。
如 kubelet 進程與 API Server 的交互:每個 Node 上的 kubelet 每隔一個時間周期,就會調用一次 API Server 的 REST 接口報告自身狀態,API Server 在接收到這些信息后,會將節點狀態信息更新到 etcd 中。
如 kube-controller-manager 進程與 API Server 的交互:kube-controller-manager 中的 Node Controller 模塊通過 API Server 提供的 Watch 接口實時監控 Node 的信息,并做相應處理。
如 kube-scheduler 進程與 API Server 的交互:Scheduler 通過 API Server 的 Watch 接口監聽到新建 Pod 副本的信息后,會檢索所有符合該 Pod 要求的 Node 列表,開始執行 Pod 調度邏輯,在調度成功后將 Pod 綁定到目標節點上。
簡述 Kubernetes Scheduler 作用及實現原理?Kubernetes Scheduler 是負責 Pod 調度的重要功能模塊,Kubernetes Scheduler 在整個系統中承擔了“承上啟下”的重要功能,“承上”是指它負責接收 Controller Manager 創建的新 Pod,為其調度至目標 Node;“啟下”是指調度完成后,目標 Node 上的 kubelet 服務進程接管后繼工作,負責 Pod 接下來生命周期。
Kubernetes Scheduler 的作用是將待調度的 Pod(API 新創建的 Pod、Controller Manager 為補足副本而創建的 Pod 等)按照特定的調度算法和調度策略綁定(Binding)到集群中某個合適的 Node 上,并將綁定信息寫入 etcd 中。
在整個調度過程中涉及三個對象:
分別是待調度 Pod 列表、可用 Node 列表,以及調度算法和策略。
Kubernetes Scheduler 通過調度算法調度為待調度 Pod 列表中的每個 Pod 從 Node 列表中選擇一個最適合的 Node 來實現 Pod 的調度。
隨后,目標節點上的 kubelet 通過 API Server 監聽到 Kubernetes Scheduler 產生的 Pod 綁定事件,然后獲取對應的 Pod 清單,下載 Image 鏡像并啟動容器。
簡述 Kubernetes Scheduler 使用哪兩種算法將 Pod 綁定到 worker 節點?Kubernetes Scheduler 根據如下兩種調度算法將 Pod 綁定到最合適的工作節點:
在 Kubernetes 集群中,在每個 Node(又稱 Worker)上都會啟動一個 kubelet 服務進程。
該進程用于處理 Master 下發到本節點的任務,管理 Pod 及 Pod 中的容器。
每個 kubelet 進程都會在 API Server 上注冊節點自身的信息,定期向 Master 匯報節點資源的使用情況,并通過 cAdvisor 監控容器和節點資源。
簡述 Kubernetes kubelet 監控 Worker 節點資源是使用什么組件來實現的?kubelet 使用 cAdvisor 對 worker 節點資源進行監控。
在 Kubernetes 系統中,cAdvisor 已被默認集成到 kubelet 組件內,當 kubelet 服務啟動時,它會自動啟動 cAdvisor 服務,然后 cAdvisor 會實時采集所在節點的性能指標及在節點上運行的容器的性能指標。
簡述 Kubernetes 如何保證集群的安全性?Kubernetes 通過一系列機制來實現集群的安全控制,
主要有如下不同的維度:
在對集群進行請求時,每個準入控制代碼都按照一定順序執行。
如果有一個準入控制拒絕了此次請求,那么整個請求的結果將會立即返回,并提示用戶相應的 error 信息。
準入控制(AdmissionControl)準入控制本質上為一段準入代碼,在對 kubernetes api 的請求過程中,順序為:先經過認證 & 授權,然后執行準入操作,最后對目標對象進行操作。常用組件(控制代碼)如下:
RBAC 是基于角色的訪問控制,是一種基于個人用戶的角色來管理對計算機或網絡資源的訪問的方法。
相對于其他授權模式,RBAC 具有如下優勢:
Secret 對象,主要作用是保管私密數據,比如密碼、OAuth Tokens、SSH Keys 等信息。
將這些私密信息放在 Secret 對象中比直接放在 Pod 或 Docker Image 中更安全,也更便于使用和分發。
簡述 Kubernetes Secret 有哪些使用方式?創建完 secret 之后,可通過如下三種方式使用:
Kubernetes PodSecurityPolicy 是為了更精細地控制 Pod 對資源的使用方式以及提升安全策略。
在開啟 PodSecurityPolicy 準入控制器后,Kubernetes 默認不允許創建任何 Pod,需要創建 PodSecurityPolicy 策略和相應的 RBAC 授權策略(Authorizing Policies),Pod 才能創建成功。
簡述 Kubernetes PodSecurityPolicy 機制能實現哪些安全策略?在 PodSecurityPolicy 對象中可以設置不同字段來控制 Pod 運行時的各種安全策略,常見的有:
Kubernetes 網絡模型中每個 Pod 都擁有一個獨立的 IP 地址,并假定所有 Pod 都在一個可以直接連通的、扁平的網絡空間中。
所以不管它們是否運行在同一個 Node(宿主機)中,都要求它們可以直接通過對方的 IP 進行訪問。
設計這個原則的原因是,用戶不需要額外考慮如何建立 Pod 之間的連接,也不需要考慮如何將容器端口映射到主機端口等問題。
同時為每個 Pod 都設置一個 IP 地址的模型使得同一個 Pod 內的不同容器會共享同一個網絡命名空間,也就是同一個 Linux 網絡協議棧。這就意味著同一個 Pod 內的容器可以通過 localhost 來連接對方的端口。
在 Kubernetes 的集群里,IP 是以 Pod 為單位進行分配的。
一個 Pod 內部的所有容器共享一個網絡堆棧(相當于一個網絡命名空間,它們的 IP 地址、網絡設備、配置等都是共享的)。
簡述 Kubernetes CNI 模型?CNI 提供了一種應用容器的插件化網絡解決方案,定義對容器網絡進行操作和配置的規范,通過插件的形式對 CNI 接口進行實現。
CNI 僅關注在創建容器時分配網絡資源,和在銷毀容器時刪除網絡資源。在 CNI 模型中只涉及兩個概念:容器和網絡。
對容器網絡的設置和操作都通過插件(Plugin)進行具體實現,CNI 插件包括兩種類型:
CNI Plugin 和 IPAM(IP Address Management)Plugin。
CNI Plugin 負責為容器配置網絡資源,IPAM Plugin 負責對容器的 IP 地址進行分配和管理。
IPAM Plugin 作為 CNI Plugin 的一部分,與 CNI Plugin 協同工作。
簡述 Kubernetes 網絡策略?為實現細粒度的容器間網絡訪問隔離策略,Kubernetes 引入 Network Policy。
Network Policy 的主要功能是對 Pod 間的網絡通信進行限制和準入控制,設置允許訪問或禁止訪問的客戶端 Pod 列表。
Network Policy 定義網絡策略,配合策略控制器(Policy Controller)進行策略的實現。
簡述 Kubernetes 網絡策略原理?Network Policy 的工作原理主要為:policy controller 需要實現一個 API Listener,監聽用戶設置的 Network Policy 定義,并將網絡訪問規則通過各 Node 的 Agent 進行實際設置(Agent 則需要通過 CNI 網絡插件實現)。
簡述 Kubernetes 中 flannel 的作用?Flannel 可以用于 Kubernetes 底層網絡的實現,主要作用有:
Calico 是一個基于 BGP 的純三層的網絡方案,與 OpenStack、Kubernetes、AWS、GCE 等云平臺都能夠良好地集成。
Calico 在每個計算節點都利用 Linux Kernel 實現了一個高效的 vRouter 來負責數據轉發。每個 vRouter 都通過 BGP 協議把在本節點上運行的容器的路由信息向整個 Calico 網絡廣播,并自動設置到達其他節點的路由轉發規則。
Calico 保證所有容器之間的數據流量都是通過 IP 路由的方式完成互聯互通的。
Calico 節點組網時可以直接利用數據中心的網絡結構(L2 或者 L3),不需要額外的 NAT、隧道或者 Overlay Network,沒有額外的封包解包,能夠節約 CPU 運算,提高網絡效率。
簡述 Kubernetes 共享存儲的作用?Kubernetes 對于有狀態的容器應用或者對數據需要持久化的應用,因此需要更加可靠的存儲來保存應用產生的重要數據,以便容器應用在重建之后仍然可以使用之前的數據。因此需要使用共享存儲。
簡述 Kubernetes 數據持久化的方式有哪些?Kubernetes 通過數據持久化來持久化保存重要數據,常見的方式有:
PV 是對底層網絡共享存儲的抽象,將共享存儲定義為一種“資源”。
PVC 則是用戶對存儲資源的一個“申請”。
簡述 Kubernetes PV 生命周期內的階段?某個 PV 在生命周期中可能處于以下 4 個階段(Phaes)之一。
Kubernetes 支持兩種資源的存儲供應模式:靜態模式(Static)和動態模式(Dynamic)。
Kubernetes CSI 是 Kubernetes 推出與容器對接的存儲接口標準,存儲提供方只需要基于標準接口進行存儲插件的實現,就能使用 Kubernetes 的原生存儲機制為容器提供存儲服務。
CSI 使得存儲提供方的代碼能和 Kubernetes 代碼徹底解耦,部署也與 Kubernetes 核心組件分離,顯然,存儲插件的開發由提供方自行維護,就能為 Kubernetes 用戶提供更多的存儲功能,也更加安全可靠。
CSI 包括 CSI Controller 和 CSI Node:
通常需要對 Worker 節點進行擴容,從而將應用系統進行水平擴展。
主要過程如下:
Kubernetes 集群里的節點提供的資源主要是計算資源,計算資源是可計量的能被申請、分配和使用的基礎資源。
當前 Kubernetes 集群中的計算資源主要包括 CPU、GPU 及 Memory。CPU 與 Memory 是被 Pod 使用的,因此在配置 Pod 時可以通過參數 CPU Request 及 Memory Request 為其中的每個容器指定所需使用的 CPU 與 Memory 量,Kubernetes 會根據 Request 的值去查找有足夠資源的 Node 來調度此 Pod。
通常,一個程序所使用的 CPU 與 Memory 是一個動態的量,確切地說,是一個范圍,跟它的負載密切相關:負載增加時,CPU 和 Memory 的使用量也會增加。
簡述 Kubernetes Requests 和 Limits 如何影響 Pod 的調度?當一個 Pod 創建成功時,Kubernetes 調度器(Scheduler)會為該 Pod 選擇一個節點來執行。
對于每種計算資源(CPU 和 Memory)而言,每個節點都有一個能用于運行 Pod 的最大容量值。調度器在調度時,首先要確保調度后該節點上所有 Pod 的 CPU 和內存的 Requests 總和,不超過該節點能提供給 Pod 使用的 CPU 和 Memory 的最大容量值。
簡述 Kubernetes Metric Service?在 Kubernetes 從 1.10 版本后采用 Metrics Server 作為默認的性能數據采集和監控,主要用于提供核心指標(Core Metrics),包括 Node、Pod 的 CPU 和內存使用指標。
對其他自定義指標(Custom Metrics)的監控則由 Prometheus 等組件來完成。
簡述 Kubernetes 中,如何使用 EFK 實現日志的統一管理?在 Kubernetes 集群環境中,通常一個完整的應用或服務涉及組件過多,建議對日志系統進行集中化管理,通常采用 EFK 實現。
EFK 是 Elasticsearch、Fluentd 和 Kibana 的組合,其各組件功能如下:
通過在每臺 node 上部署一個以 DaemonSet 方式運行的 fluentd 來收集每臺 node 上的日志。
Fluentd 將 docker 日志目錄/var/lib/docker/containers 和/var/log 目錄掛載到 Pod 中,然后 Pod 會在 node 節點的/var/log/pods 目錄中創建新的目錄,可以區別不同的容器日志輸出,該目錄下有一個日志文件鏈接到/var/lib/docker/contianers 目錄下的容器日志輸出。
簡述 Kubernetes 如何進行優雅的節點關機維護?由于 Kubernetes 節點運行大量 Pod,因此在進行關機維護之前,建議先使用 kubectl drain 將該節點的 Pod 進行驅逐,然后進行關機維護。
簡述 Kubernetes 集群聯邦?Kubernetes 集群聯邦可以將多個 Kubernetes 集群作為一個集群進行管理。
因此,可以在一個數據中心/云中創建多個 Kubernetes 集群,并使用集群聯邦在一個地方控制/管理所有集群。
簡述 Helm 及其優勢?Helm是 Kubernetes 的軟件包管理工具。類似 Ubuntu 中使用的 apt、Centos 中使用的 yum 或者 Python 中的 pip 一樣。
Helm 能夠將一組 K8S 資源打包統一管理, 是查找、共享和使用為 Kubernetes 構建的軟件的最佳方式。
Helm 中通常每個包稱為一個 Chart,一個 Chart 是一個目錄(一般情況下會將目錄進行打包壓縮,形成 name-version.tgz 格式的單一文件,方便傳輸和存儲)。
在 Kubernetes 中部署一個可以使用的應用,需要涉及到很多的 Kubernetes 資源的共同協作。
使用 helm 則具有如下優勢:
OpenShift 是一個容器應用程序平臺,用于在安全的、可伸縮的資源上部署新應用程序,而配置和管理開銷最小。
OpenShift 構建于 Red Hat Enterprise Linux、Docker 和 Kubernetes 之上,為企業級應用程序提供了一個安全且可伸縮的多租戶操作系統,同時還提供了集成的應用程序運行時和庫。
其主要特性:
OpenShift 管理 projects 和 users。
一個 projects 對 Kubernetes 資源進行分組,以便用戶可以使用訪問權限。還可以為 projects 分配配額,從而限制了已定義的 pod、volumes、services 和其他資源。
project 允許一組用戶獨立于其他組組織和管理其內容,必須允許用戶訪問項目。如果允許創建項目,用戶將自動訪問自己的項目。
簡述 OpenShift 高可用的實現?OpenShift 平臺集群的高可用性(HA)有兩個不同的方面:
OpenShift 基礎設施本身的 HA(即主機);以及在 OpenShift 集群中運行的應用程序的 HA。
默認情況下,OpenShift 為 master 節點提供了完全支持的本機 HA 機制。
對于應用程序或“pods”,如果 pod 因任何原因丟失,Kubernetes 將調度另一個副本,將其連接到服務層和持久存儲。
如果整個節點丟失,Kubernetes 會為它所有的 pod 安排替換節點,最終所有的應用程序都會重新可用。pod 中的應用程序負責它們自己的狀態,因此它們需要自己維護應用程序狀態(如 HTTP 會話復制或數據庫復制)。
簡述 OpenShift 的 SDN 網絡實現?默認情況下,Docker 網絡使用僅使用主機虛機網橋 bridge,主機內的所有容器都連接至該網橋。
連接到此橋的所有容器都可以彼此通信,但不能與不同主機上的容器通信。
為了支持跨集群的容器之間的通信,OpenShift 容器平臺使用了軟件定義的網絡(SDN)方法。
軟件定義的網絡是一種網絡模型,它通過幾個網絡層的抽象來管理網絡服務。
SDN 將處理流量的軟件(稱為控制平面)和路由流量的底層機制(稱為數據平面)解耦。SDN 支持控制平面和數據平面之間的通信。
在 OpenShift 中,可以為 pod 網絡配置三個 SDN 插件:
cluster network 由 OpenShift SDN 建立和維護,它使用 Open vSwitch 創建 overlay 網絡,master 節點不能通過集群網絡訪問容器,除非 master 同時也為 node 節點。
簡述 OpenShift 角色及其作用?OpenShift 的角色具有不同級別的訪問和策略,包括集群和本地策略。
user 和 group 可以同時與多個 role 關聯。
簡述 OpenShift 支持哪些身份驗證?OpenShift 容器平臺支持的其他認證類型包括:
中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源。
通常位于客戶機/服務器的操作系統中間,是連接兩個獨立應用程序或獨立系統的軟件。
通過中間件實現兩個不同系統之間的信息交換。
歡迎分享轉載→http://www.avcorse.com/read-236881.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖