自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五分鐘搞懂Kubernetes:輕松理解所有組件

云計算 云原生
在本文中,我向大家介紹了Kubernetes中的一些專有名詞。Kubernetes是一個非常強大的容器編排引擎,可以幫助我們自動化部署、擴展和管理容器化應用程序。通過了解這些專有名詞,我們可以更好地理解Kubernetes的工作原理和架構。

之前我曾經提到了一系列關于服務網格的內容。然而,我意識到有些同學可能對Kubernetes的了解相對較少,更不用說應用服務網格這個概念了。因此,今天我決定帶著大家快速理解Kubernetes中的一些專有名詞,以便在短時間內入門,并減少學習的時間。我將在接下來的5分鐘內為你介紹這些名詞,希望你能從中獲得一些收獲。如果你覺得有所幫助,請給個贊來鼓勵我吧!你的支持是我前進的動力~

Kubernetes

首先,我想強調的是,在學習任何一項知識時,官方文檔都是最重要的資源:https://kubernetes.io/zh-cn/docs/home/

官方文檔提供了詳盡、準確的信息,幫助我們深入了解和掌握這個技術。因此,如果你真的對Kubernetes感興趣,我強烈建議你花些時間仔細閱讀官方文檔。

談到Kubernetes,它是一個開源的容器編排引擎,旨在實現(xiàn)容器化應用的自動化部署、擴縮和管理。簡而言之,它能夠集中控制多個Docker容器,而不僅限于單獨操作每個容器。在沒有Kubernetes之前,如果我們想要同時操作多個Docker容器,可能需要學習并執(zhí)行Shell腳本,這需要花費一些時間。因此,如果你希望實現(xiàn)批量管理Docker容器,Kubernetes就是一個不錯的選擇,當然也可以考慮其他類似的產品。

Kubernetes 組件

假設你已經順利完成Kubernetes的安裝。一旦你部署好Kubernetes,你就擁有了一個完整的集群。下面是官方提供的架構圖,我們可以參考一下。圖中列出了許多組件的名稱,包括:Node、Pod、kubelet、kube-proxy、kube-apiserver、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager等一系列專有名詞。接下來,我們將逐一解釋這些名詞的含義。

圖片圖片

Node

根據架構圖,你可能已經猜到Node實際上就是一臺機器,它負責運行容器化的應用程序。然而,一個Node上可以運行多個Pod。Pod是Kubernetes的最小調度單位,通常情況下,一個Pod代表一個微服務。下面是一個Pod的YAML示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: nginx:latest

然而,這并不意味著一個Pod只能支持一個docker鏡像。例如,我們的服務網格中存在邊車模式,允許在同一個Pod中定義多個微服務。但為什么不在同一個Pod中定義多個微服務呢?這是因為Pod是最小的調度單位,它們需要一起啟動和重啟。這種綁定關系非常嚴格,因此如果你已經有一個集群,為什么不將它們分開定義呢?因此,即使定義多個鏡像,也只需要定義一些輔助功能,如日志收集等。

kubelet

kubelet這個組件在整個Kubernetes系統(tǒng)中扮演著重要的角色。具體而言,控制平面將Pod的定義發(fā)送給kubelet,然后kubelet根據這些定義來創(chuàng)建和管理Pod中的容器。kubelet負責監(jiān)控Pod和容器的狀態(tài),并將這些狀態(tài)信息報告給控制平面。控制平面可以根據這些狀態(tài)信息來做出調度和管理決策,以確保整個系統(tǒng)的高效運行。

你可以將Pod理解為每個項目組的招聘HR,類似于一個項目的招聘負責人。而控制平面則可以理解為上層的公司領導,他們制定了招聘要求和招聘人數(shù),具體的招聘工作由HR來執(zhí)行。HR的職責是確保項目有足夠的人員,并且符合公司領導的要求。他們會持續(xù)監(jiān)視項目的人員情況,一旦有人離職,他們會向上級報告,滿足上層的控制平面要求。同時,上層的公司領導與項目人員是沒有直接溝通的,所有的溝通都通過HR進行。HR在這個過程中起到了項目人員與上層領導之間的聯(lián)絡人的作用,負責傳遞信息、解決問題和協(xié)調工作。

kube-proxy

加長優(yōu)化語句:我們在架構圖中看到kube-proxy也是與上層有聯(lián)系的。它通過服務代理和負載均衡功能,實現(xiàn)了集群內部的網絡通信和流量轉發(fā),確保了服務的可用性和可靠性。

在我們的項目組中,他是誰呢?他是那位真正指導Pod要執(zhí)行哪些任務的人??梢哉f,他擔任著項目組中開發(fā)leader的角色,或者像項目經理一樣的角色。他負責指導我們要做什么任務,一旦有需求,他會負責轉發(fā)和分配工作。

然而,需要注意的是,他并不直接與Pod進行網絡通信,而是與Service對象進行溝通。

Service

在上述情況中,我們引入了Service對象。實際上,Service對象代表了一組Pod資源。在生產環(huán)境中,我們通常不會只部署一個服務來處理請求,而是會有多個Pod副本同時處理。因此,我們需要一個Service對象將它們歸類在一起,以便kube-proxy可以進行負載均衡轉發(fā)等操作。只要Pod中的labels標簽后面的key:value匹配,就可以將請求轉發(fā)給相應的Pod副本。metadata下的labels字段可以包含任何鍵值對,只要符合key:value的格式即可。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-svc

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port
    protocol: TCP
    port: 80
    targetPort: http-web-svc

控制平面組件

控制平面組件在集群中扮演著重要角色,它們負責做出全局決策,例如資源的調度,以及監(jiān)測和響應集群事件,比如當部署的replicas字段不滿足時,啟動新的Pod??刂破矫娼M件可以在集群中的任何節(jié)點上運行。然而,為了簡化設置和管理,通常會在同一臺計算機上啟動所有控制平面組件,并且不會在該計算機上運行用戶容器??梢詫⑵漕惐葹楣径聲?,他們負責決策和管理,與實際執(zhí)行工作的Pod之間關系不直接。

kube-apiserver

通過這個名字,你可以推斷出他負責處理并調用其他組件來完成所有API請求。舉個例子,我們之前定義了一個Pod的YAML格式文件。通過在后臺執(zhí)行kubectl apply -f your-pod.yaml,kube-apiserver就會接收到你的請求,并將其轉發(fā)給誰呢?正如我們之前提到的,它會將請求轉發(fā)給kubelet,kubelet負責與Docker進行交互并進行創(chuàng)建等操作。因此,kube-apiserver就像是我們的控制器一樣,直接接收請求但不處理它們。

etcd

etcd是一種用作Kubernetes所有集群數(shù)據的后臺數(shù)據庫。不僅可以存儲你能想到的所有數(shù)據,而且采用分布式存儲方式,基于Raft算法確保數(shù)據的一致性。這使得所有節(jié)點都能保持數(shù)據的一致性,因為etcd存儲了集群的配置數(shù)據、狀態(tài)信息和元數(shù)據。作為集群的“大腦”,etcd存儲了關于容器、節(jié)點、Pod、服務和其他資源的信息。通過監(jiān)視etcd中的數(shù)據變化,服務發(fā)現(xiàn)機制能夠實現(xiàn)自動的服務注冊和發(fā)現(xiàn)。當新的Pod或服務被創(chuàng)建時,它們會在etcd中注冊相關信息。其他組件或應用程序可以通過查詢etcd來獲取這些信息,從而實現(xiàn)服務之間的通信和協(xié)調。

kube-scheduler

我們當時說kubelet是負責管理該節(jié)點上的容器和Pod,那么誰來調度呢?就是由kube-scheduler負責。kube-scheduler的主要職責是從可用節(jié)點中選擇最優(yōu)節(jié)點來運行Pod,以確保資源的均衡分配,避免機器資源的浪費。由于控制平面組件較多,為了更好地理解它們各自的作用,我還額外準備了一張圖來清晰地展示。

圖片圖片

kube-controller-manager

kube-controller-manager是Kubernetes集群中不可或缺的核心組件之一,它的主要職責是運行一系列控制器,以確保集群的狀態(tài)始終維持在預期的狀態(tài)。為了更好地理解其功能,我們以Deployment Controller管理器為例進行說明,而其他控制器的詳細信息則可以通過自行查詢來獲取。

Deployment Controller是一個負責管理應用部署的組件。它的主要功能是根據用戶定義的期望狀態(tài)來控制ReplicaSet的創(chuàng)建、更新和刪除操作,從而實現(xiàn)應用的滾動升級和回滾。舉一個例子。當一個Pod掛掉時,kubelet會首先監(jiān)測到該Pod的狀態(tài)改變,并將這個信息傳遞給kube-controller-manager中的Replication Controller(如果該Pod是由Replication Controller創(chuàng)建的)。Replication Controller是負責維護Pod副本數(shù)量的控制器之一。

一旦Replication Controller接收到關于Pod狀態(tài)改變的通知,它將檢查集群中當前的Pod副本數(shù)量,并根據其定義的副本數(shù)量進行調整。如果發(fā)現(xiàn)當前的Pod數(shù)量少于所需的副本數(shù)量,Replication Controller將發(fā)出指令給kubelet,在相應的節(jié)點上重新創(chuàng)建缺失的Pod來滿足副本數(shù)量的要求。之前我們不是一直說將kubelet比作是HR嗎?上層領導找到了就是Deployment Controller。

注意不管是什么管理層Controller都要走kube-apiserver這一層。只有他才有資格調用其他組件kube-apiserver。

cloud-controller-manager

cloud-controller-manager是一個可選的組件,它提供了與云平臺相關的控制器。對于我們來說,它可能看起來與我們的工作無關。cloud-controller-manager在與云平臺的API進行交互時,能夠管理云資源,例如負載均衡器、節(jié)點組、存儲卷等。這使得我們能夠獲得更豐富的云資源管理功能。需要注意的是,cloud-controller-manager的具體功能和行為是根據所使用的云平臺而定的。因此,它可以根據我們所用的云平臺提供適當?shù)慕鉀Q方案。

總結

在本文中,我向大家介紹了Kubernetes中的一些專有名詞。Kubernetes是一個非常強大的容器編排引擎,可以幫助我們自動化部署、擴展和管理容器化應用程序。通過了解這些專有名詞,我們可以更好地理解Kubernetes的工作原理和架構。


責任編輯:武曉燕 來源: 靈墨AI探索室
相關推薦

2024-12-11 07:00:00

面向對象代碼

2025-03-13 06:22:59

2019-08-09 10:33:36

開發(fā)技能代碼

2025-01-20 08:50:00

2025-01-21 07:39:04

Linux堆內存Golang

2011-05-26 09:03:17

JSONjavascript

2024-09-18 08:21:24

JavaScriptTypeScriptprototype

2023-09-18 15:49:40

Ingress云原生Kubernetes

2024-09-03 09:47:09

閉包裝飾器Python

2011-08-08 09:22:10

Python

2023-07-26 07:11:50

LVM底層抽象

2023-01-31 08:24:55

HashMap死循環(huán)

2024-04-29 07:57:46

分布式流控算法

2022-05-23 09:10:00

分布式工具算法

2024-12-04 16:12:31

2021-06-18 07:34:12

Kafka中間件微服務

2017-03-30 19:28:26

HBase分布式數(shù)據

2022-03-23 09:32:38

微服務容器Kubernetes

2018-09-27 13:56:14

內網外網通信

2023-10-06 20:21:28

Python鏈表
點贊
收藏

51CTO技術棧公眾號