1. 程式人生 > >Kubernetes筆記(五):瞭解Pod(容器組)

Kubernetes筆記(五):瞭解Pod(容器組)

Kubernetes 中, 容器總是以 Pod(容器組)的方式進行排程與執行。因此對 Pod 的理解與掌握是學習 Kubernetes 的基礎。 ## 理解 Pod Pod(容器組)是 Kubernetes 中最小的排程單元,每一個Pod都是某個應用程式的一個執行例項。以前我們的 Web 應用都是以 Tomcat 等 Web 容器程序的形式執行在作業系統中,在 Kubernetes 中,我們需要將 Web 應用打成映象,以容器的方式執行在 Pod 中。 Kubernetes 不會直接管理容器,而是通過 Pod 來管理。一個Pod包含如下內容: 1. 一個或多個容器, 一般是一個,除非多個容器緊密耦合共享資源才放在一個 Pod 中; 2. 共享的儲存資源(如資料卷),一個 Pod 中的容器是可以共享儲存空間的; 3. 一個共享的 IP 地址,Pod 中容器之間可以通過 localhost:port 彼此訪問; 4. 定義容器該如何執行的選項。 Pod 中的容器可包括兩種型別: 1. 工作容器:就是我們通常執行服務程序的容器 2. 初始化容器:完成一些初始化操作的容器,初始化容器在工作容器之前執行,所有的初始化容器成功執行後,才開始啟動工作容器 ## 管理 Pod ### 建立 Pod 在 Kubernetes 中,我們一般不直接建立 Pod,而是通過控制器來排程管理(Deployment,StatefulSet,DaemonSet 等),這裡為了便於瞭解,先通過 yaml 配置檔案的方式定義 Pod 來直接建立 Pod。定義配置檔案 pod-test.yaml 如下, ```yaml apiVersion: v1 kind: Pod metadata: name: pod-test # pod 名稱 namespace: default # pod 建立的 namespace spec: containers: # pod 中容器定義 - name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 8081 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html restartPolicy: OnFailure # 重啟策略 volumes: # 資料卷定義 - name: workdir hostPath: path: /tmp type: Directory ``` 其中 spec 部分的 containers 定義了該 Pod 中執行的容器,從 containers 的複數形式也可以看出一個 Pod 中是可以執行多個容器的。 執行 `kubectl create` 或 `kubectl apply` 命令建立 Pod, ```shell [root@kmaster test]# kubectl create -f pod-test.yaml 或 [root@kmaster test]# kubectl apply -f pod-test.yaml ``` 該 Pod 建立後將會拉取一個最新的 nginx 映象,執行一個 nginx 容器,並將容器的 80 埠對映到宿主機的 8081 埠。 ### 檢視 Pod 可使用 `kubectl get pods` 命令檢視當前 namesapce 下的所有 Pod,加 Pod 名稱檢視具體某個 Pod。 如果需要檢視 Pod 排程到了哪個節點,可加 `-o wide` 選項,如果檢視 yaml 檔案資訊則可加 `-o yaml` 選項, 如下所示 ```shell [root@kmaster test]# kubectl get pods NAME READY STATUS RESTARTS AGE pod-test 1/1 Running 0 116s [root@kmaster test]# kubectl get pods pod-test -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-test 1/1 Running 0 2m19s 10.244.1.42 k