快速编写k8s资源清单


快速生成k8s资源清单

create命令生成deploymentyaml资源清单

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

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字段可以删除

# 生成service的yaml资源清单
## 写成expose service意思是为名为web的service再创建一个service
## 写成expose deploy的意思是为名为web的deploy创建一个service
kubectl expose deploy nginx --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run=client > my-server.yaml

用get命令导出yaml—冗余内容太多

冗余内容太多

# 用get命令导出yaml
kubectl get deployment nginx -o yaml > my-deploy.yaml

create和apply的区别

# create是创建资源(命令式编程)
# 命令式创建
kubectl create -f myserver.yaml -f my-rc.yaml
## 可以指定目录
kubectl create –f <directory>

# apply可以创建+更新资源(声明式编程)
# 声明式创建
kubectl apply -f myserver.yaml -f my-rc.yaml
## 可以指定目录
kubectl apply -f <directory>

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

查询pod下容器字段

# 该命令能查询到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检查yaml资源清单

https://juejin.cn/post/6897857924027121671

# 安装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/

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

kubeval检查k8s资源清单是否有误

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

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

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

k8s的yaml资源清单基本格式

yaml文件书写格式
在这里插入图片描述

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

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

基本框架
在这里插入图片描述

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允许集群外访问

以上资源清单配置等同于:

# 为名为web的deploy创建一个service
kubectl expose deploy web --port=80 --target-port=8080 --type=NodePort -n default

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

# 合并资源清单
cat Deployment.yaml Service.yaml > all.yaml
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐