三、kubernetes 集群 YAML 文件详解

网友投稿 369 2022-10-21

三、kubernetes 集群 YAML 文件详解

1. 简单说明

是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。

2. 基本语法

缩进时不允许使用Tab键,只允许使用空格缩进时空格数目不重要,只要相同层级的元素左侧对齐即可#标识注释,从这个字节一直到行尾,都会被解释器忽略使用—表示新的yaml文件开始

3. YAML支持的数据结构

对象:键值对的集合,又称为映射(mapping)、哈希(hashes)/字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence)/ 列表 (list)纯量(scalars):单个的,不可再分的值

4. K8S YAML字段

4.1必须存在的属性

参数名称

字段类型

说明

version

String

这里是指的K8S API版本。目前基本上是v1,可以使用kubectl api-versions 命令查询

kind

String

这里指的时yaml文件定义的资源类型和角色,比如:Pod

metadata

Object

元数据对象,固定值就写metadata

metadata.name

String

元数据对象的名字,这里由我们编写,比我命名Pod的名字

metadata.namespace

String

元数据对象的命名空间,有我们自身定义

Spec

Object

详细定义对象,固定值就写spec

spec.containers[]

list

这里时spec对象的容器列表定义,是个列表

Spec.containers[].name

String

这里定义容器的名字

spec.containers[].image

String

这里定义要用到的镜像名称

4.2 主要对象

参数名称

字段类型

说明

spec.containers[].name

String

定义容器的名字

spec.containers[].image

定义要用到的镜像名称

spec.containers[].imagePullPolicy

定义镜像拉取策略,有Always(每次都尝试重新拉取镜像)、Nerver(表示仅适用本地镜像)、IfNotPresent(如果本地有镜像就是用本地镜像,如果没有就拉取在线镜像)三个值可选。默认值是Always

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

String

设置存储卷路径的读写模式,true或者false,默认未读写模式

spec.containers[].ports[].

List

指定容器需要用到的端口列表

spec.containers[].ports[].name

String

指定端口名称

spec.containers[].ports[].containerPort

String

指定容器需要监听的端口号

spec.containers[].ports[]/hostPort

String

指定容器锁在主机需要坚挺的端口号,默认跟上面containerPort相同,注意设置hostPort同一台主机无法启动该容器的相同副本,(因为主机的端口号不能相同,这样会冲突)

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的闲置,单位为core数,将用于docker run --cpu-shares参数(这里前面文件Pod。)

spec.containers[].resources.limits.memory

String

指定MEM内存的闲置,单位为MIB,GIB

spec.containers[].resources.requests

Object

指定容器启动和调度时闲置设置

spec.containers[].resources.requests.cpu

String

CPU请求,单位core数,容器启动时初始化可用数量

spec.containers[].resources.requests.memory

String

内存请求,单位为MiB,GiB,容器启动时初始可用数量

spec.restartPolicy

String

定义Pod的重启策略,可选值为Always,OnFailure,默认值为Always。 1.Always:Pod一旦终止运行,则无论容器时如何终止的,kubelet服务都讲重启它。2.OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器,如果容器正常结束(退出码为0),泽kubelet将不会重启它。3.Never:Pod终止后,kubelet将退出码报告给Master,不会重启该Pod。

spec.nodeSelector

Object

定义Node的Label过滤标签。以key:value

spec.imagePullSecrets

Object

定义Pull镜像时使用secret名称,以name:secretkey格式指定

spec.hostNetwork

Boolean

定义是否使用网络模式,默认值为false。设置true表示使用宿主机网络,不实用docker网桥,同事设置了true将无法在同一台宿主机上启动第二个副本。

5.如何快速编写yaml文件

5.1 使用kubectl create命令生成yaml文件

kubectl create deployment web --image=nginx -o yaml --dry-run > my1.yamldry-run #不启动改Pod-o #输入yaml文件

5.2 使用kubectl get 命令导出Pod的yaml文件

kubectl get deploy nginx -o yaml > my.yaml

各种实例资源YAML文件手册

1.glusterfsPV.yaml

1.1 endpoint. yaml

apiVersion: v1kind: Endpointsmetadata: ------------------------------------#元数据 name: glusterfs ----------------------------#ep名称 namespace: default -------------------------#命名空间subsets: -------------------------------------#配置glusterfs连接信息- addresses: ---------------------------------#添加glusterfs分布式地址 - ip: 10.0.0.14 - ip: 10.0.0.15 - ip: 10.0.0.16 ports: -------------------------------------#设定glusterfs服务端口 - port: 49152 protocol: TCP

1.2 glusterfs server. yaml

apiVersion: v1kind: Servicemetadata: name: glusterfs namespace: defaultspec: ports: - port: 49152 protocol: TCP targetPort: 49152 sessionAffinity: None ----------------------#是否支持session type: ClusterIP

2.PV.yaml

apiVersion: v1kind: PersistentVolumemetadata: -------------------------------------#元数据 name: tomcat-mysql --------------------------#pv名称 labels: -------------------------------------#标签信息 xxx: xxx spec: -----------------------------------------#定义pv模板 capacity: -----------------------------------#定义pv容量 storage: 10Gi accessModes: --------------------------------#访问模型;对象列表 #ReadWriteOnce一人读写 #ReadOnlyMany 多人只读 #ReadWriteMany多人读写 - ReadWriteMany persistentVolumeReclaimPolicy: Recycle ------#pvc解除绑定后,数据操作 #默认是Retain保留生成的数据、 #recycle回收 #delete,删除========================================================================================= #nfs: 类型 nfs: ---------------------------------------#nfs挂载类型 path: "/data/tomcat" ----------------------#nfs服务目录 server: 172.16.20.101 ---------------------#nfs服务地址 readOnly: false ---------------------------#关闭只读========================================================================================= #glusterfs:分布式类型 注意:使用glusterfs 需要提交部署endpoint服务 glusterfs: -------------------------------#glusterfs挂载类型 endpoints: "glusterfs" --------------------#端点类型 请保持与glusterfs ep服务名称一致。 path: "qiangge" ---------------------------#挂载目录 glusterfs文件名称 readOnly: false ---------------------------#关闭只读

3.PVC.yaml

apiVersion: v1kind: PersistentVolumeClaimmetadata: -------------------------------------#元数据 name: html ----------------------------------#pvc名称 namespace: xxxx -----------------------------#命名空间spec: -----------------------------------------#pvc模板 selector: -----------------------------------#标签选择器 matchLabels: -----------------------------#必须与pv标签信息一致才可关联 如果不指定则随机匹配pv xxx: xxx accessModes: --------------------------------#访问模型;对象列表 #ReadWriteOnce一人读写 #ReadOnlyMany 多人只读 #ReadWriteMany多人读写 - ReadWriteMany resources: ----------------------------------#资源信息 requests: ---------------------------------#请求容量 storage: 99Gi storageClassName: xxxx -----------------#存储类名称 注意1.5.2版本不可用 volumeMode: Filesystem ----------------------#卷模式为文件系统 注意1.5.2版本不可用 volumeName: pvc-ff926bb2-3029-4a08-b123-31a2ad1b6a19 --#卷名称

4.Deployment.yaml

apiVersion: extensions/v1beta1kind: Deploymentmetadata: ----------------------------------------#元数据 annotations: -------------------------------------#注释信息 deployment.kubernetes.io/revision: '1' k8s.kuboard.cn/ingress: 'false' k8s.kuboard.cn/service: NodePort k8s.kuboard.cn/workload: nextcloud labels:-------------------------------------------#标签信息 k8s.kuboard.cn/layer: '' k8s.kuboard.cn/name: nextcloud name: nextcloud-----------------------------------#名称 namespace: nextcloud------------------------------#命名空间 spec:-----------------------------------------------#定义容器模板,该模板可以包含多个容器 replicas: 3---------------------------------------#副本数量 selector:-----------------------------------------#标签选择器 matchLabels: k8s.kuboard.cn/layer: '' k8s.kuboard.cn/name: nextcloud strategy:-----------------------------------------#滚动升级策略 type: RollingUpdate-----------------------------#类型 rollingUpdate:----------------------------------#由于replicas为3,则整个升级,pod个数在2-4个之间 maxSurge: 25%---------------------------------#滚动升级时会先启动25%pod maxUnavailable: 25%---------------------------#滚动升级时允许的最大Unavailable的pod个数 template: #镜像模板 metadata: ------------------------------------#元数据 labels:---------------------------------------#标签 k8s.kuboard.cn/layer: '' k8s.kuboard.cn/name: nextcloud spec: ------------------------------------------#定义容器模板,该模板可以包含多个容器 containers: ----------------------------------#容器信息 - name: nextcloud --------------------------#容器名称 image: '172.16.20.100/library/nextcloud:yan' #镜像名称 imagePullPolicy: Always ------------------#镜像下载策略 ports: - name: containerPort: 80 protocol: TCP env resources: -------------------------------#CPU内存限制 limits: --------------------------------#限制cpu内存 cpu: 200m memory: 200m requests: ------------------------------#请求cpu内存 cpu: 100m memory: 100m securityContext: -------------------------#安全设定 privileged: true -----------------------#开启享有特权 volumeMounts: ----------------------------#挂载volumes中定义的磁盘 - name: html ---------------------------#挂载容器1 mountPath: /var/ - name: session ------------------------#挂载容器1 mountPath: /var/lib/php/session volumes: ------------------------------------#在该pod上定义共享存储卷列表 - name: html -------------------------------#共享存储卷名称 (volumes类型有很多种) persistentVolumeClaim: -------------------#volumes类型为pvc claimName: html -----------------------#关联pvc名称 - name: session persistentVolumeClaim: claimName: session restartPolicy: Always ------------------------#Pod的重启策略 #Always表示一旦不管以何种方式终止运行, #kubelet都将重启, #OnFailure表示只有Pod以非0退出码退出才重启, #Nerver表示不再重启该Pod schedulerName: default-scheduler -------------#指定pod调度到节点

5.Pod.yaml

apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: django-pod #资源的名字,在同一个namespace中必须唯一 labels: #设定资源的标签,使这个标签在service网络中备案,以便被获知 k8s-app: django version: v1 kubernetes.io/cluster-service: "true" annotations: #设置自定义注解列表 - name: String #设置自定义注解名字 spec: #设置该资源的内容 restartPolicy: Always #表示自动重启,一直都会有这个容器运行 nodeSelector: #选择node节点14 zone: node1 containers: - name: django-pod #容器的名字 image: django:v1.1 #容器使用的镜像地址 imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略, # Always,每次都检查 # Never,每次都不检查(不管本地是否有) # IfNotPresent,如果本地有就不检查,如果没有就拉取 command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的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: 8080 #容器开发对外的端口 name: uwsgi #名称 protocol: TCP livenessProbe: #pod内容器健康检查的设置 #通过 path: / #URI地址 port: 8080 #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 stop'] volumeMounts: #挂载设置 - name: volume #挂载设备的名字,与volumes[*].name 需要对应 mountPath: /data #挂载到容器的某个路径下 readOnly: True volumes: #定义一组挂载设备 - name: volume #定义一个挂载设备的名字 #meptyDir: {} hostPath: path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt

6.Service.yaml

apiVersion: v1kind: Servicemetadata: ---------------------------------#元数据 annotations: -----------------------------#注释信息 k8s.kuboard.cn/workload: nextcloud labels: ----------------------------------#标签信息 k8s.kuboard.cn/layer: '' k8s.kuboard.cn/name: nextcloud name: nextcloud --------------------------#名称 namespace: nextcloud ---------------------#命名空间spec: --------------------------------------#定义Service模板 clusterIP: 10.0.181.206 ------------------#指定svcip地址 不指定则随机 ================================================================================================= #NodePort类型:集群外网络 type: NodePort ---------------------------#类型为NodePort ports: - name: mn nodePort: 30001 ----------------------#当type = NodePort时,指定映射到物理机的端口号 port: 80 -----------------------------#服务监听的端口号 protocol: TCP ------------------------#端口协议,支持TCP和UDP,默认TCP targetPort: 80 -----------------------#需要转发到后端Pod的端口号 ================================================================================================== #ClusterIP类型: 集群内网络 type: ClusterIP --------------------------# ports: - name: mn port: 80 protocol: TCP targetPort: 80 - name: j5smwx port: 22 protocol: TCP targetPort: 22 selector: -------------------------------#label selector配置,将选择具有label标签的Pod作为管理 k8s.kuboard.cn/layer: '' k8s.kuboard.cn/name: nextcloud sessionAffinity: None --------------------#是否支持session

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 精炼解读数据结构的链表的概念与实现
下一篇:十二、kubernetes 核心技术configMap
相关文章

 发表评论

暂时没有评论,来抢沙发吧~