赞
踩
每个pod中都可以包含一个或者多个容器,这些容器可以分为两类:
1) 用户程序所在的容器,数量可多可少(上图的第一、第二层)
2) Pause容器,这是每个pod都会有的一个根容器,它的作用有两个 :
2.1)可以以它为依据,评估整个Pod的健康状态
2.2) 可以在根容器上设置IP地址,其他容器都以此IP(Pod ip),以实现POD内部的网路通信
这里POD内部的通讯,POD之间的通讯采用虚拟二层网络技术来实现,我们当前用的环境是Flannel.
下面是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定义的共享储存卷的名称,需要volumens[]部门定义的卷名
- 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,将用于dockeer run --momory参数
- requests: #资源请求的设置
- cpu: string #Cpu请求,容器启动的初始可用数量
- memory: string #内存请求,容器启动的出师可用数量
- lifecycle: #生命周期钩子
- postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
- preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止
- livenessProbe: #对Pod内各个容器健康检查的设置,当探测无响应几次之后会自动重启该容器
- exec: #对Pod容器内检查方式设为exec方式
- command: [string] #exec方式需要定制的命令或脚本
- httpGet: #对piod内个容器健康检查方法设置为HttpGet,需要定制path。port
- path: string
- port: number
- host: string
清单中有这么多字段,怎么记呢? 可以使用以下命令查看:
#在这里,可以通过命令来查看每种资源的可配置项
#kubectl explain 资源类型。 (查看某种资源可以配置的1级属性字段)
#kubectl explain 资源类型.属性。 查看属性的子属性(一定要Object)
例如:
- [root@master ~]# kubectl explain pod
- KIND : POD
- VERSION: v1
- FIELDS:
- apiVersion <string>
- kind <string>
- metadata <Object>
- spec <Object>
- status <Object>
-
- #以上<string>的类型的字段已经给你打印出来了,直接填写就好,但是Object字段
- #还是需要点出来查看2级字段的
-
- [root@master ~]# kubectl explain pod.metadata
- KIND: POD
- VERSION: v1
- RESOURCE: metadata <Object>
- FIELDS: #这个意思是现实的二级字段
- annotations<map[string]string>
- clusterName<String>
- creationTimestamp <string>
- deletionGracePeriodSeconds <integer>
- deletionTimestamp <string>
- finalizers <[]string>
查看pod以yaml的形式展示:
kubectl get pods 【podname】 -n dev -o yaml
K8s资源清单 一级属性都是一样的,主要包含5个部分:
· apVersion <string> 版本,由K8s内部定义,版本号必须可以用kubectl api-version查询到
· kind <string>. 类型,由K8s颞部定义,版本号必须可以用kubectl api-resources查询到
· metadata <Object> 元数据,主要是资源标识和说明,常用的有name,namesapce,labels等
` spec<Object> 描述,这是配置中最重要的部分,里面对各种资源配置的详细描述
· status<Object> 状态信息,里面的内容不需要定义,由K8s自动生成
在上面的属性中,spec是接下来研究的重点,继续看他常见的子属性
· containers <[]Object> 容器列表,用于定义容器的详细信息
·nodeName <String> 根据nodeName的值将pod调度到指定的Node节点上
· nodeSelector <map[]> 根据NodeSelector中定义的信息选择将该Pod调度到包含这些label的Node上
· hostNetwork <boolean> 是否使用主机网络面试,默认为false,如果设置为true,表示使用宿主机网络
· volumes <[]Object> 存储卷,用于定义Pod上面挂载的存储信息
· restartPolicy <string> 重启策略,表示pod在遇到故障的时候的处理策略
本小节主要用来研究pod.spec.containers属性,这也是pod配置中最为关键的一项配置
- [root@master ~]# kubectl explain pod.spec.containers
- KIND : POD
- VERSION : v1
- RESOURCE: containers<[]Object> #数组,代表可以有多个容器
- FIELDS:
- name <string> #容器名称
- image <string> #容器需要构建的镜像地址
- imagePullPolicy <string> #镜像拉取策略(镜像是使用本地的还是远程仓库的)
- command <[]string> #容器的启动命令列表,如不指定,使用打包时使用的启动命令
- args <[]string> #容器启动命令需要的参数列表
- env <[]Object> #容器环境变量配置
- ports #容器需要暴露的端口列表
- resources <Object> #资源限制和资源请求的设置
创建pod-base.yaml文件内容如下:
- apiVersion: v1
- kind: Pod
- metadata:
- name: pod-base
- namespace: dev
- labls:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。