Skip to content

Kubernetes YAML file quicklystart

1.集群级别资源

1.1.namespace资源清单文件

apiVersion: v1					# api版本
kind: Namespace					# 资源类型
metadata:						# 元数据
  name: dev						# namespace的名称
apiVersion: v1					# api版本
kind: Namespace					# 资源类型
metadata:						# 元数据
  name: dev						# namespace的名称

2.pod资源

2.1.pod资源清单文件-涵盖全部参数

apiVersion: v1			 # 必选,版本号,例如v1
kind: Pod				# 必选,资源类型,例如 Pod
metadata:				# 必选,元数据
  name : string			 # 必选,Pod名称
  namespace: string 		# Pod所属的命名空间,默认为" default"labels:
  labels:					# 自定义标签列表
    - namd: 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						# 对容器监控检查的定期探测时间设置,单位秒,黑认18秒一次
		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
apiVersion: v1			 # 必选,版本号,例如v1
kind: Pod				# 必选,资源类型,例如 Pod
metadata:				# 必选,元数据
  name : string			 # 必选,Pod名称
  namespace: string 		# Pod所属的命名空间,默认为" default"labels:
  labels:					# 自定义标签列表
    - namd: 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						# 对容器监控检查的定期探测时间设置,单位秒,黑认18秒一次
		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

2.2.pod资源基本配置清单文件

apiVersion: v1							# api版本
kind: Pod								# 资源类型为pod
metadata:								# 定义元数据
  name: pod-resources					# pod的名称
  namespace: dev						# pod所在的namespace
  labels:								# 定义标签
    app: base
spec:
  containers:
  - name: nginx-port						# 容器的名称
    image: nginx:1.11						# 镜像版本
  	imagePullPolicy: IfNotPresent				# 镜像拉取策略
    command: ["/bin/sh"]				# 容器启动后要执行的命令,命令有很多子命令,以逗号分隔
    args: ["-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"]
    env:						# 定义环境变量
    - name: "username"			# 定义变量名称
      value: "jiangxl"			# 定义变量值
    - name: "job"
      value: "it"    
    ports:							   # 定义端口,一个- name表示一个端口,可以写多个
    - name:	nginx-port					# 定义端口名称			
      containerPort: 80					# 定义开放的端口
      protocol: TCP						# 指定端口属于什么协议    
    resources:						# 定义资源配置
      limits:						# 最大资源限制
        cpu: "2"						# cpu限制在2核
        memory: "10Gi"					 # 内存限制在10G
      requests: 					# 最小资源限制
        cpu: "1"						# cpu限制在1核
        memory: "10Mi"					# 内存限制在10M
apiVersion: v1							# api版本
kind: Pod								# 资源类型为pod
metadata:								# 定义元数据
  name: pod-resources					# pod的名称
  namespace: dev						# pod所在的namespace
  labels:								# 定义标签
    app: base
spec:
  containers:
  - name: nginx-port						# 容器的名称
    image: nginx:1.11						# 镜像版本
  	imagePullPolicy: IfNotPresent				# 镜像拉取策略
    command: ["/bin/sh"]				# 容器启动后要执行的命令,命令有很多子命令,以逗号分隔
    args: ["-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"]
    env:						# 定义环境变量
    - name: "username"			# 定义变量名称
      value: "jiangxl"			# 定义变量值
    - name: "job"
      value: "it"    
    ports:							   # 定义端口,一个- name表示一个端口,可以写多个
    - name:	nginx-port					# 定义端口名称			
      containerPort: 80					# 定义开放的端口
      protocol: TCP						# 指定端口属于什么协议    
    resources:						# 定义资源配置
      limits:						# 最大资源限制
        cpu: "2"						# cpu限制在2核
        memory: "10Gi"					 # 内存限制在10G
      requests: 					# 最小资源限制
        cpu: "1"						# cpu限制在1核
        memory: "10Mi"					# 内存限制在10M

2.3.pod资源健康检查资源清单文件

apiVersion: v1
kind: Pod
metadata:
  name: pod-livereadiness
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.15
    ports:
    - name: nginx-port
      containerPort: 80
    livenessProbe:							# 存活性探测	
      tcpSocket:							# 使用TCPSocket探测方式
        port: 80							# 探测的端口
    initialDelaySeconds: 30					# 容器启动后30s以后开始探测
    timeoutSeconds: 5 					    # 探测超时时间
    readinessProbe:							# 就绪性探测		
      httpGet:							   # 使用HTTPGet探测方式
        scheme: HTTP					   # 协议使用http
        port: 80						  # 应用端口
        path: /	    					  # url路径
apiVersion: v1
kind: Pod
metadata:
  name: pod-livereadiness
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.15
    ports:
    - name: nginx-port
      containerPort: 80
    livenessProbe:							# 存活性探测	
      tcpSocket:							# 使用TCPSocket探测方式
        port: 80							# 探测的端口
    initialDelaySeconds: 30					# 容器启动后30s以后开始探测
    timeoutSeconds: 5 					    # 探测超时时间
    readinessProbe:							# 就绪性探测		
      httpGet:							   # 使用HTTPGet探测方式
        scheme: HTTP					   # 协议使用http
        port: 80						  # 应用端口
        path: /	    					  # url路径

2.2.pod资源一级可配置属性

[root@k8s-master ~]\# kubectl explain pod
KIND:     Pod
VERSION:  v1						# 编写yaml文件时第一行的版本号可以从这里进行查找
FIELDS:									# 可配置的一级属性,基本所有资源都是如下五个,如果当前级别配置参数后面<>中是string就表示没有下一级配置参数,直接填写一个字符串即可,如果<>为object说明他还有下一级配置参数,可以通过资源类型.属性的方式查找
   apiVersion	<string>					# 当前资源支持的版本
   kind	<string>						# 控制器类型
   metadata	<Object>							# 元数据
   spec	<Object>							# 设置属性
   status	<Object>					# 记录pod的状态,包括ip地址、创建时间等等,是自动增加的,不是手动写入的
[root@k8s-master ~]\# kubectl explain pod
KIND:     Pod
VERSION:  v1						# 编写yaml文件时第一行的版本号可以从这里进行查找
FIELDS:									# 可配置的一级属性,基本所有资源都是如下五个,如果当前级别配置参数后面<>中是string就表示没有下一级配置参数,直接填写一个字符串即可,如果<>为object说明他还有下一级配置参数,可以通过资源类型.属性的方式查找
   apiVersion	<string>					# 当前资源支持的版本
   kind	<string>						# 控制器类型
   metadata	<Object>							# 元数据
   spec	<Object>							# 设置属性
   status	<Object>					# 记录pod的状态,包括ip地址、创建时间等等,是自动增加的,不是手动写入的

2.4.pod初始化容器配置参数

[root@k8s-master ~/k8s_1.19_yaml]\# kubectl explain pod.spec.initContainers
KIND:     Pod
VERSION:  v1
RESOURCE: initContainers <[]Object>
DESCRIPTION:
FIELDS:
   args	<[]string>						# 设置容器启动参数
   command	<[]string>					# 设置容器启动命令
   env	<[]Object>						# 设置容器的环境变量
   image	<string>					# 容器的镜像
   imagePullPolicy	<string>			# 容器镜像的拉取策略
   name	<string> -required-					# 初始化容器的名称
   ports	<[]Object>						# 端口号设置
[root@k8s-master ~/k8s_1.19_yaml]\# kubectl explain pod.spec.initContainers
KIND:     Pod
VERSION:  v1
RESOURCE: initContainers <[]Object>
DESCRIPTION:
FIELDS:
   args	<[]string>						# 设置容器启动参数
   command	<[]string>					# 设置容器启动命令
   env	<[]Object>						# 设置容器的环境变量
   image	<string>					# 容器的镜像
   imagePullPolicy	<string>			# 容器镜像的拉取策略
   name	<string> -required-					# 初始化容器的名称
   ports	<[]Object>						# 端口号设置

2.5.pod资源钩子函数配置参数

KIND:     Pod
VERSION:  v1
RESOURCE: lifecycle <Object>
FIELDS:
   postStart	<Object>			# 定义容器启动后执行的钩子函数
     exec	<Object>				# exec命令方式,在容器里面执行相应的命令
       command		<[]string>		# 指定运行的命令
   	 httpGet	<Object>			# httpGet方式,探测容器应用的url
   	   host	<string>				# 主机地址,一般就是pod地址
   	   path	<string>				# 请求的url路径
   	   port	<string>				# 应用端口号
   	   scheme	<string>			# 协议
     tcpSocket	<Object>			# tcpSocket方式,访问容器指定的socket
     	host	<string>			# pod地址
     	port	<string>			# 端口号
   preStop	<Object>				# 定期容器关闭前执行的钩子函数
     exec	<Object>				# exec命令方式,在容器里面执行相应的命令
     ·····
   	 httpGet	<Object>			# httpGet方式,探测容器应用的url
   	 ·····
     tcpSocket	<Object>			# tcpSocket方式,访问容器指定的socket
     ·····     
KIND:     Pod
VERSION:  v1
RESOURCE: lifecycle <Object>
FIELDS:
   postStart	<Object>			# 定义容器启动后执行的钩子函数
     exec	<Object>				# exec命令方式,在容器里面执行相应的命令
       command		<[]string>		# 指定运行的命令
   	 httpGet	<Object>			# httpGet方式,探测容器应用的url
   	   host	<string>				# 主机地址,一般就是pod地址
   	   path	<string>				# 请求的url路径
   	   port	<string>				# 应用端口号
   	   scheme	<string>			# 协议
     tcpSocket	<Object>			# tcpSocket方式,访问容器指定的socket
     	host	<string>			# pod地址
     	port	<string>			# 端口号
   preStop	<Object>				# 定期容器关闭前执行的钩子函数
     exec	<Object>				# exec命令方式,在容器里面执行相应的命令
     ·····
   	 httpGet	<Object>			# httpGet方式,探测容器应用的url
   	 ·····
     tcpSocket	<Object>			# tcpSocket方式,访问容器指定的socket
     ·····     

2.6.Pod资源node调度策略配置参数

apiVersion: v1
kind: Pod
metadata:
  name: pod-nodename
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.15
  nodeName: k8s-node1				# 指定要调度的node节点名称
apiVersion: v1
kind: Pod
metadata:
  name: pod-nodename
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.15
  nodeName: k8s-node1				# 指定要调度的node节点名称

2.7.Pode亲和性调度配置参数

[root@k8s-master ~]\# kubectl explain pod.spec.affinity.nodeAffinity
requiredDuringSchedulingIgnoredDuringExecution	<Object>		# node节点必须满足所有规则才可以,相当于硬限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
nodeSelectorTerms	<[]Object>				# 定义节点选择列表,也就是定义具体匹配规则
 matchFields  <Object>						# 根据节点字段列出的节点选择器要求选择
   key										# 键
   operator			# 关系符,支持Exists(存在)、DoesNotExist(不存在)、In(是这个范围)、NotIN(不是这个范围)、Gt(大于)、Lt(小于)
   values										# 值
 matchExpressions   <Object>			# 根据节点标签选择器进行匹配(推荐使用)
   key								# 键,标签名
   operator							# 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt
   values							# 值,标签值
   
preferredDuringSchedulingIgnoredDuringExecution	<[]Object>		# 优先调度到满足指定规则的Node,相当于软限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
preference	<Object>						# 节点选择器,与权重关联,可以定义多个,多个prefence如何选择就要看权重设置的大小
 matchFields  <Object>						# 根据节点字段进行匹配
   key	
   operator
   values
 matchExpressions   <Object>							# 根据节点标签选择器进行匹配(推荐使用)
   key									# 键,标签名
   operator								# 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt			
   values  								# 值,标签值
weight      									# 设置权重,范围在1-100

# node亲和示例配置清单文件
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd  
# pod亲和示例配置清单文件
spec:
  affinity:
    podAffinity:
    # podAntiAffinity:					# pod反亲和性
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
      	  # matchLabels:
      	  #  app: fronted
          matchExpressions:
          - key: security
            operator: In
            values:
            - S1
        topologyKey: topology.kubernetes.io/zone		# 不在同一区域
        # topologyKey: kubernetes.io/hostname			# 不在同一主机
  containers:
  - name: with-pod-affinity
    image: k8s.gcr.io/pause:2.0
[root@k8s-master ~]\# kubectl explain pod.spec.affinity.nodeAffinity
requiredDuringSchedulingIgnoredDuringExecution	<Object>		# node节点必须满足所有规则才可以,相当于硬限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
nodeSelectorTerms	<[]Object>				# 定义节点选择列表,也就是定义具体匹配规则
 matchFields  <Object>						# 根据节点字段列出的节点选择器要求选择
   key										# 键
   operator			# 关系符,支持Exists(存在)、DoesNotExist(不存在)、In(是这个范围)、NotIN(不是这个范围)、Gt(大于)、Lt(小于)
   values										# 值
 matchExpressions   <Object>			# 根据节点标签选择器进行匹配(推荐使用)
   key								# 键,标签名
   operator							# 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt
   values							# 值,标签值
   
preferredDuringSchedulingIgnoredDuringExecution	<[]Object>		# 优先调度到满足指定规则的Node,相当于软限制,(这名字真是有够长的),不会驱逐已经存在并运行的pod
preference	<Object>						# 节点选择器,与权重关联,可以定义多个,多个prefence如何选择就要看权重设置的大小
 matchFields  <Object>						# 根据节点字段进行匹配
   key	
   operator
   values
 matchExpressions   <Object>							# 根据节点标签选择器进行匹配(推荐使用)
   key									# 键,标签名
   operator								# 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt			
   values  								# 值,标签值
weight      									# 设置权重,范围在1-100

# node亲和示例配置清单文件
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd  
# pod亲和示例配置清单文件
spec:
  affinity:
    podAffinity:
    # podAntiAffinity:					# pod反亲和性
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
      	  # matchLabels:
      	  #  app: fronted
          matchExpressions:
          - key: security
            operator: In
            values:
            - S1
        topologyKey: topology.kubernetes.io/zone		# 不在同一区域
        # topologyKey: kubernetes.io/hostname			# 不在同一主机
  containers:
  - name: with-pod-affinity
    image: k8s.gcr.io/pause:2.0

3.pod资源控制器资源

3.1.ReplicaSet控制器资源清单文件

apiVersion: apps/v1 					# 版本号
kind : ReplicaSet 					    # 类型
metadata:								# 元数据
  name : 								# rs名称
  namespace : 							# 所属命名空间
  labels:								# 标签
	controller : rs
spec:									# 详情描述
  replicas: 3 							# 副本数量
  selector: 							# 选择器,通过它指定该控制器管理哪些pod
    matchLabels :						# Labels匹配配规则
	  app: nginx-pod					# 匹配标签app值为nginx-pod的pod
    matchExpressions: 					# Expressions匹配规则
      - {key : app, operator : In, values : [nginx-pod ] }		# 指定一个就可以了
  template: 							# 模板,也就是定义pod的信息,当副本数量不足时,会根据下面的模板创建pod副本
    metadata :							# 元数据
	  labels :							# 定义标签与rs进行关联
        app: nginx-pod				
	spec:								# pod属性
      containers:						# 定义容器	
	  - name : nginx						# 容器名称
        image: nginx :1.17.1				# 镜像
	    ports :								# 端口号
		- containerPort : 80
apiVersion: apps/v1 					# 版本号
kind : ReplicaSet 					    # 类型
metadata:								# 元数据
  name : 								# rs名称
  namespace : 							# 所属命名空间
  labels:								# 标签
	controller : rs
spec:									# 详情描述
  replicas: 3 							# 副本数量
  selector: 							# 选择器,通过它指定该控制器管理哪些pod
    matchLabels :						# Labels匹配配规则
	  app: nginx-pod					# 匹配标签app值为nginx-pod的pod
    matchExpressions: 					# Expressions匹配规则
      - {key : app, operator : In, values : [nginx-pod ] }		# 指定一个就可以了
  template: 							# 模板,也就是定义pod的信息,当副本数量不足时,会根据下面的模板创建pod副本
    metadata :							# 元数据
	  labels :							# 定义标签与rs进行关联
        app: nginx-pod				
	spec:								# pod属性
      containers:						# 定义容器	
	  - name : nginx						# 容器名称
        image: nginx :1.17.1				# 镜像
	    ports :								# 端口号
		- containerPort : 80

3.2.Deployment控制器资源清单文件

apiVersion: apps/v1		 # 版本号
kind: Deployment 		# 控制器类型
metadata: 				# 定义元数据
  name: 					# deployment资源名称
  namespace: 					# 所属命名空间
  labels:					# 定义标签
    controller: deploy
spec: 						    # 定义资源属性
  replicas: 3					# 副本数量
  revisionHistoryLimit: 3		 # 保留历史版本,默认是1日
  paused: false 				# 暂停部署,默认是false,也就是deployment资源创建好之后,是否立刻运行pod,如果设置true,deployment资源创建好不会立即运行pod
  progressDeadlineSeconds: 688			 # 部署超时时间(s),默认是68日
  tolerations:					# 容忍度
  - key: "key1"
    operator: "Equal"			# 操作符为Exists时,不能指定value值
    value: "value1"
    effect: "NoSchedule"			# 此外还有NoExecute(驱逐影响目前运行着的pod)和PreferNoschedule(尽量阻止pod调度到该节点,除非没有其他节点可调用,说白了就是备胎xd.)
    tolerationSeconds: 6000			# 用于当某个pod运行所在的节点变成unready或者unreachable状态时,k8s可以等待该pod被调度到其他节点的最长等待时间,一般与effect的NoExecute共同使用
  strategy: 				# 策略
    type: RollingUpdate 		# 滚动更新策略
    rollingUpdate: 				# 滚动更新
      maxSurge: 30% 				# 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUn available: 30%			 # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  selector:							# 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					# Labels匹配规则
      app: nginx-pod
    matchExpressions: 					#  Expressions匹配规则
      - {key: app, operator: In, values: [nginx-pod] }
  template:							# 模板,当副本数量不足时,会根据下面的模板创建pod副本
      metadata:
        labels:
          app: nginx-podspec:
      containers:
      - name: nginx
        image: nginx:1.17.1ports:
        ports:
        - containerPort: 80
apiVersion: apps/v1		 # 版本号
kind: Deployment 		# 控制器类型
metadata: 				# 定义元数据
  name: 					# deployment资源名称
  namespace: 					# 所属命名空间
  labels:					# 定义标签
    controller: deploy
spec: 						    # 定义资源属性
  replicas: 3					# 副本数量
  revisionHistoryLimit: 3		 # 保留历史版本,默认是1日
  paused: false 				# 暂停部署,默认是false,也就是deployment资源创建好之后,是否立刻运行pod,如果设置true,deployment资源创建好不会立即运行pod
  progressDeadlineSeconds: 688			 # 部署超时时间(s),默认是68日
  tolerations:					# 容忍度
  - key: "key1"
    operator: "Equal"			# 操作符为Exists时,不能指定value值
    value: "value1"
    effect: "NoSchedule"			# 此外还有NoExecute(驱逐影响目前运行着的pod)和PreferNoschedule(尽量阻止pod调度到该节点,除非没有其他节点可调用,说白了就是备胎xd.)
    tolerationSeconds: 6000			# 用于当某个pod运行所在的节点变成unready或者unreachable状态时,k8s可以等待该pod被调度到其他节点的最长等待时间,一般与effect的NoExecute共同使用
  strategy: 				# 策略
    type: RollingUpdate 		# 滚动更新策略
    rollingUpdate: 				# 滚动更新
      maxSurge: 30% 				# 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUn available: 30%			 # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  selector:							# 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					# Labels匹配规则
      app: nginx-pod
    matchExpressions: 					#  Expressions匹配规则
      - {key: app, operator: In, values: [nginx-pod] }
  template:							# 模板,当副本数量不足时,会根据下面的模板创建pod副本
      metadata:
        labels:
          app: nginx-podspec:
      containers:
      - name: nginx
        image: nginx:1.17.1ports:
        ports:
        - containerPort: 80

3.3.HPA控制器资源清单文件

apiVersion: autoscaling/v1					# hpa支持的版本号
kind: HorizontalPodAutoscaler				# 类型为hpa
metadata:									# 元数据
  name: hpa-nginx							# hpa名称
  namespace: dev							# 所在的命名空间
spec:										# 属性
  minReplicas: 1								# 最少存活的pod数量
  maxReplicas: 10								# 最多存活的pod数量
  targetCPUUtilizationPercentage: 85	# 当CPU使用率达到多少指标时触发规则,这里的85表示85%,方便测试,实际生产中采用80-85%
  scaleTargetRef:								# 声明对那个资源进行控制
    apiVersion: apps/v1							# 资源的api版本
    kind: Deployment							# 资源类型
    name: deployment-nginx						# 资源名称
apiVersion: autoscaling/v1					# hpa支持的版本号
kind: HorizontalPodAutoscaler				# 类型为hpa
metadata:									# 元数据
  name: hpa-nginx							# hpa名称
  namespace: dev							# 所在的命名空间
spec:										# 属性
  minReplicas: 1								# 最少存活的pod数量
  maxReplicas: 10								# 最多存活的pod数量
  targetCPUUtilizationPercentage: 85	# 当CPU使用率达到多少指标时触发规则,这里的85表示85%,方便测试,实际生产中采用80-85%
  scaleTargetRef:								# 声明对那个资源进行控制
    apiVersion: apps/v1							# 资源的api版本
    kind: Deployment							# 资源类型
    name: deployment-nginx						# 资源名称

3.4.DaemonSet控制器资源清单文件

apiversion: apps/v1 				 # 版本号
kind: DaemonSet 					# 类型
metadata: 						    # 元数据
  name: 						    # 名称
  namespace:						# 所属命名空间
  labels: 							# 标签
    controller: daemonset
spec:								# 属性
  revisionHistoryLimit: 3		      # 保留历史版本
  updateStrategy :					 # 更新策略
    type: RollingUpdate 			  # 滚动更新
    rollingUpdate: 					  # 滚动更新策略
      maxUnavailable: 1 			   # 最大不可用状态的 Pod的最大值,可以为百分比,也可以为整数
  selector :						  # 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					   # Labels匹配规则
      app: nginx-pod
    matchExpressions: 					# Expressions匹配规则
    - {key: app, operator: In, values: [nginx-pod ]}
  template: 							# 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
	  labels:
		app: nginx-pod
    spec:
	  containers:
	  - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
apiversion: apps/v1 				 # 版本号
kind: DaemonSet 					# 类型
metadata: 						    # 元数据
  name: 						    # 名称
  namespace:						# 所属命名空间
  labels: 							# 标签
    controller: daemonset
spec:								# 属性
  revisionHistoryLimit: 3		      # 保留历史版本
  updateStrategy :					 # 更新策略
    type: RollingUpdate 			  # 滚动更新
    rollingUpdate: 					  # 滚动更新策略
      maxUnavailable: 1 			   # 最大不可用状态的 Pod的最大值,可以为百分比,也可以为整数
  selector :						  # 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					   # Labels匹配规则
      app: nginx-pod
    matchExpressions: 					# Expressions匹配规则
    - {key: app, operator: In, values: [nginx-pod ]}
  template: 							# 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
	  labels:
		app: nginx-pod
    spec:
	  containers:
	  - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80

3.5.Job控制器资源清单文件

apiVersion: batch/v1 				 # 版本号
kind: Job 							# 类型
metadata: 							# 元数据
  name: 							# 名称
  namespace: 						# 所属命名空间
  labels :							# 标签
    controller: job
spec: 							    # 详情描述
  completions: 1					# 指定job成功运行需要Pods的次数,默认值:1
  parallelism: 1					# 指定job在任一时刻应该并发运行Pods的数量,默认值:1
  activeDeadlineSeconds: 30 		 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
  backoffLimit: 6					# 指定job失败后进行重试的次数,默认是6
  manualSelector: true 				# 是否可以使用selector选择器选择pod,默认是false
  selector: 						# 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					# Labels匹配规则
      app: counter-pod
    matchExpressions: 				# Expressions[匹配规则
    - {key: app, operator: In, values: [ counter-pod]}
  template: 						# 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
	  labels:
		app: counter-pod
    spec:
      restartPolicy: Never 			# 重启策略只能设置为Never或者OnFailure
      containers:
	  - name: counter
	    image: busybox: 1.30
	    command: [ "bin/sh" , "-c" , "for i in 9 8 7 654 3 2 1; do echo $i;sleep 2;done" ]
apiVersion: batch/v1 				 # 版本号
kind: Job 							# 类型
metadata: 							# 元数据
  name: 							# 名称
  namespace: 						# 所属命名空间
  labels :							# 标签
    controller: job
spec: 							    # 详情描述
  completions: 1					# 指定job成功运行需要Pods的次数,默认值:1
  parallelism: 1					# 指定job在任一时刻应该并发运行Pods的数量,默认值:1
  activeDeadlineSeconds: 30 		 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
  backoffLimit: 6					# 指定job失败后进行重试的次数,默认是6
  manualSelector: true 				# 是否可以使用selector选择器选择pod,默认是false
  selector: 						# 选择器,通过它指定该控制器管理哪些pod
    matchLabels:					# Labels匹配规则
      app: counter-pod
    matchExpressions: 				# Expressions[匹配规则
    - {key: app, operator: In, values: [ counter-pod]}
  template: 						# 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
	  labels:
		app: counter-pod
    spec:
      restartPolicy: Never 			# 重启策略只能设置为Never或者OnFailure
      containers:
	  - name: counter
	    image: busybox: 1.30
	    command: [ "bin/sh" , "-c" , "for i in 9 8 7 654 3 2 1; do echo $i;sleep 2;done" ]

3.6.CronJob资源清单文件

apiVersion: batch/v1beta1 			 # 版本号
kind: CronJob 						# 类型
metadata: 						    # 元数据
name: 							# 名称
namespace: 						# 所属命名空间
labels:							# 标签
 controller: cronjob
spec:								# 属性
schedule: 						# cron格式的作业调度运行时间点,用于控制任务在什么时间执行
concurrencyPolicy: 				# 并发执行策略,用于定义前一次作业运行尚未完成时是否运行下一次的作业
failedJobHistoryLimit: 			# 为失败的任务执行保留的历史记录数,默认为1
successfulJobHistoryLimit: 		# 为成功的任务执行保留的历史记录数,默认为3
startingDeadlineSeconds: 			# 启动作业错误的超时时长
jobTemplate: 						# job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义
 metadata:
 spec:
   completions: 1
   parallelism: 1
   activeDeadlineSeconds: 30
   backoffLimit: 6
   manualSelector: true
   selector:
     matchLabels:
       app: counter-pod
     matchExpressions:				# 规则
        - { key: app, operator: In, values: [counter-pod ] }
	  template:
		metadata:
		  labels:
			app: counter-pod
		spec:
		  restartPolicy: Never
		  containers:
		  - name: counter
		    image: busybox: 1.30
		    command: [ "bin/sh" , "-c" , " for i in 98 7 654 3 2 1; do echo $i;sleep 2 ;done" ]
apiVersion: batch/v1beta1 			 # 版本号
kind: CronJob 						# 类型
metadata: 						    # 元数据
name: 							# 名称
namespace: 						# 所属命名空间
labels:							# 标签
 controller: cronjob
spec:								# 属性
schedule: 						# cron格式的作业调度运行时间点,用于控制任务在什么时间执行
concurrencyPolicy: 				# 并发执行策略,用于定义前一次作业运行尚未完成时是否运行下一次的作业
failedJobHistoryLimit: 			# 为失败的任务执行保留的历史记录数,默认为1
successfulJobHistoryLimit: 		# 为成功的任务执行保留的历史记录数,默认为3
startingDeadlineSeconds: 			# 启动作业错误的超时时长
jobTemplate: 						# job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义
 metadata:
 spec:
   completions: 1
   parallelism: 1
   activeDeadlineSeconds: 30
   backoffLimit: 6
   manualSelector: true
   selector:
     matchLabels:
       app: counter-pod
     matchExpressions:				# 规则
        - { key: app, operator: In, values: [counter-pod ] }
	  template:
		metadata:
		  labels:
			app: counter-pod
		spec:
		  restartPolicy: Never
		  containers:
		  - name: counter
		    image: busybox: 1.30
		    command: [ "bin/sh" , "-c" , " for i in 98 7 654 3 2 1; do echo $i;sleep 2 ;done" ]

3.7.StatefulSet资源清单文件

apiVersion: apps/v1							# api版本
kind: StatefulSet							# 资源类型
metadata:									# 定义元数据
  name: remote-storage						# 资源名称
  namespace: kube-system					# 所在的namespace
spec:									# 定义属性
  selector:								# 定义标签选择器,关联pod的标签
    matchLabels:					
      app: remote
  serviceName: "remote-storage"				# 定义serviceName,这个serviceName将会成为主机名
  replicas: 1								# 副本数
  template:									# pod模板信息
    metadata:
      labels:
        app: remote
    spec:
      containers:
      - name: remote-storage
        image: remote_storage_adapter:v2
        ports:
        - containerPort: 9201
          name: remote
apiVersion: apps/v1							# api版本
kind: StatefulSet							# 资源类型
metadata:									# 定义元数据
  name: remote-storage						# 资源名称
  namespace: kube-system					# 所在的namespace
spec:									# 定义属性
  selector:								# 定义标签选择器,关联pod的标签
    matchLabels:					
      app: remote
  serviceName: "remote-storage"				# 定义serviceName,这个serviceName将会成为主机名
  replicas: 1								# 副本数
  template:									# pod模板信息
    metadata:
      labels:
        app: remote
    spec:
      containers:
      - name: remote-storage
        image: remote_storage_adapter:v2
        ports:
        - containerPort: 9201
          name: remote

4.服务发现资源

4.1.service资源清单文件

kind: Service							# 资源类型
apiVersion: v1 							# 资源版本
metadata: 								# 元数据
  name: service 						# 资源名称
  namespace: dev 						# 所在的命名空间
spec: 									# 属性
  selector: 							# 标签选择器,用于确定当前service代理哪些pod
    app: nginx							# pod的标签
  type: 								# Service类型, 指定service的访问方式
  clusterIP:							# 虚拟服务的ip地址,即service地址
  sessionAffinity: 						# session亲和性,支持ClientIP、 None两个选项
  ports: 								# 端口信息 
    protocol: TCP
    port: 3017 							# service端口
    targetPort: 5003					 # pod端口
    nodePort: 31122 					# 映射的主机端口

kind: Service							# 资源类型
apiVersion: v1 							# 资源版本
metadata: 								# 元数据
  name: service 						# 资源名称
  namespace: dev 						# 所在的命名空间
spec: 									# 属性
  selector: 							# 标签选择器,用于确定当前service代理哪些pod
    app: nginx							# pod的标签
  type: 								# Service类型, 指定service的访问方式
  clusterIP:							# 虚拟服务的ip地址,即service地址
  sessionAffinity: 						# session亲和性,支持ClientIP、 None两个选项
  ports: 								# 端口信息 
    protocol: TCP
    port: 3017 							# service端口
    targetPort: 5003					 # pod端口
    nodePort: 31122 					# 映射的主机端口

4.2.ingress资源清单文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  ingressClassName:	<string>			# 定义使用哪种类型的ingress controllers
  tls:								# 定义域名绑定证书配置,只有通过https访问的方式才需要配置
    - hosts:						# 定义程序的域名列表
      - nginx.jiangxl.com
      - tomcat.jiangxl.com
      secretName: tls-secret		# 关联对应证书的secret资源
  rules:							# 定义ingress规则,用于关联对应的service资源
  - host: nginx.jiangxl.com				# 应用域名
    http:								# http方式
      paths:							# 定义要访问的路径
      - path: /							# 定义访问路径
        backend:						# 关联对应的service资源
          serviceName: nginx-service		# 对应的service名称
          servicePort: 80					# 对应的service端口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  ingressClassName:	<string>			# 定义使用哪种类型的ingress controllers
  tls:								# 定义域名绑定证书配置,只有通过https访问的方式才需要配置
    - hosts:						# 定义程序的域名列表
      - nginx.jiangxl.com
      - tomcat.jiangxl.com
      secretName: tls-secret		# 关联对应证书的secret资源
  rules:							# 定义ingress规则,用于关联对应的service资源
  - host: nginx.jiangxl.com				# 应用域名
    http:								# http方式
      paths:							# 定义要访问的路径
      - path: /							# 定义访问路径
        backend:						# 关联对应的service资源
          serviceName: nginx-service		# 对应的service名称
          servicePort: 80					# 对应的service端口

5.数据存储资源

5.1.EmptyDir资源清单文件

apiVersion: v1
kind: Pod
metadata:
  name: volume-emptydir
  namespace: dev
spec:
  containers:								# 定义容器列表
  - name: nginx								# 容器的名称
    image: nginx:1.17.1						# 容器使用的镜像版本
    ports:									# 定义端口号
    - containerPort: 80
    volumeMounts:							# 定义volume挂载信息,将logs-volume挂载到容器的/var/log/nginx路径
    - name: logs-volume						# volume的名称
      mountPath: /var/log/nginx				# 挂载到容器的指定路径
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]		# busybox初始命令,动态读取volume挂载路径下的文件内容
    volumeMounts:							# 将logs-volume挂载到容器的/logs路径
    - name: logs-volume
      mountPath: /logs
  volumes:								# 定义volume信息
  - name: logs-volume					# volume名称
    emptyDir: {}						# 使用的volume类型为emptydir,{}不可省略
apiVersion: v1
kind: Pod
metadata:
  name: volume-emptydir
  namespace: dev
spec:
  containers:								# 定义容器列表
  - name: nginx								# 容器的名称
    image: nginx:1.17.1						# 容器使用的镜像版本
    ports:									# 定义端口号
    - containerPort: 80
    volumeMounts:							# 定义volume挂载信息,将logs-volume挂载到容器的/var/log/nginx路径
    - name: logs-volume						# volume的名称
      mountPath: /var/log/nginx				# 挂载到容器的指定路径
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]		# busybox初始命令,动态读取volume挂载路径下的文件内容
    volumeMounts:							# 将logs-volume挂载到容器的/logs路径
    - name: logs-volume
      mountPath: /logs
  volumes:								# 定义volume信息
  - name: logs-volume					# volume名称
    emptyDir: {}						# 使用的volume类型为emptydir,{}不可省略

5.2.HostPath资源清单文件

[root@k8s-master ~/k8s_1.19_yaml]\# vim volume-hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-hostpath
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]
    volumeMounts:				# 定义挂载那些volume卷
    - name: logs-volume				# volume名称
      mountPath: /logs				# 挂载到容器的哪个路径
  volumes:
  - name: logs-volume
    hostPath:					# 指定volume类型为hostPath
      path: /root/logs				# 指定node节点上的路径,为容器提供挂载点
      type: DirectoryOrCreate			# 针对路径做得类型,DirectoryOrCreate表示当路径不存在时则创建
[root@k8s-master ~/k8s_1.19_yaml]\# vim volume-hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: volume-hostpath
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]
    volumeMounts:				# 定义挂载那些volume卷
    - name: logs-volume				# volume名称
      mountPath: /logs				# 挂载到容器的哪个路径
  volumes:
  - name: logs-volume
    hostPath:					# 指定volume类型为hostPath
      path: /root/logs				# 指定node节点上的路径,为容器提供挂载点
      type: DirectoryOrCreate			# 针对路径做得类型,DirectoryOrCreate表示当路径不存在时则创建

5.3.NFS类型的资源清单文件

apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]
    volumeMounts:
    - name: logs-volume
      mountPath: /logs	
  volumes:								# 定义存储卷
  - name: logs-volume						# 指定存储卷的名称
    nfs:									# 类型为nfs
      server: 192.168.81.210					# nfs服务器地址
      path: /data/k8s_data						# nfs提供的共享路径
apiVersion: v1
kind: Pod
metadata:
  name: volume-nfs
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]
    volumeMounts:
    - name: logs-volume
      mountPath: /logs	
  volumes:								# 定义存储卷
  - name: logs-volume						# 指定存储卷的名称
    nfs:									# 类型为nfs
      server: 192.168.81.210					# nfs服务器地址
      path: /data/k8s_data						# nfs提供的共享路径

5.4.PV资源清单文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  nfs:								# 存储类型,不同的存储类型配置都不相同,nfs则填写nfs
  capacity:								# 存储能力,目前只支持存储空间的设置
  storage: 2Gi						# 具体的存储大小
  accessModes:							# 访问模式
  storageClassName:							# 存储类别
  persistentVolumeReclaimPolicy:				# 回收策略
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  nfs:								# 存储类型,不同的存储类型配置都不相同,nfs则填写nfs
  capacity:								# 存储能力,目前只支持存储空间的设置
  storage: 2Gi						# 具体的存储大小
  accessModes:							# 访问模式
  storageClassName:							# 存储类别
  persistentVolumeReclaimPolicy:				# 回收策略

5.5.PVC资源清单文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes:				# 访问模式
  selector:						# 采用标签选择具体的pv
  storageClassName:					# 存储类别
  resources:					# 请求空间
    requests:
      storage: 5Gi				# 具体的请求大小
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes:				# 访问模式
  selector:						# 采用标签选择具体的pv
  storageClassName:					# 存储类别
  resources:					# 请求空间
    requests:
      storage: 5Gi				# 具体的请求大小

6.配置资源

6.1.configmap资源清单文件

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
  namespace: dev
data:						# configmap配置文件里面,不再有spec,而是data
  filename1: |					# 文件和内容的关系相当于一个键值对,filename表示文件的名称 |必须要有,固定写法
  	neirong1						# 具体的内容,所有内容都要和filename保持至少2个空格的对齐
  	neirong2
  filename2: |				# configmap可以同时定义多个文件的内容,接着往下写即可,一般还是一个cm定义一个配置文件,因为pod挂载是以目录进行挂载的,除非两个文件都在一个路径
  	xxxxxxxx
 
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap
  namespace: dev
data:						# configmap配置文件里面,不再有spec,而是data
  filename1: |					# 文件和内容的关系相当于一个键值对,filename表示文件的名称 |必须要有,固定写法
  	neirong1						# 具体的内容,所有内容都要和filename保持至少2个空格的对齐
  	neirong2
  filename2: |				# configmap可以同时定义多个文件的内容,接着往下写即可,一般还是一个cm定义一个配置文件,因为pod挂载是以目录进行挂载的,除非两个文件都在一个路径
  	xxxxxxxx
 

6.2.secret资源清单文件

apiVersion: v1
kind: Secret					# 资源类型为Secret
metadata:
  name: admin-secret
  namespace: dev
type: Opaque					# 类型为Opaque,Opaque主要存储base64加密后的密码文件
data:							# 定义数据
  username: YWRtaW4=			# username为文件名称,YWRtaW4=为文件内容
  password: MTIzNDU2
apiVersion: v1
kind: Secret					# 资源类型为Secret
metadata:
  name: admin-secret
  namespace: dev
type: Opaque					# 类型为Opaque,Opaque主要存储base64加密后的密码文件
data:							# 定义数据
  username: YWRtaW4=			# username为文件名称,YWRtaW4=为文件内容
  password: MTIzNDU2

7.RBAC访问授权资源

7.1.Role资源清单文件

# Role只能对命名空间内的资源进行授权,需要指定namespace

apiVersion: rbac.authorization.k8s.io/v1beta1				# 资源api地址
kind: Role												# 控制器类型
metadata:												# 元数据
  name: authorization-role								# 资源名称
  namespace: dev										# 资源所在命名空间
rules:													# 定义角色
- apiGroups: [""]										# 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
  resources: ["pods"]										# 支持的资源对象列表,对那些资源进行操作
  verbs: ["get","watch","list"]							# 允许对资源对象的操作权限
# Role只能对命名空间内的资源进行授权,需要指定namespace

apiVersion: rbac.authorization.k8s.io/v1beta1				# 资源api地址
kind: Role												# 控制器类型
metadata:												# 元数据
  name: authorization-role								# 资源名称
  namespace: dev										# 资源所在命名空间
rules:													# 定义角色
- apiGroups: [""]										# 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
  resources: ["pods"]										# 支持的资源对象列表,对那些资源进行操作
  verbs: ["get","watch","list"]							# 允许对资源对象的操作权限

7.2.ClusterRole资源清单文件

# ClusterRole可以对集群内所有namespace下的资源进行授权,跨namespace、非资源对象都可以进行授权

apiVersion: rbac.authorization.k8s.io/v1beta1				# 资源api地址
kind: CLusterRole										# 控制器类型
metadata:												# 元数据
  name: authorization-clusterrole						# 资源名称
rules:													# 定义角色
- apiGroups: [""]									# 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
  resources: ["pods"]										# 支持的资源对象列表,对那些资源进行操作
  verbs: ["get","watch","list"]							# 允许对资源对象的操作权限
# ClusterRole可以对集群内所有namespace下的资源进行授权,跨namespace、非资源对象都可以进行授权

apiVersion: rbac.authorization.k8s.io/v1beta1				# 资源api地址
kind: CLusterRole										# 控制器类型
metadata:												# 元数据
  name: authorization-clusterrole						# 资源名称
rules:													# 定义角色
- apiGroups: [""]									# 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作
  resources: ["pods"]										# 支持的资源对象列表,对那些资源进行操作
  verbs: ["get","watch","list"]							# 允许对资源对象的操作权限

7.3.RoleBinding资源清单文件

# RoleBinding可以将subjects定义的用户绑定在同一namespace中的role角色上,仅仅只能是同一namespace种的role

apiVersion: rbac.authorization.k8s.io/v1beta1			# 资源api地址
kind: RoleBinding										# 控制器类型
metadata:												# 元数据
  name: authorization-rolebinding						# 控制器名称
  namespace: dev										# 所在的namespace
subjects:												# 关联用户信息
- kind: User											# 用户的类型,可以是user、group、serviceaccount
  name: jiangxl											# 对应的用户名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
  namespace: dev										# 用户能控制的namespace
roleRef:											# 关联角色信息
  kind: Role										# 类型为角色
  name: authorization-role								# 对应的role名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
  
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对dev命名空间下pod资源get、list、watch权限
# RoleBinding可以将subjects定义的用户绑定在同一namespace中的role角色上,仅仅只能是同一namespace种的role

apiVersion: rbac.authorization.k8s.io/v1beta1			# 资源api地址
kind: RoleBinding										# 控制器类型
metadata:												# 元数据
  name: authorization-rolebinding						# 控制器名称
  namespace: dev										# 所在的namespace
subjects:												# 关联用户信息
- kind: User											# 用户的类型,可以是user、group、serviceaccount
  name: jiangxl											# 对应的用户名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
  namespace: dev										# 用户能控制的namespace
roleRef:											# 关联角色信息
  kind: Role										# 类型为角色
  name: authorization-role								# 对应的role名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
  
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对dev命名空间下pod资源get、list、watch权限

7.4.CLusterRoleBinding资源清单文件

# ClusterRoleBinding可以在整个集群级别和所有namespace中,将特定的subject与ClusterRoleBinding进行绑定授予权限,这样一来这个角色就拥有就集群级别资源的操作权限

apiVersion: rbac.authorization.k8s.io/v1beta1			# 资源api地址
kind: RoleBinding										# 控制器类型
metadata:												# 元数据
  name: authorization-rolebinding						# 控制器名称
subjects:												# 关联用户信息
- kind: User											# 用户的类型,可以是user、group、serviceaccount
  name: jiangxl											# 对应的用户名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
roleRef:											# 关联角色信息
  kind: ClusterRole										# 类型为集群角色
  name: authorization-clusterrole								# 对应的role名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io

# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对集群级别以及所有命名空间下pod资源get、list、watch权限
# ClusterRoleBinding可以在整个集群级别和所有namespace中,将特定的subject与ClusterRoleBinding进行绑定授予权限,这样一来这个角色就拥有就集群级别资源的操作权限

apiVersion: rbac.authorization.k8s.io/v1beta1			# 资源api地址
kind: RoleBinding										# 控制器类型
metadata:												# 元数据
  name: authorization-rolebinding						# 控制器名称
subjects:												# 关联用户信息
- kind: User											# 用户的类型,可以是user、group、serviceaccount
  name: jiangxl											# 对应的用户名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
roleRef:											# 关联角色信息
  kind: ClusterRole										# 类型为集群角色
  name: authorization-clusterrole								# 对应的role名称
  apiGroup: rbac.authorization.k8s.io				# api组,持有引用主题的api组,默认为rbac.authorization.k8s.io

# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对集群级别以及所有命名空间下pod资源get、list、watch权限

8. LimitRange/ResourceQuota资源限制

名称空间级别资源,创建该资源时需要指定命名空间,如:kubectl apply -f </PATH/TO/YOUR_YAML_FILE> --namespace=<YOUR_NAMESPACE>

8.1 LimitRange资源清单文件

# LimitRange用于限制命令空间中单个pod的资源使用情况,对象是个体

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi				# 默认为命名空间中pod所分配的limits.memory内存
      cpu: 1					# 默认为命名空间中pod所分配的limits.cpu大小
    defaultRequest:
      memory: 256Mi				# 默认为命名空间中pod所分配的requests.memory内存
      cpu: 0.5					# 默认为命名空间中pod所分配的limits.cpu大小
    max:						# 最大资源限制
      memory: 1Gi
      cpu: "1000m"
    min:						# 最小资源限制
      memory: 1000Mi
      cpu: "500m"
    type: Container

# 更新limitrange,不会影响之前的pod
# LimitRange用于限制命令空间中单个pod的资源使用情况,对象是个体

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi				# 默认为命名空间中pod所分配的limits.memory内存
      cpu: 1					# 默认为命名空间中pod所分配的limits.cpu大小
    defaultRequest:
      memory: 256Mi				# 默认为命名空间中pod所分配的requests.memory内存
      cpu: 0.5					# 默认为命名空间中pod所分配的limits.cpu大小
    max:						# 最大资源限制
      memory: 1Gi
      cpu: "1000m"
    min:						# 最小资源限制
      memory: 1000Mi
      cpu: "500m"
    type: Container

# 更新limitrange,不会影响之前的pod

8.2 ResourceQuota资源清单文件

# ResourceQuota用于限制整个工作空间的资源使用情况,对象是整个命名空间

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:		# 在指定命名空间下,限制每个容器必须有内存请求和限制,以及cpu请求和限制大小,并且所有cpu请求总和不能够超过2cpu,其他以此类推
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    # 以下是对api对象资源进行的配额,按需分配,以下仅做演示
	persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"
    replicationcontrollers: "1"
	resourcequotas: "1"
	pods: "10"
	secrets: "2"
    configmaps: "2"
# ResourceQuota用于限制整个工作空间的资源使用情况,对象是整个命名空间

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:		# 在指定命名空间下,限制每个容器必须有内存请求和限制,以及cpu请求和限制大小,并且所有cpu请求总和不能够超过2cpu,其他以此类推
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    # 以下是对api对象资源进行的配额,按需分配,以下仅做演示
	persistentvolumeclaims: "1"
    services.loadbalancers: "2"
    services.nodeports: "0"
    replicationcontrollers: "1"
	resourcequotas: "1"
	pods: "10"
	secrets: "2"
    configmaps: "2"

9. 综合示例

sample1:

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: test-yaml
  name: test-yaml
  namespace: freeswitch
spec:
  ports:
  - name: container-1-web-1
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test-yaml
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  creationTimestamp: null
  name: test-yaml
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: test-yaml
          servicePort: 8080
        path: /
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-yaml
  name: test-yaml
  namespace: freeswitch
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-yaml
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      annotations:
        info: test for yaml
      labels:
        app: test-yaml
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - test-yaml
              topologyKey: kubernetes.io/hostname
            weight: 100
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: LANG
          value: C.UTF-8
        image: nginx
        imagePullPolicy: Always
        lifecycle: {}
        livenessProbe:
          failureThreshold: 2
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        name: test-yaml
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        readinessProbe:
          failureThreshold: 2
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        resources:
          limits:
            cpu: 195m
            memory: 375Mi
          requests:
            cpu: 10m
            memory: 10Mi
        securityContext:
          allowPrivilegeEscalation: false
          capabilities: {}
          privileged: false
          procMount: Default
          readOnlyRootFilesystem: false
          runAsNonRoot: false
        volumeMounts:
        - mountPath: /usr/share/zoneinfo/Asia/Shanghai
          name: tz-config
        - mountPath: /etc/localtime
          name: tz-config
        - mountPath: /etc/timezone
          name: timezone
      dnsPolicy: ClusterFirst
      hostAliases:
      - hostnames:
        - www.baidu.com
        ip: 114.114.114.114
      imagePullSecrets:
      - name: myregistrykey
      - name: myregistrykey2
      restartPolicy: Always
      securityContext: {}
      volumes:
      - hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
          type: ""
        name: tz-config
      - hostPath:
          path: /etc/timezone
          type: ""
        name: timezone
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: test-yaml
  name: test-yaml
  namespace: freeswitch
spec:
  ports:
  - name: container-1-web-1
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test-yaml
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  creationTimestamp: null
  name: test-yaml
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: test-yaml
          servicePort: 8080
        path: /
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-yaml
  name: test-yaml
  namespace: freeswitch
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-yaml
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      annotations:
        info: test for yaml
      labels:
        app: test-yaml
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - test-yaml
              topologyKey: kubernetes.io/hostname
            weight: 100
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: LANG
          value: C.UTF-8
        image: nginx
        imagePullPolicy: Always
        lifecycle: {}
        livenessProbe:
          failureThreshold: 2
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        name: test-yaml
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        readinessProbe:
          failureThreshold: 2
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        resources:
          limits:
            cpu: 195m
            memory: 375Mi
          requests:
            cpu: 10m
            memory: 10Mi
        securityContext:
          allowPrivilegeEscalation: false
          capabilities: {}
          privileged: false
          procMount: Default
          readOnlyRootFilesystem: false
          runAsNonRoot: false
        volumeMounts:
        - mountPath: /usr/share/zoneinfo/Asia/Shanghai
          name: tz-config
        - mountPath: /etc/localtime
          name: tz-config
        - mountPath: /etc/timezone
          name: timezone
      dnsPolicy: ClusterFirst
      hostAliases:
      - hostnames:
        - www.baidu.com
        ip: 114.114.114.114
      imagePullSecrets:
      - name: myregistrykey
      - name: myregistrykey2
      restartPolicy: Always
      securityContext: {}
      volumes:
      - hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
          type: ""
        name: tz-config
      - hostPath:
          path: /etc/timezone
          type: ""
        name: timezone

此文章基于该博客进行修改和增删: https://blog.csdn.net/weixin_44953658/article/details/116161926