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