Pod是kubernetes中你可以創建和部署的最小也是最簡的單位。Pod代表著集群中運行的進程。
Pod中封裝著應用的容器(有的情況下是好幾個容器),存儲、獨立的網絡IP,管理容器如何運行的策略選項。Pod代表著部署的一個單位:kubernetes中應用的一個實例,可能由一個或者多個容器組合在一起共享資源。
Docker是kubernetes中最常用的容器運行時,但是Pod也支持其他容器運行時。
在Kubernetes集群中Pod有如下兩種使用方式:
- 一個Pod中運行一個容器。“每個Pod中一個容器”的模式是最常見的用法;在這種使用方式中,你可以把Pod想象成是單個容器的封裝,kuberentes管理的是Pod而不是直接管理容器。
- 在一個Pod中同時運行多個容器。一個Pod中也可以同時封裝幾個需要緊密耦合互相協作的容器,它們之間共享資源。這些在同一個Pod中的容器可以互相協作成為一個service單位——一個容器共享文件,另一個“sidecar”容器來更新這些文件。Pod將這些容器的存儲資源作為一個實體來管理。
Kubernetes Blog 有關於Pod用例的詳細信息,查看:
- The Distributed System Toolkit: Patterns for Composite Containers
- Container Design Patterns
每個Pod都是應用的一個實例。如果你想平行擴展應用的話(運行多個實例),你應該運行多個Pod,每個Pod都是一個應用實例。在Kubernetes中,這通常被稱為replication。
[root@kbs1 yml]# cat jianpod.yml
apiVersion: v1
kind: Pod
metadata:
name: jian-pod-mariadb
labels:
name: mariadb-label
env: test
spec:
containers:
- name: mysql-jian-image
image: 192.168.135.199:5000/mysql_jian_v2
imagePullPolicy: Never
ports:
- containerPort: 666
查看標籤
[root@kbs1 yml]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
jian-pod-mariadb 1/1 Running 0 6s env=test,name=mariadb-label
[root@kbs1 yml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
jian-pod-mariadb 1/1 Running 0 23s
[root@kbs1 yml]# kubectl get pod -L name,env
NAME READY STATUS RESTARTS AGE NAME ENV
jian-pod-mariadb 1/1 Running 0 38s mariadb-label test
根據標籤查找pod
[root@kbs1 yml]# kubectl get pod -l name=mariadb-label
NAME READY STATUS RESTARTS AGE
jian-pod-mariadb 1/1 Running 0 3m19s
查看具有name標籤的pod
[root@kbs1 yml]# kubectl get pod -l name
NAME READY STATUS RESTARTS AGE
jian-pod-mariadb 1/1 Running 0 5m26s
查看沒有name標籤的pod
[root@kbs1 yml]# kubectl get pod -l '!name'
No resources found.