云原生--k8s之yaml与json

时间:2022-11-07 08:02:43

目录

​编辑

一、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之yaml与json

一、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

云原生--k8s之yaml与json

2、编写资源配置清单

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

vim nginx-test.yaml

云原生--k8s之yaml与json

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

云原生--k8s之yaml与json

云原生--k8s之yaml与json

2.2 创建资源对象

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

#指定api版本标签

apiVersion: apps/v1

#定义资源的类型/角色,deployment为副本控制器

#此处资源类型可以是Deployment、Job、Ingress、Service等

kind: Deployment

#定义资源的元数据信息,比如资源的名称、namespace、标签等信息

metadata:

#定义资源的名称,在同一个namespace空间中必须是唯一的

  name: nginx-deployment

  labels:

    app: nginx

#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性

spec:

#定义副本数量

  replicas: 3

#定义标签选择器

  selector:

#定义匹配标签

    matchLabels:

#需与后面的.spec.template.metadata.labels定义的标签保持一致

      app: nginx

#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配

  template:

    metadata:

#定义Pod副本将使用的标签,需与前面的.spec.selector.matchLabels定义的标签保持一致

      labels:

        app: nginx

    spec:

#定义容器属性

      containers:

#定义一个容器名,一个-name:定义一个容器

      - name: nginx

#定义容器使用的镜像以及版本

        image: nginx:1.15.4

        ports:

#定义容器对外的端口

        - containerPort: 80



#------------------------------------------------------------------#

#无注释

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment

  labels:

    app: nginx

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.15.4

        ports:

        - containerPort: 80

云原生--k8s之yaml与json

2.3 查看创建的pod资源

kubectl get pods -o wide

云原生--k8s之yaml与json

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

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

apiVersion: v1

kind: Service

matadata:                                #元数据

  name: string                           #service的名称

  namespace: string                      #命名空间 

  labels:                                #自定义标签属性列表

    - name: string

  annotations:                           #自定义注解属性列表 

    - name: string

spec:                                    #详细描述

  selector: []                           #label selector配置,将选择具有label标签的Pod作为管理

                                         #范围

  type: string                           #service的类型,指定service的访问方式,默认为

                                         #clusterIp

  clusterIP: string                      #虚拟服务地址     

  sessionAffinity: string                #是否支持session

  ports:                                 #service需要暴露的端口列表

  - name: string                         #端口名称

    protocol: string                     #端口协议,支持TCP和UDP,默认TCP

    port: int                            #服务监听的端口号

    targetPort: int                      #需要转发到后端Pod的端口号

    nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号

  status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址

    loadBalancer:                        #外部负载均衡器   

      ingress:                           #外部负载均衡器

        ip: string                       #外部负载均衡器的Ip地址值

        hostname: string                 #外部负载均衡器的主机名

云原生--k8s之yaml与json

3.2 创建资源对象

kubectl create -f nginx-svc-test.yaml

kubectl get svc

云原生--k8s之yaml与json

云原生--k8s之yaml与json

云原生--k8s之yaml与json

三、详解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内容器的端口,流量最后进入容器后通过相应的服务进行接收和处理。

云原生--k8s之yaml与json

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

1、–dry-run:试运行

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

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

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

云原生--k8s之yaml与json

2、查看生成yaml格式

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

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

云原生--k8s之yaml与json

云原生--k8s之yaml与json

3、查看生成json格式

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

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

云原生--k8s之yaml与json

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

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

云原生--k8s之yaml与json

云原生--k8s之yaml与json

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

kubectl get deploy/dryrun-test -o yaml

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

云原生--k8s之yaml与json

云原生--k8s之yaml与json