13·Pod 基础入门

Pod YAML 配置

kubernetespodyaml

Pod YAML 配置

学习目标

  1. 理解 Pod YAML 的基本结构
  2. 掌握常用配置字段
  3. 能够编写简单的 Pod 配置文件

核心概念

YAML 基本结构

apiVersion: v1        # API 版本
kind: Pod             # 资源类型
metadata:             # 元数据
  name: my-pod
  namespace: default
  labels:
    app: web
spec:                 # 规格定义
  containers:
  - name: nginx
    image: nginx:latest

四个顶级字段

字段说明必填
apiVersionKubernetes API 版本
kind资源类型
metadata资源元数据
spec资源规格定义

Metadata 常用字段

metadata:
  name: my-pod              # Pod 名称(必填)
  namespace: default         # 命名空间(默认 default)
  labels:                    # 标签(键值对)
    app: web
    env: production
  annotations:               # 注解(键值对)
    description: "Web server"
字段说明用途
name资源名称唯一标识
namespace命名空间资源隔离
labels标签选择、过滤
annotations注解附加信息

Spec 容器配置

spec:
  containers:
  - name: nginx                    # 容器名称(必填)
    image: nginx:1.24              # 镜像(必填)
    ports:                         # 端口声明
    - containerPort: 80
    env:                           # 环境变量
    - name: ENV
      value: production
    resources:                     # 资源限制
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

容器镜像配置

image: nginx:latest        # 完整镜像地址
imagePullPolicy: Always    # 镜像拉取策略
拉取策略说明
Always总是拉取(默认 latest)
IfNotPresent本地没有才拉取(默认非 latest)
Never从不拉取,只用本地

端口配置

ports:
- name: http               # 端口名称(可选)
  containerPort: 80         # 容器端口(必填)
  protocol: TCP             # 协议(默认 TCP)

环境变量

env:
# 直接定义
- name: ENV
  value: production

# 从 ConfigMap 读取
- name: CONFIG
  valueFrom:
    configMapKeyRef:
      name: my-config
      key: config.yaml

# 从 Secret 读取
- name: PASSWORD
  valueFrom:
    secretKeyRef:
      name: my-secret
      key: password

资源限制

resources:
  requests:                # 最小保证资源
    memory: "64Mi"
    cpu: "250m"
  limits:                  # 最大可用资源
    memory: "128Mi"
    cpu: "500m"
单位说明示例
Mi兆字节64Mi = 64MB
m毫核1000m = 1 CPU

完整示例

apiVersion: v1
kind: Pod
metadata:
  name: web-server
  namespace: default
  labels:
    app: web
    env: production
spec:
  containers:
  - name: nginx
    image: nginx:1.24
    ports:
    - name: http
      containerPort: 80
    env:
    - name: ENV
      value: production
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

多容器 Pod 示例

apiVersion: v1
kind: Pod
metadata:
  name: multi-container
spec:
  containers:
  # 主容器
  - name: web
    image: nginx
    ports:
    - containerPort: 80

  # Sidecar 容器
  - name: log-agent
    image: fluentd
    volumeMounts:
    - name: logs
      mountPath: /var/log/nginx

  volumes:
  - name: logs
    emptyDir: {}

Pod 级别配置

spec:
  # 重启策略
  restartPolicy: Always

  # DNS 策略
  dnsPolicy: ClusterFirst

  # 节点选择器
  nodeSelector:
    disk: ssd

  # 容忍度
  tolerations:
  - key: "key"
    operator: "Equal"
    value: "value"
    effect: "NoSchedule"

实践练习

练习 1:基础 YAML

编写一个 Pod YAML,要求:

  • 名称:my-nginx
  • 镜像:nginx:1.24
  • 端口:80
  • 标签:app=web

练习 2:资源限制

为练习 1 的 Pod 添加资源限制:

  • 内存请求:64Mi,限制:128Mi
  • CPU 请求:250m,限制:500m

练习 3:环境变量

为练习 1 的 Pod 添加环境变量:

  • ENV=production
  • LOG_LEVEL=info

练习 4:多容器

编写一个包含两个容器的 Pod:

  • 容器 1:nginx (端口 80)
  • 容器 2:redis (端口 6379)

常见误解

1. YAML 缩进

错误:使用 Tab 缩进
正确:使用空格缩进(通常 2 个空格)

YAML 不支持 Tab,必须使用空格

2. 字符串引号

错误:数字不加引号导致类型错误
正确:
- port: "80"    # 字符串
- replicas: 3   # 数字

带冒号或特殊字符的字符串必须加引号

小结

要点说明
基本结构apiVersion + kind + metadata + spec
metadataname、namespace、labels、annotations
containersname、image、ports、env、resources
镜像策略Always / IfNotPresent / Never
资源单位Mi (内存)、m (CPU)
多容器共享网络和存储卷

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「创建 Pod」 以巩固所学知识。