K8s yaml文件中常用字段说明

本文详细解释了Kubernetes YAML文件中的关键字段,包括apiVersion、kind、metadata、spec及其子字段,如restartPolicy、nodeSelector、containers的配置,如image、command、volumeMounts和resources的CPU与内存限制。这些字段对于理解和配置K8s资源至关重要。

常用字段解释

apiVersion(string) : 表示API的版本号。根据集群的版本输入,1.17及以上版本的集群中无状态应用apiVersion格式为apps/v1, 1.15及以下版本的集群中无状态应用apiVersion格式为extensions/v1beta1
kind(string): 指定资源类型,如Pod,Deploymentm,Service等
metadata(object): 自定义metadata
metadata.name(string): deployment的名称
metadata.labels(可选): 为对象添加Label
metadata.namespace(可选):对象的命名空间,由用户自定义
spec(object): 对象的详细信息
spec.restartPolicy(string): pod重启策略。Always: pod一旦退出就要进行重启,OnFailure:只要非正常退出才进行重启, Never: 退出后不再拉起
spec.hostNetwork(bool): 是否使用主机网络,默认值为false,设置为true,表示与主机在同一个网络空间
spec.nodeSelector(object): 标签选择器,k-v形式
spec.containers[](list) : 容器对象列表
spec.containers[].name(string): 容器的名称
spec.containers[].image(string): 容器使用的镜像
spec.containers[].imagePullPolicy(string): Always(每次都重新下载)、IfNotPresent(如果本地存在则使用本地镜像,不重新拉取)、Never(表示仅使用本地镜像)
spec.containers[].command[](list):指定容器启动命令,可以是多个命令,如果不指定则使用镜像中启动命令
spec.containers[].args[](list):启动命令参数,可以多个
spec.containers[].workingDir(string):容器的工作目录
spec.containers[].volumeMounts[](list):指定容器的挂载卷,可以多个
spec.containers[].volumeMounts[].name(string):挂载卷名称
spec.containers[].volumeMounts[].mountPath(string):挂载卷路径
spec.containers[].volumeMounts[].readOnly(bool):读写模式,true只读(默认值),false读写
spec.containers[].ports[](list):容器用到端口
spec.containers[].ports[].name(string): 端口名称
spec.containers[].ports[].containerPort(number):端口号
spec.containers[].ports[].hostPort(number):指定host主机使用端口。主要适用于端口映射,默认值是和容器内端口相同
spec.containers[].resources(object):用于设置资源限制和资源请求
spec.containers[].resources.limits.cpu(string):对cpu的限制,k8s将一个逻辑cpu划分为1000个millicore(毫核)。例如 limits.cpu=500m相当于0.5个cpu。limits.cpu=2表示占用2个cpu
spec.containers[].resources.limits.memory(string):对内存的限制
spec.containers[].resources.requests(object):容器启动和调度时的限制设置
spec.containers[].resources.requests.cpu(string):对cpu的限制,k8s将一个逻辑cpu划分为1000个millicore(毫核)。例如 limits.cpu=500m相当于0.5个cpu。limits.cpu=2表示占用2个cpu
spec.containers[].resources.requests.memory(string):对内存的限制

示例

apiVersion: extensions/v1beta1   #  指定api版本,此值必须在kubectl apiversion中
kind: Pod    #  指定创建资源的角色/类型
metadata:    # 资源的元数据/属性
    name: web04-pod   #  资源的名字,在同一个namespace中必须唯一
    labels:                     #   设定资源的标签
        k8s-app: apache
        version: v1
        kubernetes.io/cluster-service: "true"
    annotations:           #   自定义注解列表
        - name: String    #  自定义注解名字
spec:     #  指定该资源的内容
	restartPolicy:  Always   #  表明该容器一直运行,默认k8s的策略,在此容器退出后,会立刻创建一个相同的容器
	nodeSelector:    #  节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
		zone: node1 
	containers:
		- name: web04-pod  #  容器的名字
		  image: webapache   #  容器使用的镜像地址
		  imagePullPolicy: Never  # 三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
		                          # Always,每次都检查
		                          # Never,每次都不检查(不管本地是否有)
		                          # IfNotPresent,如果本地有就不检查,如果没有就拉取
		  command: ['sh']   # 启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockfile中的ENTRYPOINT
		  args: ["$(str)"]  # 启动容器的命令参数,对应Dockerfile中CMD参数
		  env:   # 指定容器中的环境变量
		  - name : str  #  变量的名字
		    value: "/etc/run.sh"  #变量的值
		  resources:  # 资源管理
		     requests:    # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
		     	cpu: 0.1  # CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
		     	memory: 32Mi   #  内存使用量
		     limits:   # 资源限制
		     	cpu: 0.5
		     	memory: 32Mi
		  ports:
		  - containerPort: 80  # 容器开发对外的端口
		    name: httpd   # 名称
		    protocol: TCP   
		  livenessProbe:  # pod内容器健康检查的设置
		  	httpGet:   # 通过httpget检查健康,返回200-399之间,则认为容器正常
		  		path: /   # URI地址
		  		port: 80 
		  		host: 127.0.0.1   # 主机地址
		  		scheme   # HTTP
		  	initialDelaySeconds: 180   # 表明第一次检测在容器启动后多长时间后开始
		  	timeoutSeconds: 5  #  检测的超时时间
		  	periodSeconds: 15  #  检查间隔时间
		  	# 也可以用这种方法
		  	# exec:  # 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
		  	#   command:
		  	#      - cat
		  	#      - /tmp/health
		  	# 也可以用这种方法
		  	# tcpSocket:   // 通过tcpSocket检查健康
		  	#	port: number
          lifecycle:    # 生命周期管理
            postStart:   # 容器运行之前运行的任务
                exec:
                  command:
                    - 'sh'
                    - 'yum upgrade -y'
            preStop:   #  容器关闭之前运行的任务
                exec:
                  command: ['service httpd stop']
          volumeMounts:  
          - name: volume  # 挂载设备的名字,与volumes[*].name 需要对应
            mountPath: /data   # 挂载到容器的某个路径下
            readOnly: True
    volumes:   #  定义一组挂载设备
        - name: volume   # 定义一个挂载设备的名字
          # meptyDir: {}
          hostPath:
          	path: /opt   #  挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值