本章节将详细先容Pod资源的各种设置(yaml)和原理。
5.1 Pod先容
5.1.1 Pod结构
每个Pod中都可以包罗一个大概多个容器,这些容器可以分为两类:
- 用户步伐所在的容器,数量可多可少。
- Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:
可以以它为依据,评估整个Pod的康健状态
可以在根容器上设置IP所在,别的容器都此IP(Pod IP),以实现Pod内部的网路通信
这里是Pod内部的通讯,Pod的之间的通讯采取虚拟二层网络技能来实现,我们当前情况用的是Flannel
5.1.2 Pod界说
下面是Pod的资源清单:
apiVersion: v1 #必选,版本号,比方v1kind: Pod #必选,资源类型,比方 Podmetadata: #必选,元数据 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: obeject #设置NodeSelector体现将该Pod调理到包罗这个label的node上 imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定 - name: string hostNetwork: false #是否使用主机网络模式,默以为false,假如设置为true,体现使用宿主机网络 volumes: #在该pod上界说共享存储卷列表 - name: string #共享存储卷名称 (volumes类型有很多种) emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个暂时目次。为空值 hostPath: string #类型为hostPath的存储卷,体现挂载Pod所在宿主机的目次 path: string #Pod所在宿主机的目次,将被用于同期中mount的目次 secret: #类型为secret的存储卷,挂载集群与界说的secret对象到容器内部 scretname: string items: - key: string path: string configMap: #类型为configMap的存储卷,挂载预界说的configMap对象到容器内部 name: string items: - key: string path: string小提示:# 在这里,可通过一个命令来查察每种资源的可设置项# kubectl **explain** 资源类型 查察某种资源可以设置的一级属性# kubectl explain 资源类型.属性 查察属性的子属性[root@master ~]# kubectl explain pod[root@master ~]# kubectl explain pod.metadata在kubernetes中根本全部资源的一级属性都是一样的,重要包罗5部分: apiVersion <string> 版本,由kubernetes内部界说,版本号必须可以用 kubectl api-versions 查询到 kind <string> 类型,由kubernetes内部界说,版本号必须可以用 kubectl api-resources 查询到metadata <Object> 元数据,重要是资源标识和分析,常用的有name、namespace、labels等> > spec <Object> 形貌,这是设置中最紧张的一部分,内里是对各种资源设置的详细形貌 > > status <Object> 状态信息,内里的内容不必要界说,由kubernetes自动天生kubectl apiversions
kubectl api-resourceskubectl get pods nginx-64777cd554-4k4pf -n dev -o yaml
在上面的属性中,spec是接下来研究的重点,继承看下它的常见子属性:
containers <[]Object> 容器列表,用于界说容器的详细信息nodeName <String> 根据nodeName的值将pod调理到指定的Node节点上nodeSelector <map[]> 根据NodeSelector中界说的信息选择将该Pod调理到包罗这些label的Node 上hostNetwork <boolean> 是否使用主机网络模式,默以为false,假如设置为true,体现使用宿主机网络volumes <[]Object> 存储卷,用于界说Pod上面挂在的存储信息restartPolicy <string> 重启计谋,体现Pod在遇到故障的时间的处置惩罚计谋kubectl explain pods.spec
|