Kubernetes Pod 全面知識

痴者工良發表於2021-11-29

Pod 是在 Kubernetes 中建立和管理的、最小的可部署的計算單元,是最重要的物件之一。一個 Pod 中包含一個或多個容器,這些容器在 Pod 中能夠共享網路、儲存等環境。

學習 Kubernetes,Pod 是最重要最基本的知識,本章將介紹什麼是 Pod、Pod 的結構等,並練習建立 Pod。

本文為作者的 Kubernetes 系列電子書的一部分,電子書已經開源,歡迎關注,電子書瀏覽地址:

https://k8s.whuanle.cn【適合國內訪問】

https://ek8s.whuanle.cn 【gitbook】

Pod 基礎知識

建立 Pod

建立一個 Pod 很簡單,示例命令如下:

kubectl run nginxtest --image=nginx:latest --port=80

nginxtest 為 Pod 名稱,並且為其對映埠為 80。

但是一般不會直接建立 Pod,因為手動建立的 Pod 不被 “託管” 起來,如果 Pod 故障或者其他原因消失了,不會自動恢復,而且 kubectl run 提供的引數有限。

Kubernetes Pod 中的所有容器共享一個相同的 Linux 名稱空間(network、UTS、IPC),而不是每個容器一個名稱空間,因此 Pod 中的容器,網路、主機名稱相同、IP 地址相同。據說在新版本的 Kubernetes 和 Docker 中, PID 名稱空間也可以設定為相同的。由於 Mount、User 名稱空間不共享,因此在容器中,檔案系統和使用者是隔離的。

另外我們也可以使用 yaml 方式定義 Pod,然後建立它。使用 YAML 檔案定義需要的 Pod 格式示例如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginxtest
spec:
  containers:   
  - image: nginx:latest
    name: nginxtest
    ports:
    - containerPort: 80
      protocol: TCP

但是描述 Pod 的 YAML 檔案,包含哪些內容?格式如何?每個欄位是什麼意思?我們不可能記住所有 Kubernetes 物件的 YAML 檔案的每個欄位吧?

還好,Kuberentes 提供了 kubectl explain 命令,可以幫助我們快速瞭解建立一個物件的 YAML 需要哪幾部分內容。例如建立 Pod 的 YAML 定義如下:

oot@master:~# kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.

FIELDS:
   apiVersion    
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

   kind    
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

   metadata    

相關文章