pod结构和定义

一、Pod结构

在这里插入图片描述

在kubernetes中,按照pod的创建方式可以将其分为两类:

  1. 自主式pod:kubernetes直接创建出来的pod,这种pod删除后就没有了,也不会重建
  2. 控制器创建的pod:通过控制器创建的pod,这种pod删除了之后还会自动重建

每个pod都可以包含一个或者多个容器,这些容器可以分为两类:

  1. 用户程序所在的容器,数量可多可少
  2. pause容器,这是每个pod都会有的一个根容器,它的作用是两个:
    • 可以根据它作为依据,评估整个pod的健康状态
    • 可以在根容器上设置ip地址,其他容器共享此ip(Pod Ip)以实现 pod内部的网络通信 (这里是pod内部的通信,pod的之间的通讯采用虚拟二层网络技术来实现,我们当前环境用的是flannel)

二、Pod定义

yaml配置文件(资源清单)

apiVersion: v1            //必选,版本号,例如 v1
kind: pod                 //必选,创建的资源类型,例如 pod
metadata:                 //必选,元数据
  name: String            //必选,pod名称
  namespace: String       //所创建的资源的pod所属命名空间,默认为default
  labels:                 //自定义标签列表
    - name: String        //标签键值对
  annotations:            //元数据,自定义注解列表
    - name: String        //元数据,自定义注解名字
spec:                     //pod中容器的详细定义
  containers:             //pod中的容器列表,可以有多个容器
  - name: String          //容器名称
    image: String         //容器中的镜像名
    imagesPullPolicy: [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       //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口),默认与containerPort相同,设置hostPort时,同一台主机将无法启动该容器的第二个副本
      protocol: String    //端口协议,支持TCP和UDP,默认为TCP
    env:                  //容器运行前要设置的环境列表
    - name: String        //环境变量的名称
      value: String       //环境变量的值
    resources:            //资源限制和资源请求的设置
      limits:             //资源限制的设置
        cpu: Srting       //CPU限制,单位为core数,将用于docker run --cpu-shares参数
        memory: String    //内存限制,单位可以为MiB,GiB等,将用于docker run --memory参数
      requests:           //资源请求设置
        cpu: String       //cpu请求,单位为core数,容器启动的初始可用数量
        memory: String    //内存请求,单位为MiB或GiB,容器启动的初始可用数量
    livenessProbe:        //pod内容器健康检查的设置,探测几次无反应后,将自动重启该容器,探测方式包括:exec,httpGet,tcpSocket
      exec:               //exec探测方式
        command: [String] //exec方式需要指定的命令或脚本
      httpGet:            //通过httpget检查健康,需要指定path,port
        path: String      //网址URL路径(去除对应的域名或IP地址的部分)
        port: number      //对应端口  
        host: String      //域名或IP地址
        scheme: Srtring   //对应的检测协议,如http
        httpHeaders:      //指定报文头部信息
        - name: Stirng    //头部信息名称
          value: String   //头部信息值
      tcpSocket:          //通过tcpSocket检查健康
        port: number      //探测端口的端口号
      initialDelaySeconds: 0//容器启动完成后首次探测的时间,单位为s
      timeoutSeconds: 0     //探测等待响应超时时间,单位为s,默认为1,超时认为容器不健康,容器将重启
      periodSeconds: 0      //定期探测时间设置,单位为s,默认为10
      successThreshold: 0   //探测几次成功后认为成功
      failureThreshold: 0   //探测几次失败后认为失败
    securityContext:        //安全配置
      privileged: falae     //
  restartPolicy: [Always|Never|OnFailure]//重启策略,终止定会重启,除正常结束(退出码为0)外其他非0退出码终止才重启,Pod终止后退出码报告给master不重启Pod;always:当容器退出时,总是重启容器,默认策略,onfailure:当容器异常退出(退出状态码非0)时,重启容器,nerver:当容器退出时,从不重启容器(k8s中不支持重启pod资源,这里说的重启指的是删除重建pod)
  nodeSelector: object      //设置Node的Label,key:value格式指定,Pod将被调度到具有这些Label的Node上
  imagePullSecrets:         //pull镜像时使用Secrets名称,以name:sercretkey格式指定
  - name: String            //参照物名称
  hostNetwork: false        //是否使用主机网络模式,默认为false,设置为true,表示使用宿主机网络,不使用docker网桥,此Pod无法在同一台机上启动第2个副本
  volumes:                  //在该pod上定义共享存储卷列表
  - name: String            //共享存储卷名称,一个Pod内,每个存储卷定义一个名称,供spec[].containers
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值