飞道的博客

云原生--k8s之yaml与json

355人阅读  评论(0)

目录

​编辑

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


转载:https://blog.csdn.net/a_b_e_l_/article/details/127706025
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场