• 云原生--k8s之yaml与json


    目录

    ​编辑

    一、K8S支持的文件格式

    1.YAML使用空格缩进,yaml是json的超集

    2、YAML语言格式

    二、YAML

    1、查看 API 资源版本标签

    2、编写资源配置清单

    2.1 编写 nginx-test.yaml 资源配置清单

    2.3 查看创建的pod资源

    3、创建service服务对外提供访问并测试

    3.1 编写nginx-svc-test.yaml文件

    3.2 创建资源对象

    三、详解K8S中的Port

    四、试运行生成 yaml 模板后创建实例

    1、–dry-run:试运行

    2、查看生成yaml格式

    3、查看生成json格式

    4、使用 yaml 格式导出生成模板

    5、将现有资源生成 yaml 模板导出并保存为文件


    一、K8S支持的文件格式

    kubernetes支持YAML和JSON文件格式管理资源对象。

    JSON格式:主要用于api接口之间消息的传递

    YAML格式:用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化,较易读

    1.YAML使用空格缩进,yaml是json的超集

    开发人员喜欢JSON,因为它是JavaScript的子集,并且可以在JavaScript内部直接解释和编写,还可以使用简写方式声明JSON,在使用不带空格的典型变量名时,键中不需要双引号。

    2.在许多情况下,YAML的格式看起来更直观,不需要这么些括号{}和"". 如果您在编辑器中没有可见的空格或缩进线指示符,则YAML的空格虽然更紧凑且更易于查看,但看起来很难手动编辑。

    3.与YAML相比,JSON的功能要少得多,因此JSON的序列化和反序列化速度要快得多,这使得更小更轻的代码可以处理JSON, json对于平台兼容,尤其是消息传递这块更好.。

    4.python中模型的配置文件都是yaml格式----脱机处理, yaml利用空格缩进表示层级,只要具有相同的缩进就具有相同的层级,而且缩进只能用空格.

    5.yaml字符串可以不用引号标注; json的字符串对象必须使用双引号""

    6.大小写敏感

    7.一个常见的误解是 YAML 需要较少的标点符号并且比 JSON更紧凑,但这完全是错误的。空格是不可见的,所以看起来字符较少,但是如果你计算实际的空格是必要的,以便正确解释 YAML以及正确的缩进,你会发现 YAML 实际上需要比 JSON 更多的字符。JSON不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。

    2、YAML语言格式

    1.大小写敏感

    2..使用缩进表示层级关系

    3.不支持 Tab 键制表符缩进,只使用空格缩进

    4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

    5.符号字符后缩进一个空格,如冒号,逗号,短横杠(-)等

    6.— 表示 YAML 格式,一个文件的开始,用于分隔文件

    7.# 表示注释

    二、YAML

    1、查看 API 资源版本标签

    kubectl api-versions

    2、编写资源配置清单

    2.1 编写 nginx-test.yaml 资源配置清单

    vim nginx-test.yaml

    如上图所示,yaml模板分为四层

    2.2 创建资源对象

    kubectl create -f nginx-test.yaml --validate=false

    1. #指定api版本标签
    2. apiVersion: apps/v1
    3. #定义资源的类型/角色,deployment为副本控制器
    4. #此处资源类型可以是Deployment、Job、Ingress、Service等
    5. kind: Deployment
    6. #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
    7. metadata:
    8. #定义资源的名称,在同一个namespace空间中必须是唯一的
    9.   name: nginx-deployment
    10.   labels:
    11.     app: nginx
    12. #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
    13. spec:
    14. #定义副本数量
    15.   replicas: 3
    16. #定义标签选择器
    17.   selector:
    18. #定义匹配标签
    19.     matchLabels:
    20. #需与后面的.spec.template.metadata.labels定义的标签保持一致
    21.       app: nginx
    22. #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    23.   template:
    24.     metadata:
    25. #定义Pod副本将使用的标签,需与前面的.spec.selector.matchLabels定义的标签保持一致
    26.       labels:
    27.         app: nginx
    28.     spec:
    29. #定义容器属性
    30.       containers:
    31. #定义一个容器名,一个-name:定义一个容器
    32.       - name: nginx
    33. #定义容器使用的镜像以及版本
    34.         image: nginx:1.15.4
    35.         ports:
    36. #定义容器对外的端口
    37.         - containerPort: 80
    38. #------------------------------------------------------------------#
    39. #无注释
    40. apiVersion: apps/v1
    41. kind: Deployment
    42. metadata:
    43.   name: nginx-deployment
    44.   labels:
    45.     app: nginx
    46. spec:
    47.   replicas: 3
    48.   selector:
    49.     matchLabels:
    50.       app: nginx
    51.   template:
    52.     metadata:
    53.       labels:
    54.         app: nginx
    55.     spec:
    56.       containers:
    57.       - name: nginx
    58.         image: nginx:1.15.4
    59.         ports:
    60.         - containerPort: 80

    2.3 查看创建的pod资源

    kubectl get pods -o wide

    3、创建service服务对外提供访问并测试

    3.1 编写nginx-svc-test.yaml文件

    1. apiVersion: v1
    2. kind: Service
    3. matadata:                                #元数据
    4.   name: string                           #service的名称
    5.   namespace: string                      #命名空间 
    6.   labels:                                #自定义标签属性列表
    7.     - name: string
    8.   annotations:                           #自定义注解属性列表 
    9.     - name: string
    10. spec:                                    #详细描述
    11.   selector: []                           #label selector配置,将选择具有label标签的Pod作为管理
    12.                                          #范围
    13.   type: string                           #service的类型,指定service的访问方式,默认为
    14.                                          #clusterIp
    15.   clusterIP: string                      #虚拟服务地址     
    16.   sessionAffinity: string                #是否支持session
    17.   ports:                                 #service需要暴露的端口列表
    18.   - name: string                         #端口名称
    19.     protocol: string                     #端口协议,支持TCP和UDP,默认TCP
    20.     port: int                            #服务监听的端口号
    21.     targetPort: int                      #需要转发到后端Pod的端口号
    22.     nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
    23.   status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
    24.     loadBalancer:                        #外部负载均衡器   
    25.       ingress:                           #外部负载均衡器
    26.         ip: string                       #外部负载均衡器的Ip地址值
    27.         hostname: string                 #外部负载均衡器的主机名

    3.2 创建资源对象

    kubectl create -f nginx-svc-test.yaml

    kubectl get svc

    三、详解K8S中的Port

    1.port,是k8s集群内部访问的service的端口,即一个service到另一个service访问,通过clusterIP:port

    2.nodeport,是将外部请求到k8s集群内部访问的node节点端口,外部请求通过nodeIP:nodePort到服务器,系统通过nodePort->service端口的映射,将请求转发到对应service

    3.targetPort,是pod端口,流量经过service后,通过kube-proxy转发到service后端的随机一pod上,最后进入容器。

    4.containerPort,pod内容器的端口,流量最后进入容器后通过相应的服务进行接收和处理。

    四、试运行生成 yaml 模板后创建实例

    1、–dry-run:试运行

    –dry-run:表示试运行,不真正执行命令(测试命令是否正确),即并不会真的创建出 pod 和 deployment 实例,去掉该参数后即可真正执行命令。

    kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run

    #打印相应的 API 对象而不执行创建

    2、查看生成yaml格式

    使用 --dry-run 试运行可不触发生成命令,然后通过 -o yaml 可实现对其 yaml 资源配置清单的查看

    kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml

    3、查看生成json格式

    可通过 -o json 查看该命令产生的 json 配置清单

    kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run -o json

    4、使用 yaml 格式导出生成模板

    kubectl create deployment dryrun-test --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > dryrun-test.yaml

    5、将现有资源生成 yaml 模板导出并保存为文件

    kubectl get deploy/dryrun-test -o yaml

    kubectl get deploy/dryrun-test -o yaml > export-test.yaml

  • 相关阅读:
    Requests库
    深入React源码揭开渲染更新流程的面纱
    了解冒泡排序
    Vue学习之页面上中下三层布局
    JavaSE反射前置之Properties类
    【冒泡排序】
    Pyinstaller+InstallForge多文件项目软件打包
    MCU芯片测试:性能指标测试痛点是什么?ATECLOUD能否解决?
    echarts vue里画一个简单的环状饼图
    非对称密码体制、单钥密码体制、私钥密码体制是一个概念对吗?
  • 原文地址:https://blog.csdn.net/a_b_e_l_/article/details/127706025