1、ymal介绍
k8s是容器编排引擎,使用yaml来编排部署应用
特点:1、缩进表示层级关系
2、不支持制表符“tab”缩进,需要使用空格缩进
3、通常开头缩进两个空格
4、关键词字符后缩进一个空格,比如冒号与逗号后面需要缩进一个字符
5、“---”表示YAML格式,一个文件的开始
6、“#”表示注释
以下yaml为例

等同于
kubectl create deployment web --image=lizhenliang/java-demo --replicas=3 -n default
2、编写示例yaml
在使用中我们可能存在API版本不一致导致报错,可以通过命令查看版本
kubectl api-resources |grep Deployment

1、其中,标签一般定义两个,由项目与应用组成,#键:值 可任意定义。例如
project:ecapp: portal
2、matchLabels必须与下面的labels保持一致,否则apply会报错
例如下面这个创建deployment的yaml
kind: Deploymentmetadata:name: web666namespace: team-aspec:replicas: 3selector:matchLabels:project: ecapp: portaltemplate:metadata:labels:project: ecapp: portalspec:containers:- name: webimage: lizhenliang/java-demo:latest
其中,标签可以为两个,他是以键值对的方式存储,但matchLabels的值必须与labels相等,不相等会创建报错,而service是以标签来控制pod
replicas为副本数,image为拉取镜像名
2、创建service
apiVersion: v1kind: Servicemetadata:name: web666namespace: team-aspec:ports:- port: 80protocol: TCPtargetPort: 8080selector:project: ecapp: portaltype: NodePort
标签与命名空间要确保与deployment一致
执行两个yaml文件
kubectl apply -f deployment.yaml
kubectl apply -f service.yam
查看服务

成功
3、快速生成yaml文件
直接手写yaml比较麻烦,而且容易出错,所以有提供以下方式获取标准yaml文件并修改
3.1生成新yaml
1、通过命令获取yaml,可以通过创建服务的命令后面加
--dry-run=client -o yaml 来提取yaml,再根据获取到的yaml进行修改即可
例如
kubectl create deployment java-demo --image=nginx:1.20 -n team-a --dry-run=client -o yaml
他会输出yaml,加重定向导出即可,其中,creationTimestamp与status: {}可以删除
apiVersion: apps/v1kind: Deploymentmetadata:creationTimestamp: nulllabels:app: java-demoname: java-demonamespace: team-aspec:replicas: 1selector:matchLabels:app: java-demostrategy: {}template:metadata:creationTimestamp: nulllabels:app: java-demospec:containers:- image: nginx:1.20name: java-demoresources: {}status: {}
3.2 将已有的服务yaml导出
k8s支持将正在运行的服务的yaml文件导出,使用get命令加-o yaml即可(xxx为服务名)
kubectl get deployment xxx -o yaml
例如下图

注意,此yaml内容不能直接在其他k8s环境中使用,在其他环境中使用的话要进行一些删除,要删除的内容如下:

剩余的内容则是一个标准yaml,可以直接使用也可以用作模板修改
3.3关键词提醒
kubectl explain pods.spec.containers
kubectl explain deployment
3.4官网查找
直接在官网搜索关键词,官方会给演示示例
官网地址: