• k8s yaml文件编写技巧


    yaml文件格式

    • 缩进表示层级关系;
    • 不支持Tab缩进,只能使用空格缩进;
    • 通常开头缩进2个空格;
    • 字符后缩进1个空格,例如冒号、逗号后面;
    • 使用#注释;
    • ---表示一个文件的开始,在同一个yaml文件中可以分隔不同的资源。

    deployment.yaml

    编写一个应用部署文件deployment.yaml

    ---
    #控制器定义
    apiVersion: apps/v1   #api版本
    kind: Deployment      #资源类型
    metadata:             #资源的元数据
      name: web           
      namespace: default
    spec:                 #资源规格
      replicas: 3         #副本数量
      selector:           #标签选择器
        matchLabels:      #与下面Pod的labels保持一致
    	  app: web
      #被控制对象
      template:           #Pod模板
        metadata:
    	  labels:         #Pod的标签
    	    app: web
    	spec:
    	  containers:     #容器配置
    	  - name: web
    	    image: nginx:1.20  #容器使用的镜像
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行上面的yaml文件

    kubectl apply -f deployment.yaml
    
    • 1

    相当于

    kubectl create deployment web --image=nginx:1.20 --replicas=3 -n default
    
    • 1

    service.yaml

    编写一个对外暴露服务文件service.yaml

    ---
    apiVersion: v1
    kind: Service
    metadata: 
      name: web
      namespace: default
    spec:
      ports:
      - port: 80          #Service端口,通过ClusterIP访问
        protocol: TCP
    	targetPort: 8080  #Pod内部署应用的服务端口,比如nginx是80
      selector:           #标签选择器,与deployment中保持一致
        app: web
      type: NodePort      #Service类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行上面的yaml文件

    kubectl apply -f service.yaml
    
    • 1

    相当于

    kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort -n default
    
    • 1

    Service和Deployment通过Labels标签关联,因此:

    • 同一个应用的Deployment、Pod、Service应该使用相同的标签;
    • 不同应用应该使用不同的标签,否则可能会导致同一个Service关联到多个应用。

    删除已经部署的应用

    kubectl delete -f deploymeny.yaml
    
    • 1

    删除服务

    kubectl delete -f service.yaml
    
    • 1

    使用kubectl create部署应用

    部署应用

    kubectl create deployment web --image=xhliang/java-app
    kubectl get deployment,pods
    
    • 1
    • 2

    对外发布服务

    kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort --name=web
    kubectl get pods,svc
    
    • 1
    • 2

    查看Service关联的Pod

    kubectl get endpoints   #缩写为 kubectl get ep
    kubectl get pods -o wide
    
    • 1
    • 2

    自动生成yaml文件

    在日常运维中,从零开始写一个yaml文件的效率太低,而且容易出错。一个很好的方法就是利用kubectl命令来自动生成部署用的yaml文件,然后根据需求进行修改即可。

    方法一:利用kubectl create ... --dry-run -o yaml > xxx.yaml生成一个部署文件。

    --dry-run=client表示在本地尝试运行,但是不会实际部署。

    kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > deployment.yaml
    
    • 1

    方法二:利用kubectl get ... -o yaml > xxx.yaml命令导出已有部署的yaml文件。

    kubectl get deployment nginx -o yaml > deployment.yaml
    
    • 1

    查询资源支持的属性字段:

    kubectl explain pods.spec.containers
    kubectl explain deployment
    
    • 1
    • 2
  • 相关阅读:
    [游戏] C++ chat
    使用D435i+Avia跑Fast-LIVO
    网络编程套接字(3)——协议定制 | 序列化与反序列化
    【C语言数据结构】队列-顺序存储(顺序队列)
    mysql使用--表达式和函数
    滨州稻田绽放人生 国稻种芯·中国水稻节:山东盐碱地变良田
    使用自定义数据训练 YOLOv10
    【Rust 笔记】17-并发(下)
    Swin Transformer 论文精读,并解析其模型结构
    [RK3568 Android11]Wifi 连接过程
  • 原文地址:https://blog.csdn.net/Sebastien23/article/details/125985511