yaml文件开头三个杠,结束三个点
---
yaml内容
...
# '---'表示yaml格式,一个文件的开始
# 当一个yaml中有多个任务时,要使用---分开,不然使用kubectl apply -f 执行时只执行后一个任务
---
yaml文件格式说明:
- 以缩进表示层级关系
- 不支持`tab`缩进,使用空格缩进
- 通常开头缩进2个空格
- 字符缩进后1个空格,如冒号,逗号等
- '---'表示yaml格式,一个文件的开始
- '#'表示注释
apiVersion: #声明api版本
kind: #声明资源类型
metadata: #声明元数据
spec: #声明容器参数
---
# yaml文件创建资源对象-Deployment:
# 这个yaml资源清单模板可以通过`kubectl get 资源类型 -n 命名空间 -o yaml`来导出,会有很多冗余信息
# 原有的kubectl --export命令可以去除冗余信息,但是1.12版本之后官方删除了这个命令
# kubectl get svc -n aliang-cka -o yaml
# kubectl get deploy -n aliang-cka -o yaml
# 控制器定义:
apiVersion: apps/v1 # API版本!必须字段,通过'kubectl api-resources |grep 资源类型'查询
kind: Deployment # 资源类型!必须字段
metadata: # 资源元数据!必须字段
name: web # 资源名称
namespace: aliang-cka # 所在namespace
spec: # 资源规格
replicas: 1 # 副本(实例)数量
selector: # 标签选择器,与下面metadata.labels保持一直
matchLabels:
app: web
# 被控制对象:
template: # pod模板
metadata: # pod元数据
labels: # 定义标签
# 标签一般根据项目属性去写:
# 例如 project: ms
app: web # 标签
spec: # pod规格
containers: # 容器配置
- name: web # 容器名
image: lizhenliang/java-demo # 镜像名
kubectl create deployment web --image=lizhenliang/java-demo --replicas=3 -n default
---
# yaml文件创建资源对象-Service:
apiVersion: v1 # api版本!必须字段
kind: Service # 资源类型!必须字段
metadata: # 资源元数据!必须字段
name: web # 资源名称
namespace: default # 资源所在namespacs
spec: # 资源规格
ports: # 端口映射
- port: 80 # Service端口,通过ClusterIP访问时使用的端口
protocol: TCP # 端口通信的协议
targetPort: 8080 # 容器内的服务端口,比如tomcat是8080
selector: # 标签选择器,与Deployment中标签保持一致
app: web # 标签
type: NodePort # Service暴露类型,NodePort允许集群外访问
kubectl expose service web --port=80 --target-port=8080 --type=NodePort -n default
cat Deployment.yaml Service.yaml > all.yaml
导出的yaml文件有很多冗余字段,不需要可以删除
例如: creationTimestamp和status字段可以删除
deployment.Spec.Selector
与deployment.Spec.Template.Labels
一致
## --dry-run是试运行看是否有错误
kubectl create deployment 应用名 --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml
导出的yaml文件有很多冗余字段,不需要可以删除
例如: creationTimestamp和status字段可以删除
kubectl expose servcie nginx --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run=client > my-server.yaml
冗余内容太多
kubectl get deployment nginx -o yaml > my-deploy.yaml
# 该命令能查询到pods.spec.containers下的所有字段
kubectl explain pods.spec.containers
kubectl explain deployment
kubectl api-resources |grep 资源类型的模糊字母
需要使用kube-linter这个工具来检查yaml语法是否有误
下载地址: https://github.com/stackrox/kube-linter/releases
# 下载kube-linter
wget https://ghproxy.com/https://github.com/stackrox/kube-linter/releases/download/0.2.5/kube-linter-linux.tar.gz
# 解压到/usr/bin/
tar xvf kube-linter-linux.tar.gz -C /usr/bin/
https://juejin.cn/post/6897857924027121671
# 执行检查
kube-linter lint pod.yaml
项目地址: https://github.com/instrumenta/kubeval
# 检查资源清单是否有误
kubeval my-invalid-rc.yaml
参考: https://blog.csdn.net/qq_36820037/article/details/108693292