Kubernetes 关键对象定义详解

Pod定义文件详解

Pod 的定义模版(yaml 格式)如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
apiVersion: v1
kind: Pod
metadata:
name: string
namespace: string
labels:
- name: string
annotations:
- name: string
spec:
containers:
- name: string
image: string
imagePullPolicy: [Always | Never | IfNotPresent]
command: [string]
workingDir: string
volumeMounts:
- name: string
mountPath: string
readOnly: boolean
ports:
- name: string
containerPort: int
hostPost: int
protocol: string

对各属性的详细说明如下:

属性名称 取值类型 是否必选 取值说明
version String Required v1
kind String Required Pod
metadata Object Required 元数据
metadata.name String Required Pod 名称,需符合 RFC 1035 规范
metadata.namespace String Required 命名空间,在不指定系统时将使用名为 “defautl” 的命名空间
metadata.labels[] List 自定义标签属性列表
metadata.annotation[] List 自定义注解属性列表
spec Object Required 详细描述
spec.containers[] List Required Pod 中运行的容器的列表
spec.containers[].name String Required 容器名称,需符合 RFC 1035 规范
spec.containers[].image String Required 容器的镜像名,在 Node 上如果不存在该镜像,则 Kubelet 会先下载
spec.containers[].imagePullPolicy String 获取镜像的策略,可选值包括:Always、Never、IfNotPresent,默认值为 Always。Always:表示每次都下载镜像。IfNotPresent:表示如果本地有该镜像,就是用本地的镜像。Never:表示仅使用本地镜像。
spec.containers[].command[] List 容器的启动命令列表,如果不指定,则使用镜像打包时使用的 CMD 命令。
spec.containers[].workingDir String 容器的工作目录
spec.containers[].volumeMounts[] List 可供容器使用的共享存储卷列表
spec.containers[].volumeMounts[].name String 引用 Pod 定义的共享存储卷的名称,需使用 volumes[] 部分定义的共享存储卷名称
spec.containers[].volumeMounts[].mountPath String 存储卷在容器内 Mount 的绝对路径,应少于 512 个字符
spec.containers[].volumeMounts[].readOnly boolean 是否为只读模式,默认为读写模式
spec.containers[].ports[] List 容器需要暴露的端口号列表
spec.containers[].ports[].name String 端口名称
spec.containers[].ports[].containerPort Int 容器需要监听的端口号
spec.containers[].ports[].hostPort Int 容器所在主机需要监听的端口号,默认与 containerPort 相同
spec.containers[].ports[].protocol String 端口协议,支持 TCP 和 UDP,默认为 TCP
spec.containers[].env[] List 容器运行前需要设置的环境变量列表
spec.containers[].env[].name String 环境变量名称
spec.containers[].env[].value String 环境变量的值
spec.containers[].resources Object 资源限制条件
spec.containers[].resources.limits Object 资源限制条件
spec.containers[].resources.limits.cpu String CPU 限制条件,将用于 docker run –cpu-shares 参数
spec.containers[].resources.limits.memory String 内存限制条件,将用于 docker run –memory 参数
spec.volumes[] List 在该 Pod 上定义的共享存储卷列表
spec.volumes[].name String 共享存储卷名称,需唯一,符合 RFC 1035 规范。容器定义部分 containers[].volumeMounts[].name 将引用该共享存储卷的名称
spec.volumes[].emptyDir Object 默认的存储卷类型,表示与 Pod 同生命周期的一个临时目录,其值为一个空对象:emptyDir:{}。该类型与 hostPath 类型互斥,应只定义一种
spec.volumes[].hostPath Object 使用 Pod 所在主机的目录,通过 volumes[].hostPath.path 指定。该类型与 emptyDir 类型互斥,应只定义一种
spec.volumes[].hostPath.path String Pod 所在主机的目录,将被用于容器中 mount 的目录。
spec.dnsPolicy String Required DNS 策略,可选值包括:Default、ClusterFirst
spec.restartPolicy Object 该 Pod 内容器的重启策略,可选值为 Always、OnFailure、Never,默认值为 Always。Always:容器一旦终止运行,无论容器是如何终止的,Kubelet 都将重启它。OnFailure:只有容器以非零退出码终止时,Kubelet 才会重启该容器。如果容器正常结束(退出码为0),则 Kubelet 将不会重启它。Never:容器终止后,Kubelet 将退出码报告给 Master,不再重启它
spec.nodeSelector Object 指定需要调度到的 Node 的 Label,以 key=value 格式指定
spec.imagePullSecrets Object Pull 镜像时使用的 secret 名称,以 name=secretkey 格式定义

RC 定义文件详解

RC(ReplicationController)定义文件模版(yaml格式)如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: ReplicationController
metadata:
name: string
namespace: string
labels:
- name: string
annotations:
- name: string
spec:
replicas: number
selector: []
template: object

对各属性的说明如下:

属性名称 取值类型 是否必选 取值说明
version String Required v1
kind String Required ReplicationController
metadata object Required 元数据
metadata.name String Required ReplicationController 名称,需符合 RFC 1035 规范
metadata.namespace String Required 命名空间,不指定系统时将使用名为 “default” 的命名空间
metadata.labels[] List 自定义标签属性列表
metadata.annotaion[] List 自定义注解属性列表
spec Object Required 详细描述
spec.replicas number Required Pod 副本数量,设置为 0 表示不创建 Pod
spec.selector[] Listt Required Label Selector 配置,将选择具有指定 Label 标签的 Pod 作为管理范围
spec.template Object Required 容器的定义,与 Pod 的 spec 内容相同

Service定义文件详解

Service 的定义文件模版(yaml格式)如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: Service
metadata:
name: string
namespace: string
labels:
- name: string
annotations:
- name: string
spec:
selector: []
type: string
clusterIP: string
sessionAffinity: string
ports:
- name: string
port: int
targetPort: int
protocol: string
status:
loadBalancer:
ingress:
ip: string
hostname: string

对各属性的说明如下:

属性名称 取值类型 是否必选 取值说明
version String Required v1
kind String Required Service
metadata Object Required 元数据
metadata.name String Required Service 名称,需符合 RFC 1035 规范
metadata.namespace String Required 命名空间,不指定系统时将使用名为“default”的命名空间
metadata.labels[] List 自定义标签属性列表
metadata.annotation[] List 自定义注解属性列表
spec Object Required 详细描述
spec.selector[] List Required Label Selector 配置,将选择具有指定 Label 标签的 Pod 作为管理范围
spec.type String Required Service 的类型,指定 Service 的访问方式,默认为 ClusterIP。ClusterIP:虚拟的服务器 IP 地址,该地址用于 Kubernetes 集群内部的 Pod 访问,在 Node 上 kube-proxy 通过设置的 iptables 规则进行转发。NodePort:使用宿主机的端口,使能够访问各 Node 的外部客户端通过 Node 的 IP 地址和端口号就能访问服务。LoadBalancer:使用外接负载均衡器完成到服务的负载分发啊 ,需要在 spec.status.loadBalancer 字段指定外部负载均衡器的 IP 地址,并同时定义 nodePort 和 clusterIP
spec.type.clusterIP String 虚拟服务 IP 地址,当 type=ClusterIP 时,如果不指定,则系统将自动分配;当 type=LoadBalancer 时,则需要指定
spec.sessionAffinity String 是否支持 Session,可选值为 ClientIP,默认为空。ClientIP:表示将同一个客户端(根据客户端的IP地址决定)的访问请求都转发到同一个后端 Pod
spec.ports[] List Service 需要暴露的端口号列表
spec.ports[].name String 端口名称
spec.ports[].port Int 服务监听的端口号
spec.ports[].targetPort Int 需要转发到后段 Pod 的端口号
spec.ports[].protocol String 端口协议,支持 TCP 和 UDP,默认为 TCP
status Object 当 spec.type=LoadBalancer 时,设置外部负载均衡器的地址
status.loadBalancer Object 外部负载均衡器
status.loadBalancer.ingress Object 外部负载均衡器
status.loadBalancer.ingress.ip String 外部负载均衡器的 IP 地址
status.loadBalancer.ingress.hostname String 外部负载均衡器的主机名