Kubernetes Pod篇(1)Pod概述 - 根容器Pause、Pod清单、镜像拉取策略、command与args的区别

# 本节要点
  根容器Pause的作用,作为整组容器的状态,Pod里的多个业务容器共享Pause容器IP,共享Pause容器挂接的Volume。
  每个Pod都有唯一IP;一个Pod容器与另外主机的Pod容器之间可以直接通信。
  

1. Pod简述

  1. Pod运行在节点Node中;
  2. Pod是对容器的封装,是k8s最小的调度单元,也是Kubernetes最重要的基本概念;
  3. Pause容器简述
    每个Pod都有一个特殊的被称为“根容器”的Pause容器,Pause容器对应的镜像属于Kubernetes平台的一部分。Kubernetes设计出全新Pod概念的原因如下。
    原因一,在一组容器作为一个单位的情况下,我们难以简单地对整组容器的状态进行判断。如果其中一个容器死亡,此时该去定义整组容器都死亡呢?还是定义N/M的死亡率呢?通过引入与业务无关并且不容易死亡的Pause容器作为Pod的根容器,以它的状态代表整组容器的状态,可以简单的解决整个问题。
    原因二,Pod里的多个业务容器共享Pause容器IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。
  4. Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP,一个Pod里的多个容器共享Pod IP。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,因此一个Pod容器与另外主机上的Pod容器能够直接通信。

2. Pod清单

apiVersion: v1         # Pod版本号为v1
kind: Pod              # 使用的资源类型为Pod
metadata:    
  name: string         # 当前Pod的名称,名字唯一
  namespace: string    # Pod所属的命名空间,默认值为default
  labels:              # 自定义标签列表
    - name: string     # 当前pod标签为“name=string”
  annotations:         # 自定义注解列表
    - name: string
spec:                  # Pod中的详细定义
  containers:          # Pod的容器列表
  - name: string       # 容器名字
    image: string      # 容器镜像
    imagePullPolicy:          # 容器的镜像拉取策略
    command: [string]         # 容器的启动命令列表
    args: [string]            # 容器的启动命令参数列表
    workingDir: String        容器的工作目录  
    volumeMounts:             # 挂载到容器内部的存储卷配置
    - name: String            # 引用Pod定义的共享存储卷的名,需用Pod.spec.volumes[]部分定义的卷名
      mountPath: String       # 存储卷在容器内的绝对路径
      readOnly: boolean       # 设置为只读模式,默认为false
  volumes:                    # 在该Pod上定义共享存储卷列表
  - name: String              # 共享存储卷名称,必须字母小写
    emptyDir: { }             # 类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
    hostPath: String          # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
    path: String              # Pod所在宿主机的目录,将被用于同期中Mount的目录
  ports:                      容器需要暴露的端口库号列表
  - name: String              端口号名称
    containerPort: Int        容器需要监听的端口号
    hostPort: Int             可选,容器所在主机需要监听的端口号,默认与Container相同
  env:                # 容器运行前需设置的环境变量列表
  - name: String         # 环境变量名称
    value: String        # 环境变量的值
  resources:              # 资源限制和请求的设置
    limits:              # 资源限制的设置
      cpu: String          # Cpu的限制,单位为Core数,将用于docker run --cpu-shares参数,如果整数后跟m,表示占用权重,1Core=1000m
      memory: String        # 内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
    requests:             # 资源请求的设置
      cpu: string          # CPU请求,容器启动的初始可用数量
      memory: string        # 内存请求,容器启动的初始可用数量
  livenessProbe:         # 对Pod内容器健康检查设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可。
    exec:             # 对Pod容器内检查方式设置为exec方式
      command: [String]   #  exec方式需要制定的命令或脚本
    httpGet:          #  对Pod容器内检查方式设置为HttpGet方式,需要指定path、port
      path: String      #  网址URL路径(去除对应的域名或IP地址的部分)
      port: Int            #  对应端口
      host: String          # 域名或IP地址
      schema: String         # 对应的检测协议,如http
      HttpHeaders:           # 指定报文头部信息
      - name: String
        value: String
    tcpSocket:               # 对Pod容器内检查方式设置为tcpSocket方式
      port: Int
    initialDelaySeconds: Int  # 容器启动完成后首次探测的时间,单位为秒
    timeoutSeconds: Int       # 对容器健康检查探测等待响应的超时时间,单位为秒,默认为1秒
    periodSeconds: Int        # 对容器监控检查的定期探测时间设置,单位为秒,默认10秒一次
    successThreshold: Int     # 探测几次成功后认为成功
    failureThreshold: Int    # 探测几次失败后认为失败
    securityContext:
      privileged: false
  restartPolicy:          # Pod的重启策
  nodeSelector:              设置NodeSelector表示将该Pod调度到包含这个label的node上,以Key:Value的格式指定
    Key: Value               调度到指定的标签Node上
  imagePullSecrets:          Pull镜像时使用的secret名称,以Key:SecretKey格式指定
  - name: String
  hostNetwork: false         是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络

  secret:                    类型为Secret的存储卷,挂载集群与定义的Secret对象到容器内部
    secretname: String
    items:                   当仅需挂载一个Secret对象中的指定Key时使用
    - key: String
     path: String
  configMap:               # 类型为ConfigMap的存储卷,挂载预定义的ConfigMap对象到容器内部
    name: String
    items:                 # 当仅需挂载一个ConfigMap对象中的指定Key时使用
    - key: String
      path: String
    

3. 镜像拉取策略说明imagePullPolicy

# 镜像拉取策略有三种
Always、Never、IfNotPresent
下面详解三种拉取策略
# Always
默认值。每次都尝试重新拉取镜像;
# IfNotPresent
如果本地有该镜像,则使用本地镜像,本地镜像不存在时则去拉取镜像;
# Never
仅使用本地镜像,如果本地没有则不进行拉取

4. command、args的区别

# command、args两项实现覆盖Dockerfile中ENTRYPOINT的功能,具体的command命令代替ENTRYPOINT的命令行,args代表集体的参数。

# 以下是使用场景
1. 如果command和args均没有指定,那么则使用Dockerfile的配置。

2. 如果command没有指定,但指定了args,那么Dockerfile中配置的ENTRYPOINT的命令行会被执行,并且将args中填写的参数追加到ENTRYPOINT中。

3. 如果command指定了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command(不带任何参数,当然command中可自带参数)。

4. 如果command和args都指定了,那么Dockerfile的配置被忽略,执行command并追加上args参数。
[root@Master ~]# vim pod-busybox-command-args.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-busybox-command-args
  labels:
    name: pod-busybox-command-args
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","sleep 3600"]

[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml 
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
pod-busybox-command-args   1/1     Running   0          4s

删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted

修改方式一:
[root@Master ~]# vim pod-busybox-command-args.yaml 
    command: ["/bin/sh","-c","sleep 3600"]
    修改为
    command: ["/bin/sh"]
    args: ["-c","sleep 3600"]
    
[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml 
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
pod-busybox-command-args   1/1     Running   0          4s
删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted

修改方式二:
[root@Master ~]# vim pod-busybox-command-args.yaml 
    command: ["/bin/sh","-c","sleep 3600"]
修改为
    args:
    - /bin/sh
    - -c
    - sleep 3600
    
[root@Master ~]# kubectl create -f pod-busybox-command-args.yaml 
pod/pod-busybox-command-args created
[root@Master ~]# kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
pod-busybox-command-args   1/1     Running   0          4s
删除pod
[root@Master ~]# kubectl delete pod pod-busybox-command-args
pod "pod-busybox-command-args" deleted
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值