Pod 是 Kubernetes 中的最小部署单元,通常包含一个或多个容器,这些容器共享网络命名空间和存储卷。Pod 的设计理念是“一个 Pod,一个应用”,即每个 Pod 通常只运行一个主要的应用容器,辅以一些辅助容器。
共享网络:Pod 内的所有容器共享一个 IP 地址和端口空间,可以通过 localhost
相互通信。
共享存储:Pod 内的容器可以共享存储卷,方便数据交换。
生命周期管理:Kubernetes 会为每个 Pod 分配一个唯一的 ID,并管理其生命周期。
自主式 Pod:Kubernetes 直接创建出来的 Pod,这种 Pod 删除后就不会重建。
控制器管理的 Pod:通常使用 Deployment、StatefulSet 等控制器来管理 Pod 实例,控制器能够批量创建和管理 Pod,具有自愈和滚动升级的能力。
Pod 的生命周期包括多个阶段,如 Pending、Running、Succeeded、Failed 和 Unknown。Pod 的状况(Conditions)描述了 Pod 的当前状态,例如 PodScheduled
、ContainersReady
等。
容器的状态包括 Waiting
、Running
和 Terminated
。Pod 的 restartPolicy
可以设置为 Always
、OnFailure
或 Never
,以控制容器的重启行为。
Pod 可以通过环境变量来传递配置信息。例如,使用 env
字段定义环境变量。
env:
- name: JVM_OPTS
value: '-Xms128m -Xmx128m'
使用 ConfigMap 和 Secret 可以更安全、灵活地管理应用的配置信息。
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
Pod 的 resources
字段可以设置容器的资源请求(requests)和限制(limits),以控制容器的资源使用。
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
存活探针用于判断容器是否正在运行。如果存活探针失败,Kubernetes 会重启容器。
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
就绪探针用于判断容器是否准备好服务。如果就绪探针失败,Kubernetes 会将流量从该容器中移除。
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Kubernetes 提供了 Pod 的调度机制,可以通过配置让 Pod 更倾向于或者避免在某些节点上运行。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
Pod 的资源调度策略可以根据节点的资源情况来决定 Pod 的调度位置。
推荐使用控制器(如 Deployment、StatefulSet)来管理 Pod,以实现高可用性和自动故障恢复。
使用 ConfigMap 和 Secret 管理配置数据和敏感信息,避免将配置硬编码在容器镜像中。
利用 Kubernetes 的 Network Policy 和 Pod Security Policy(PSP)来增强集群的安全性。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress: []
egress: []
感谢您的阅读!如果您对 Pod 或 Kubernetes 有任何疑问或见解,欢迎继续探讨。