Kubernetes(K8S) 入门进阶实战完整教程-05k8s的Pod详解-01基础

本章详细介绍pod资源的各种配置(yaml)和原理

Pod结构和定义

  1. Pod结构

    每个Pod都可以包含一个或者多个容器,这些容器可以分为两类:
  • 用户程序所在的容器,数量可多可少
  • Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:
    (1)可以以它作为依据,评估整个pod的健康状况
    (2)可以在根容器上设置ip地址,其它容器都共享此ip(pod的ip),以实现pod内部的网络通信(这里是pod内部的通信,pod之间的通讯采用虚拟二层网络技术来实现,我们当前环境使用的是flannel)
  1. Pod的定义
    下面是Pod的资源清单
apiVersion: v1  # 必选,版本号, 例如v1
kind: Pod  # 必选,资源类型,例如Pod
metadata:  # 必选,元数据
  name: string  # 必选,Pod名称
  namespace: string  # Pod所属的命名空间,默认为default
  labels:  # 自定义标签列表
    name: string
spec:  # 必选,Pod中容器的详细定义
  containers:  # 必选,Pod中容器列表
  - name: string  # 必选,容器名称
    image: string  # 必选,容器的镜像名称
    imagePullPolicy: [ Always|Never|IfNotPresent ]  # 获取镜像的策略
    command: [string]  # 容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]  # 容器的启动命令参数列表
    workingDir: string  # 容器的工作目录
    volumeMounts:       # 挂载到容器内部的存储卷配置
    - name: string  # 引用pod定义的共享存储卷的名称,需用volumes[]部分定义的卷名
      mountPath: string  # 存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean  # 是否为只读模式
    ports:  # 需要暴露的端口号列表
    - name: string  # 端口的名称
      containerPort: int  # 容器需要监听的端口
      hostPort: int  # 容器所在主机需要监听的端口,默认与Container相同
      protocol: string  # 端口协议,支持TCP/UDP, 默认TCP
    env:  # 容器运行前需要设置的环境变量列表
    - name: string  # 环境变量的名称
      value: string  # 环境变量的值
    resources:  # 资源限制和请求的设置
      limits:  # 资源限制的设置
        cpu: string  # cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string  # 内存限制,单位可以为Mib/Gib, 将用于docker run --memory参数
      requests:  # 资源请求的设置
        cpu: string  # cpu请求,容器启动的初始可用数量
        memory: string  # 内存请求,容器启动的初始可用数量
    lifecycle:  # 生命周期钩子
    postStart:  # 容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
    preStop:  # 容器终止前执行此钩子,无论结果如何,容器都会终止
    livenessProbe:  # 对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
      exec:  # 对pod容器内检查方式设置为exec方式
        command: [string]  # exec方式需要指定的命令或脚本
      httpGet:  # 对Pod内容器健康检查方法设置为httpGet, 需要制定Path、Port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
        tcpSocket:  # 对Pod内容器健康检查方式设置为tcpSocket方式
          port: number
        initialDelaySeconds: 0  #容器启动完成后首次探测的时间,单位为秒
        timeoutSeconds: 0  #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
        periodSeconds: 0  #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
        successThreshold: 0
        failureThreshold: 0
        securityContext:
          privileged: false
  restartPolicy: [always | never | onfailure]  # pod的重启策略
  nodeName: <string>  # 设置nodeName表示将该pod调度到指定名称的node节点上
  nodeSelector: object  # 设置nodeSelector表示将该Pod调度到包含这个label的node节点上
  imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
  - name: string  # 
  hostNetwork: false   #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
  volumes:  # 在该pod上定义共享存储卷列表
  - name: string  # 共享存储卷名称(volumes类型有很多种)
    emptyDir: {}  # 类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
    hostPath:  # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
      path: string  # Pod所在宿主机的目录,将被用于同期中mount的目录
    secret:  # 类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
      secretname: string
      items:
      - key: string
        path: string
    configMap:  # 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
      name: string
      items:
      - key: string
        path: string
  1. 可以通过命令查看每一种资源的可配置项
kubectl explain 资源类型 ,查看某种资源可配的一级属性
kubectl explain 资源类型.属性,查看属性的子属性
  1. kubernetes中基本所有资源的一级属性都是一样的,主要包含5部分
  • apiVersion 版本,由Kubernetes内部定义,版本号必须可用kubectl api-versions查询到
  • kind 类型,由kubernetes内部定义,版本号必须可用kubectl api-resources查询到
  • metadata
posted @   专职  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示