• [云原生] K8S声明式资源管理


    一、资源配置清单的管理

    资源清单的编写管理,都是基于yaml编写的格式

    1.1 YAML 文件格式及编写注意事项 

    YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。关于 YAML 的真相是,YAML 中只有两种数据结构:序列(sequence)和映射(mapping)。这是两个花哨的名字,你会发现它代表了你非常熟悉的概念。这篇文章解释了这两种结构,更重要的是,介绍了它们是如何协同工作,使 YAML 成为表示你所关心的数据的强大方式。

    • YAML数据结构通过缩进来表示
    • 连续的项目通过减号来表示
    • 键值对用冒号分隔
    • 数组用中括号 [ ] 括起来
    • hash 用花括号 { } 括起来

    使用 YAML 时需要注意下面事项:
    ●大小写敏感
    ●通过缩进表示层级关系
    ●不支持制表符 tab 键缩进,只能使用空格缩进
    ●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
    ●用 # 号注释
    ●符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 - 
    ●如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思
     

    1.2  查看资源配置清单  
    1. kubectl get deployment nginx -o yaml
    2. //解释资源配置清单
    3. kubectl explain deployment.metadata

     

     

    1.3 修改资源配置清单并应用 
    (1)离线修改

     离线修改的过程:

    (1)首先将配置资源导入通过重定向符号导入到yaml文件中

    (2)通过vim编辑器进行yaml配置文件,删除多余的选项,修改配置项,进行保存

    (3) 通过apply -f  该yaml 文件 或者是   (先  deleter -f 该yaml文件,再create -f 该yaml 文件)

     用来实现声明式离线修改资源清单的配置

    create与apply的区别:

     create和apply都能运用于资源模板的创建,但是create创建资源模板属于固定式的资源配置,一旦创建,后期想要修改时,就只能通过先delete删除资源模板,再进行create创建,达到资源更新的效果。

    而apply属于一种实时更新使用的创建模板方式,后期对资源模板的配置文件进行修改时,只需要先修改配置文件,再使用apply -f 指定配置文件即可。

    但是apply并不是什么情况下都能生效使用。如果你发现配置并不生效,而且与书写格式无关,则

    可以先delete -f 该配置文件,再create -f 该配置文件

    1. 修改yaml文件,并用kubectl apply -f xxxx.yaml 文件使之生效
    2. 注意:当apply不生效时, 先使用delete清除资源,再apply创建资源
    3. kubectl get service nginx -o yaml > nginx-svc.yaml
    4. vim nginx-svc.yaml #修改port:8080
    5. kubectl delete -f nginx-svc.yaml #删除yaml文件
    6. kubectl apply -f nginx-svc.yaml #应用yaml文件
    7. kubectl get SVC

    (2)在线修改 
    1. 直接使用kubectl edit svc nginx-service
    2. 在线编辑资源配置清单并保存退出即时生效( 如port: 6060)
    3. 此修改方式不会对yaml文件内容修改
    4. 使用i修改,使用esc+wq保存退出(在线修改和vim操作一样,修改完实时生效,有些字段不支持修改还是需要离线修改)

     

    1.4 删除资源配置清单 
    1. 陈述式删除:
    2. Kubernetes 支持YAMLJSON格式管理资源对象
    3. JSON 格式:主要用于api接口之间消息的传递
    4. YAML格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
    5. kubectl delete pods nginx
    6. 声明式删除
    7. kubectl delete -f nginx-svc.yaml

    二、自主编写资源清单 

    2.1 初步认识资源清单中svc的重要配置项
    1. Service yaml文件详解
    2. apiVersion: v1
    3. kind: Service
    4. matadata: #元数据
    5. name: string #service的名称
    6. namespace: string #命名空间
    7. labels: #自定义标签属性列表
    8. - name: string
    9. annotations: #自定义注解属性列表
    10. - name: string
    11. spec: #详细描述
    12. selector: [] #label selector配置,将选择具有label标签的Pod作为管理
    13. #范围
    14. type: string #service的类型,指定service的访问方式,默认为
    15. #clusterIp
    16. clusterIP: string #虚拟服务地址
    17. sessionAffinity: string #是否支持session
    18. ports: #service需要暴露的端口列表
    19. - name: string #端口名称
    20. protocol: string #端口协议,支持TCP和UDP,默认TCP
    21. port: int #服务监听的端口号
    22. targetPort: int #需要转发到后端Pod的端口号
    23. nodePort: int #当type = NodePort时,指定映射到物理机的端口号
    24. status: #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
    25. loadBalancer: #外部负载均衡器
    26. ingress: #外部负载均衡器
    27. ip: string #外部负载均衡器的Ip地址值
    28. hostname: string #外部负载均衡器的主机名
    2.2 手动编写pod资源配置  
    1. vim pod-demo.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. name: pod-demo
    6. namespace: default
    7. labels:
    8. appname: myapp
    9. appversion: v1
    10. spec:
    11. containers:
    12. - name: myapp
    13. image: nginx:latest
    14. ports:
    15. - containerPort: 80
    16. name: http
    17. protocol: TCP
    18. #创建资源对象
    19. kubectl create -f pod-demo.yaml
    20. kubectl get pods

     

    2.3 手动编写deployment资源配置 
    1. vim depl-demo.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: depl-demo
    6. namespace: default
    7. spec:
    8. replicas: 3
    9. selector:
    10. matchLabels:
    11. myname: myapp
    12. template:
    13. metadata:
    14. labels:
    15. myname: myapp
    16. spec:
    17. containers:
    18. - name: myapp
    19. image: nginx
    20. ports:
    21. - containerPort: 80
    22. name: http
    23. kubectl apply -f depl-demo.yaml

     

     2.4 手动编写svc资源配置 
    1. vim svc-demo.yaml
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. name: svc-demo
    6. namespace: default
    7. spec:
    8. type: NodePort
    9. selector:
    10. myname: myapp
    11. ports:
    12. - port: 9090
    13. nodePort: 30888
    14. targetPort: 80
    15. # clusterIP: 10.0.0.0/24
    16. kubectl apply -f svc-demo.yaml
    1. 补充:

    2. 详解k8s中的port

    3. ●port

    4. port是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node. 上访问到service

    5. ●nodePort

    6. nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort 可以从外部访问到某个service。

    7. ●targetPort

    8. targetPort是Pod的端口,从port或nodePort来的流量经过kube-proxy 反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。

    9. ●containerPort

    10. containerPort是Pod内部容器的端口,targetPort映射到containerPort

    三、手动生成模板,再编写资源清单  

    (1)生成模板 
    1. 用--dry-run命令生成yaml资源清单
    2. kubectl run --dry-run 打印相应的 API 对象试运行而不执行创建
    3. #空跑测试
    4. kubectl run nginx-svc2 --image=nginx:1.20 --port=80 --dry-run=client
    5. #空跑测试的输出结果
    6. kubectl run nginx-svc2 --image=nginx:1.20 --port=80 --dry-run=client -o yaml
    7. #生成模板
    8. kubectl run nginx-svc2 --image=nginx:1.20 --port=80 --dry-run=client -o yaml >nginx-svc2.yaml

    (2)修改并编写模板 
    1. vim nginx-svc2.yaml
    2. kubectl apply -f nginx-svc2.yaml
    3. kubectl get pods

    四、如何 获取K8S资源配置清单文件模板(yaml配置文件)?

    1)手写yaml配置文件,可以根据 kubectl explain 命令获取字段信息
    2)查看现有的资源配置获取:

    kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml
    kubectl edit -n <命名空间> <资源类型> <资源名称> ,然后手动复制资源配置,粘贴到yaml文件中
    3)通过模拟运行kubectl陈述式创建资源的命令获取
    kubectl create|run|expose  选项  --dry-run=client -o yaml > XXX.yaml
    4)复制K8S官网文档的资源配置案例 Kubernetes 文档 | Kubernetes

     

    K8S资源配置清单文件字段的值类型:

    1. 字段: <integer> 数字 字段: 数值
    2. 字段: <string> 字符串 字段: "字符串" 字段: '字符串' 字段: 字符串
    3. 字段: <boolean> 布尔值 字段: true|false
    4. 字段: <Object> 对象:值可能是一层或多层子字段
    5. 字段:
    6. 二级字段:
    7. 三级字段
    8. 字段: <[]Object> 列表类型的对象 字段:
    9. - 二级字段:
    10. 三级字段
    11. - 二级字段:
    12. 字段: <map[string]string> 映射:值可能是一个或多个键值对类型的值
    13. 字段:
    14. key1: value1
    15. key2: value2
    16. key3: value3
  • 相关阅读:
    C语言从入门到入土——函数
    Docker中安装Oracle数据库
    开源纯粹主义:每一颗螺丝钉都是自由的
    vue使用postcss-pxtorem实现自适应
    【Linux系统编程】——深度理解5种IO模型
    【Python安全攻防】【网络安全】一、常见被动信息搜集手段
    9.2.4 DATETIME类型
    Git 入门实用命令
    IDEA 集成 GitHub
    什么是MVCC?
  • 原文地址:https://blog.csdn.net/Cnm_147258/article/details/136323048