YAML是一种简洁的非标记语言
百度百科:https://baike.baidu.com/item/YAML/1067697?fr=aladdin
yaml文件示例nginx-deployment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | apiVersion: apps/v1 #apiVersion是当前配置格式的版本kind: Deployment #kind是要创建的资源类型,这里是Deploymnetmetadata: name: nginx-deployment labels: app: nginxspec: #spec部分是该Deployment的规则说明 replicas: 3 #relicas指定副本数量,默认为1 selector: matchLabels: app: nginx template: #template定义Pod的模板,这是配置的重要部分 metadata: #metadata定义Pod的元数据,至少要顶一个label,label的key和value可以任意指定 labels: app: nginx spec: #spec描述的是Pod的规则,此部分定义pod中每一个容器的属性,name和image是必需的 containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80 |
PS:注释#需要间隔一个空格不能间隔多个空格或者tab 否则启动会出现以下报错
1 2 | # kubectl create -f nginx-deployment.yamlerror: error parsing nginx-deployment.yaml: error converting YAML to JSON: yaml: line 8: could not find expected ':' |
通过yaml文件创建deployment
1 | kubectl create -f nginx-deployment.yaml |
通过yaml文件创建service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # cat nginx-service.yamlapiVersion: v1kind: Service #创建类型是servicemetadata: creationTimestamp: null labels: app: nginx name: nginx-servicespec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort |
创建
1 | kubectl create -f nginx-service.yaml |
查看,对外暴露43208端口
1 2 3 4 | # kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.10.10.1 <none> 443/TCP 4d23hnginx-service NodePort 10.10.10.168 <none> 80:43208/TCP 17s |
访问

可以通过以下命令不运行而生成yaml文件
1 | kubectl expose deployment nginx-deployment --port=80 --type=NodePort --target-port=80 --name=nginx-service --dry-run -o yaml |
使用yaml文件创建应用与kucectl直接创建应用的不同之处是便于留存,而且可以把刚刚两个配置文件放在一起进行配置
1 2 3 | kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run -o yaml# --dry-run 测试不运行#-o yaml 输出为yaml格式 |
生成的yaml文件重定向输出至文件
1 | kubectl run nginx --image=nginx:latest --port=80 --replicas=3 --dry-run -o yaml >my-deploy.yaml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # cat my-deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata: creationTimestamp: null labels: run: nginx name: nginxspec: replicas: 3 selector: matchLabels: run: nginx strategy: {} template: metadata: creationTimestamp: null labels: run: nginx spec: containers: - image: nginx:latest name: nginx ports: - containerPort: 80 resources: {}status: {} |
对于已经在运行的的可以使用get命令导出
1 | kubectl get deploy/nginx --export -o yaml > my-deploy2.yaml |
Pod容器字段忘记拼写了可以通过以下命令查看
1 | kubectl explain pods.spec.containers |