Kubernetes集群之YAML文件详解
Kubernetes只支持YAML和JSON格式创建资源对象。JSON格式一般用于接口之间消息的传递,YAML是专门用来写配置文件的语言,非常简洁和强大,可读性高。它实质上是一种通用的数据串行化格式。一、YAML语法规则缩进标识层级关系不支持制表符缩进,使用空格缩进通常开头缩进两个空格字符后缩进一个空格,如冒号,逗号等"---"表示YAML格式,一个文件的开始"#"表示注释二、K8s中YAML字段
·
Kubernetes只支持YAML和JSON格式创建资源对象。JSON格式一般用于接口之间消息的传递,YAML是专门用来写配置文件的语言,非常简洁和强大,可读性高。它实质上是一种通用的数据串行化格式。
一、YAML语法规则
-
缩进标识层级关系
-
不支持制表符缩进,使用空格缩进
-
通常开头缩进两个空格
-
字符后缩进一个空格,如冒号,逗号等
-
"---"表示YAML格式,一个文件的开始
-
"#"表示注释
二、K8s中YAML字段类型
- 常用字段
apiVersion | API版本 |
kind | 资源类型 |
metadata | 资源元数据 |
spec | 资源规格 |
replicas | 副本数量 |
selector | 标签选择器 |
template | pod模板 |
metadata | pod原数据 |
spec | pod规格 |
containers | 容器配置 |
resources | 资源管理 |
- apiVersion
1. apiVersion支持类型
# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
......
2. apiVersion 选型
从上得知apiVersion类型如此之多,那到底我们应该选那个,可以根据对应的资源类型来选择
# 可以参考到某个kind资源拥有的字段以及对应的apiVersion
# kubectl explain {kind_name}
# kubectl explain deployment
KIND: Deployment
VERSION: apps/v1
DESCRIPTION:
Deployment enables declarative updates for Pods and ReplicaSets.
......
- kind
1. 资源类型
# kubectl api-resources -o wide --namespaced=true
NAME SHORTNAMES APIGROUP NAMESPACED KIND VERBS
bindings true Binding [create]
configmaps cm true ConfigMap [create delete deletecollection get list patch update watch]
endpoints ep true Endpoints [create delete deletecollection get list patch update watch]
events ev true Event [create delete deletecollection get list patch update watch]
limitranges limits true LimitRange [create delete deletecollection get list patch update watch]
persistentvolumeclaims pvc true PersistentVolumeClaim [create delete deletecollection get list patch update watch]
pods po true Pod [create delete deletecollection get list patch update watch]
.......
2. 资源类型支持字段
# kubectl explain ingresses --recursive
KIND: Ingress
VERSION: extensions/v1beta1
DESCRIPTION:
Ingress is a collection of rules that allow inbound connections to reach
the endpoints defined by a backend. An Ingress can be configured to give
services externally-reachable urls, load balance traffic, terminate SSL,
offer name based virtual hosting etc. DEPRECATED - This group version of
Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release
notes for more information.
FIELDS:
apiVersion <string>
kind <string>
metadata <Object>
annotations <map[string]string>
clusterName <string>
......
三、K8s之YAML文件
- nginx yaml 文件
# cat nginx.yml
apiVersion: v1 # 指定api版本,此值必须在kubectl apiversions中
kind: Pod # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
name: test-pod # 资源的名字,在同一个namespace中必须唯一
namespaces: nginx
labels: # 设定资源的标签
k8s-app: nginx
version: v1
spec: # specification of the resource content 指定该资源的内容
restartPolicy: Always # 表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
nodeSelector: # 节点选择,先给主机打标签kubectl label nodes loc-k8s-node1 zone=loc-k8s-node1
zone: loc-k8s-node1
containers:
- name: nginx # 容器的名字
image: nginx:latest # 容器使用的镜像地址
imagePullPolicy: Never # 三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略
# Always,每次都检查
# Never,每次都不检查(不管本地是否有)
# IfNotPresent,如果本地有就不检查,如果没有就拉取
resources: # 资源管理
requests: # Request用于预分配资源,当集群中的节点没有request所要求的资源数量时,容器会创建失
cpu: 0.1 # CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory: 256Mi # 内存使用量
limits: # 资源限制
cpu: 0.5
memory: 1000Mi
ports:
- containerPort: 80 # 容器对外的端口
name: httpd # 名称
protocol: TCP
livenessProbe: # pod内容器健康检查的设置
httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
path: / # URI地址
port: 80
#host: 127.0.0.1 # 主机地址
scheme: HTTP # 连接协议
timeoutSeconds: 5 # 检测的超时时间
periodSeconds: 15 # 检查间隔时间
volumeMounts: # 挂载持久存储卷
- name: volume # 挂载设备的名字,与volumes[*].name 需要对应
mountPath: /data # 挂载到容器的某个路径下
readOnly: True
volumes: # 定义一组挂载设备
- name: volume # 定义一个挂载设备的名字
#meptyDir: {}
hostPath:
path: /data # 挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
#nfs
- 快速生产yaml文
1. 针对未部署的项目生成yaml文件格式模板
# kubectl create deployment web --image=nginx -o yaml --dry-run
2. 通过web界面配置yaml文件
https://github.com/dotbalo/ratel-doc/blob/master/cluster/Install.md
3. 通过vs code安装kubernetes插件编写,有提示
4. 针对已经部署的项目导出yaml文件
# kubectl get deploy nginx -o yaml --export > nginx.yaml
更多推荐
已为社区贡献2条内容
所有评论(0)