K8S的Pod资源清单

发布时间 2023-12-02 22:04:13作者: tom_log

Pod 资源清单

Pod 是 Kubernetes 中最小的可部署单元,它是一个由一个或多个容器组成的组合。
本章化详细描述 Pod 资源清单

# 首行表示K8S的API版本
apiVersion: v1 
# 资源类型 Pod
kind: Pod
# 元数据信息
metadata:
  # 本资源名称
  name: my-pod
  # 资源标签,用于被其他资源所关联应用
  labels:
    app: my-app
    env: production
# Pod 详细内容
spec:
  # initContainers字段,用于定义初始化容器,初始化完成后再进行其他容器的启动工作
  initContainers:   
    - name: init-container
      # 初始化容器使用busybox镜像
      image: busybox:latest   
      # 定义初始化容器的命令
      command: ["sh", "-c", "echo 'Initializing...' && sleep 10"]   

  # 容器列表,一个Pod可以由多个容器组成
  containers:
    # 容器的名称
    - name: my-container
    # 容器的镜像
      image: nginx:latest
    # 容器暴露的端口
      ports:
        - containerPort: 80
    # 对这个Pod使用的资源进行限制 1000m为1核,内存可用M,G为单位
      resources:
        # 资源最低要求
        requests:
          memory: "64Mi"
          cpu: "250m"
        # 资源最高使用率
        limits:
          memory: "128Mi"
          cpu: "500m"
      # 注入环境变量 kv对的形式
      env:
        - name: ENV_VAR1
          value: "value1"
        - name: ENV_VAR2
          value: "value2"
################ 探针 ####################
      # 存活探针
      livenessProbe: 
        # 用Http的GET方法周期性获取对应响应检查容器内应用状态 
        httpGet:
          path: /healthz
          port: 80
        # 容器启动多久后开始探测
        initialDelaySeconds: 15
        # 检查间隔
        periodSeconds: 20

      # 可读探针,当容器可读时K8S才会把流量切入
      readinessProbe:  
        # 使用HTTP的GET方法检查应用路径  
        httpGet:
          path: /readiness
          port: 80
        # 容器启动多久后开始探测
        initialDelaySeconds: 10
        # 每次探测间隔
        periodSeconds: 15

      # 初始化探针,用于检查容器启动时程序是否就位。为就为将启动失败
      startupProbe:
        # 使用HTTP的GET方法检查应用路径  
        httpGet:
          path: /init
          port: 80
        # 失败次数上线
        failureThreshold: 30
        # 每次检测间隔
        periodSeconds: 10
        # 评定超时的时间
        timeoutSeconds: 5

      # 探针除了httpGet方法检测存活外还有TCP Socket探针、Exec探针、自定义探针共计四种。

############## 存储卷挂载 ################
      # 指定数据的挂载点
      volumeMounts:
        - name: my-volume
          mountPath: /data
  # 指定Pod使用的存储卷
  # K8S中约有七种存储卷类型
  # emptyDir,hostPath,gitRepo,persistentVolumeClaim,configMap,secret,downwardAPI
  volumes:
    - name: my-volume
      emptyDir: {}
########################################
  # 重启策略,Pod挂了是不是要重启,什么条件下重启
  # 有三个值可选 IfNotPresent、Always、Never
  restartPolicy: Always

  # DNS解析策略
  dnsPolicy: ClusterFirst
  # ClusterFirst:默认的DNS策略。先K8S内部解析,失败转为外部解析
  # Default:使用节点上的/etc/resolv.conf文件解析,解析失败使用外部的
  # ClusterFirstWithHostNet:使用主机网络空间的解析

  # 手动指定Pod的运行节点,填写节点名称,一般不用
  nodeName: work01

  # 优雅的重启Pod 常配合控制器使用,滚动重启,为了不影响业务,给一段时间等当前Pod的流量处理完。该值为Pod完全关闭的等待时间
  terminationGracePeriodSeconds: 30

  # 安全相关配置
  securityContext:
  # 限制对应UID外的用户
    runAsUser: 1000
  # 限制对应GID外的用户组
    fsGroup: 2000
    # SELINUX的相关配置
    seLinuxOptions:
      level: "s0:c123,c456"
      role: "role1"
      type: "type1"
      user: "user1"