在K8S中,deployment的建立過程包括什麼?

黄嘉波發表於2024-08-06

在Kubernetes(K8S)中,Deployment的建立過程是一個涉及多個元件和步驟的複雜流程。以下是一個詳細的步驟說明,包括從建立Deployment配置檔案到Pod在叢集中實際執行的整個過程:

1. 建立Deployment配置檔案

首先,需要準備一個YAML格式的配置檔案,用於定義Deployment的屬性。這個配置檔案包含了Deployment的後設資料(如名稱、名稱空間)、規格說明(如副本數量、Pod模板、容器配置等)。以下是一個簡單的示例配置檔案:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-deployment  
spec:  
  replicas: 3  
  selector:  
    matchLabels:  
      app: my-app  
  template:  
    metadata:  
      labels:  
        app: my-app  
    spec:  
      containers:  
      - name: my-container  
        image: nginx:latest  
        ports:  
        - containerPort: 80
2. 提交Deployment配置檔案到APIServer

使用kubectl命令列工具將配置檔案提交到Kubernetes叢集的APIServer。這個過程中,APIServer會進行認證鑑權、校驗等操作,確保請求的有效性。

kubectl apply -f my-deployment.yaml
3. APIServer處理請求並儲存到Etcd

一旦APIServer驗證了請求的有效性,它會將Deployment的資訊儲存到叢集的分散式鍵值儲存系統Etcd中。Etcd是Kubernetes用於持久化儲存叢集狀態資料的元件。

4. Controller Manager監聽並處理資源變化

Controller Manager是Kubernetes的控制中心,它監聽Etcd中的資源變化事件。當新的Deployment被建立時,Deployment Controller會檢測到這個事件,並開始處理它。

5. 建立ReplicaSet

Deployment Controller會根據Deployment配置檔案中的規格說明,建立一個或多個ReplicaSet物件。ReplicaSet負責確保Pod的副本數量符合期望的狀態。

6. ReplicaSet建立Pod

ReplicaSet Controller監聽ReplicaSet的建立事件,並根據ReplicaSet的規格說明(透過Pod模板)建立相應數量的Pod。Pod是Kubernetes中可以建立和管理的最小計算單元,包含了容器和容器的配置資訊。

7. Scheduler為Pod分配節點

Kube-Scheduler是Kubernetes的排程器,它監聽新建立的Pod事件,並根據排程策略(如節點親和性、汙點、容忍、硬體資源等)為Pod選擇一個合適的節點。排程完成後,Kube-Scheduler會將Pod與節點的繫結資訊寫回Etcd。

8. Kubelet在節點上執行Pod

節點上的Kubelet程序監聽Etcd中的Pod變化事件。當發現有新的Pod被排程到本節點時,Kubelet會呼叫容器執行時(如Docker、containerd等)來建立和啟動容器。同時,Kubelet還負責Pod的生命週期管理,包括健康檢查、日誌收集等。

9. Pod和Service網路通訊

Kube-Proxy是執行在叢集各個節點上的網路代理,它負責實現服務發現和負載均衡。當有外部請求訪問服務時,Kube-Proxy會根據服務的Endpoints資訊將請求轉發到正確的Pod或容器上。

10. 總結

綜上所述,Deployment的建立過程是一個高度自動化的流程,涉及多個Kubernetes元件的協同工作。從建立Deployment配置檔案到Pod在叢集中實際執行,整個流程遵循關注點分離的原則,確保每個元件都能專注於自己的工作。這種設計使得Kubernetes能夠高效地管理大規模容器化應用的部署和運維。

相關文章