如何快速编写k8s资源清单yaml文件

如何快速编写k8s资源清单yaml文件

    • yaml文件的开头和结尾
    • k8s的yaml资源清单基本格式
    • yaml文件创建资源对象-Deployment
      • 以上资源清单配置等同于:
    • yaml文件创建资源对象-Service
      • 以上资源清单配置等同于:
    • 将Deployment和Service这两个yaml文件合并成一个yaml文件
    • 如何快速编写k8s资源清单
      • 用create命令生成deployment的yaml
      • 用expose命令生成servcie的yaml
      • 用get命令导出yaml
    • pods下的容器下的字段拼写忘记了怎么办?
      • 查询资源所有字段
    • 资源类型忘记了怎么办?
    • 检查yaml语法是否有误
      • 安装kube-linter
      • 检查yaml资源清单
      • kubeval

yaml文件的开头和结尾

yaml文件开头三个杠,结束三个点

---

yaml内容

...

k8s的yaml资源清单基本格式

如何快速编写k8s资源清单yaml文件_第1张图片

# '---'表示yaml格式,一个文件的开始
# 当一个yaml中有多个任务时,要使用---分开,不然使用kubectl apply -f 执行时只执行后一个任务
---
yaml文件格式说明:
  - 以缩进表示层级关系
  - 不支持`tab`缩进,使用空格缩进
  - 通常开头缩进2个空格
  - 字符缩进后1个空格,如冒号,逗号等
  - '---'表示yaml格式,一个文件的开始
  - '#'表示注释

基本框架
如何快速编写k8s资源清单yaml文件_第2张图片

apiVersion:   #声明api版本
kind:         #声明资源类型
metadata:     #声明元数据
spec: 		#声明容器参数

yaml文件创建资源对象-Deployment

---
# 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

---
# 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

将Deployment和Service这两个yaml文件合并成一个yaml文件

cat Deployment.yaml Service.yaml > all.yaml

如何快速编写k8s资源清单


用create命令生成deployment的yaml

导出的yaml文件有很多冗余字段,不需要可以删除
例如: creationTimestamp和status字段可以删除

deployment.Spec.Selectordeployment.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

用expose命令生成servcie的yaml

导出的yaml文件有很多冗余字段,不需要可以删除
例如: creationTimestamp和status字段可以删除

kubectl expose servcie nginx --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run=client > my-server.yaml

用get命令导出yaml

冗余内容太多

kubectl get deployment nginx -o yaml > my-deploy.yaml

pods下的容器下的字段拼写忘记了怎么办?

# 该命令能查询到pods.spec.containers下的所有字段
kubectl explain pods.spec.containers

查询资源所有字段

kubectl explain deployment

资源类型忘记了怎么办?

kubectl api-resources |grep 资源类型的模糊字母

检查yaml语法是否有误

需要使用kube-linter这个工具来检查yaml语法是否有误
下载地址: https://github.com/stackrox/kube-linter/releases


安装kube-linter

# 下载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/

检查yaml资源清单

https://juejin.cn/post/6897857924027121671

# 执行检查
kube-linter lint pod.yaml

kubeval

项目地址: https://github.com/instrumenta/kubeval

# 检查资源清单是否有误
kubeval my-invalid-rc.yaml

参考: https://blog.csdn.net/qq_36820037/article/details/108693292


你可能感兴趣的:(k8s,kubernetes,docker,容器)