部署K8S集群(五):配置文件之Pod配置文件
● Pod是Kubernets中的基本执行单位,可以包含一个或多个容器。
● Pod提供了容器间的网络和存储共享。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
# 容器1:web页面
# 容器名称
- name: web-container
# 容器使用的镜像
image: nginx:latest
# 容器暴露的端口
ports:
- containerPort: 80
- containerPort: 81
# 容器资源限制
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
# Pod的虚拟卷与容器内的目录挂载关系
volumeMounts:
- name: nginx-volume
mountPath: /usr/share/nginx/html
# 检查容器是否正常运行
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 10
# 检查容器是否准备好接受流量
readinessProbe:
httpGet:
path: /readiness
port: 80
initialDelaySeconds: 10
periodSeconds: 5
# 容器2:api后台
# 容器名称
- name: api-container
# 容器使用的镜像
image: my-api:latest
# 容器暴露的端口
ports:
- containerPort: 80
- containerPort: 81
# 容器资源限制
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1"
# Pod的虚拟卷与容器内的目录挂载关系
volumeMounts:
- name: api_app_volume
mountPath: /app
- name: api_conf_volume
mountPath: /app/Confs
# 检查容器是否正常运行
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 10
# 检查容器是否准备好接受流量
readinessProbe:
httpGet:
path: /readiness
port: 80
initialDelaySeconds: 10
periodSeconds: 5
# 主机中的目录与Pod内虚拟卷挂载关系
volumes:
- name: nginx-volume
hostPath:
path: /data/web
type: DirectoryOrCreate
- name: api_app_volume
hostPath:
path: /data/api/app
type: DirectoryOrCreate
- name: api_conf_volume
hostPath:
path: /data/api/conf
type: DirectoryOrCreate
- apiVersion:API版本
- kind:资源类型
- metadata:元数据,包含Pod名称和标签
- spec:规范,定义Pod的容器、端口和卷
- containers:容器列表,定义一个或多个容器
- name:容器名称
- image:容器使用的镜像
- ports:容器暴露的端口
- resources: 容器资源的最小需求和最大限制
- livenessProbe: 检查容器是否正常运行
- readinessProbe: 检查容器是否准备好接受流量
- volumeMounts:卷挂载到容器的路径
- volumes:Pod内部虚拟卷定义,以及与主机目录挂载关系定义
- containers:容器列表,定义一个或多个容器
- 在一个Pod中如何运行多个容器?
在containers节点下增加多个容器配置 - 如何进行容器健康检查?
使用 livenessProbe 检查容器是否仍在运行。如果探针失败,k8s会重启容器。这个探针确保容器在出现问题时能够自动尝试恢复。
使用 readinessProbe 检查容器是否准备好接收流量。如果探针失败,k8s会从服务的负载均衡池中移除容器,直到容器恢复正常。这个探针确保容器在其准备好处理请求之前不会接收流量。 - 如何将主机目录挂载到容器内?
先在Pod中volumes节点定义虚拟卷,将主机目录挂载到虚拟卷;再在容器中volumeMounts节点使用虚拟卷,将虚拟卷挂载到容器内目录。