k8s!YAML文件概论与演示!

一 概述

  1. k8s支持使用YAML和JSON格式的文件来创建资源对象,相比较而言:

  2. json格式的文件用于接口之间消息的传递,更适合二次开发

  3. yaml格式的文件只是一种简洁的非标记性语言,更适合运维

  4. YAML的文件格式和注意事项

1、不支持制表符tab键缩进,需要使用空格缩进,使用缩进表示层级关系
2、通常开头缩进2个空格,缩进的空格数不重要,只要相同层级的元素左对齐即可
3、字符后缩进一个空格,如冒号、逗号、横杆
4、用#号注释
5、如果包含特殊字符用单引号引起来
6、布尔值必须用引号括起来
7、—表示yaml文件格式的分割

二 YAML文件优点

  • YAML 文件易于人类阅读,具有表达性和可扩展性。
  • YAML 文件易于实现和使用。
  • 可在编程语言之间轻松移植。
  • 与敏捷语言的原生数据结构相匹配。
  • YAML 文件具有一致模型,支持通用工具。
  • YAML 文件支持 One-pass 处理。
  • 使用方便,因此您无需再将所有的参数添加到命令行中。
  • 易于维护 – 可以将 YAML 文件添加到源控件中以跟踪更改。
  • 灵活便捷 – 可以使用 YAML 创建更加复杂的结构(相对于使用命令行可以创建的结构)

三 YAML与 JSON 和 XML 的关系

在这里插入图片描述

  1. XML 是许多领域的优先采用格式。XML 最初设计为与标准通用标记语言 (SGML) 向后兼容,后者旨在支持结构化文档。因此,XML存在许多设计上的约束。
  2. JSON 的设计理念是简单性和通用性,并且易于生成和解析。JSON 格式的可读性低,但是这种格式的数据每一种现代编程环境都可以轻松处理。
  3. YAML 的设计目标是提升可读性,提供更加完善的信息模型。YAML 的生成和解析更加复杂,因此可以将其视为 JSON 的自然超集。每个
    JSON 文件都是一个有效的 YAML 文件。
  4. 综上所述,在需要额外功能的情况下,可以轻松地从 JSON 迁移到 YAML。YAML 是从 XML 衍生而来。

四 YAML 文件的结构

  • 键值对 – YAML 文件中的基本条目类型是键值对。键值对的格式是键和冒号,之后是空格,然后是值。

  • 数组/列表 – 列表会在列表名称下列出一些项目。列表的元素以 - 开头。可以有 n 个列表,但是,数组中各个元素的缩进非常重要。

  • 字典/地图 – YAML 文件的更复杂类型是字典和地图。
    在这里插入图片描述
    在编写 YAML 文件时,切记以下准则:

  • 缩进标识层级关系

  • 不支持制表符缩进,使用空格缩进

  • 通常开头缩进两个空格

  • 字符后缩进一个空格,如冒号,逗号等

  • “—”表示YAML格式,一个文件的开始

  • “#”表示注释

五 使用YAML文件创建资源对象

5.1 查看资源版本标签
[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
例如:写一个yuml文件
5.2 创建目录,编辑测试文件
[root@master ~]# mkdir test
[root@master ~]# cd test/
[root@master test]# vim nginx-test.yaml
apiVersion: apps/v1	'//指定api版本标签'
kind: Deployment	'//定义资源的类型/角色,deployment为控制器'
metadata:	'//定义资源的元数据'
  name: nginx-test	'//定义资源的名称,在同一个namespace中必须唯一'
  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	'//定义容器的对外端口' 
5.3 创建资源对象
[root@master test]# kubectl create -f nginx-test.yaml 
deployment.apps/nginx-test created
[root@master test]# kubectl get pod	'//创建成功'
NAME                        READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-5s6h7       1/1     Running   1          9d
nginx-test-d55b94fd-9zmdj   1/1     Running   0          55s
nginx-test-d55b94fd-b8lkl   1/1     Running   0          55s
nginx-test-d55b94fd-w4c5k   1/1     Running   0          55s
5.4 创建service服务对外提供访问并测试
[root@master test]# vim nginx-service-test.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx
[root@master test]# kubectl create -f nginx-service-test.yaml 
service/nginx-service created
[root@master test]# kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        2d5h
nginx-service   NodePort    10.0.0.226   <none>        80:47710/TCP   5s

六 使用命令快速生成YAML或者JSON文件

6.1 测试创建资源对象的命令正确性,并不真正执行创建
[root@master test]# kubectl run nginx-test01 --image=nginx --port=80 --replicas=2 --dry-run
kubectl run --	generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx-test01 created (dry run)
'//以上提示说明命令是正确的'
6.2 自动生成yaml格式的文件不保存
[root@master test]# kubectl run nginx-test01 --image=nginx --port=80 --replicas=2 --dry-run -o yaml	'//此命令直接生成yaml文件内容展示出来,并不会保存'
[root@master test]# kubectl run nginx-test01 --image=nginx --port=80 --replicas=2 --dry-run -o json	'//也可以生成json格式'
6.3 自动生成yaml格式的文件并保存
[root@master test]# kubectl run nginx-test01 --image=nginx --port=80 --replicas=2 --dry-run -o yaml > nginx-test01.yaml
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
[root@master test]# ls
nginx-service-test.yaml  nginx-test01.yaml  nginx-test.yaml	'//成功生成,可以在此基础上修修改改了'
6.4 将现有的资源生成模板并导出
[root@master test]# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
nginx-dbddb74b8-5s6h7       1/1     Running   1          9d	'//用此nginx来生成模板并导出'
nginx-test-d55b94fd-9zmdj   1/1     Running   0          11m
nginx-test-d55b94fd-b8lkl   1/1     Running   0          11m
nginx-test-d55b94fd-w4c5k   1/1     Running   0          11m
[root@master test]# kubectl get deployment/nginx --export -o yaml > nginx-test02.yaml
[root@master test]# ls
nginx-service-test.yaml  nginx-test01.yaml  nginx-test02.yaml  nginx-test.yaml
6.5 查看yaml文件某一字段的帮助信息
[root@master test]# kubectl explain pods.spec.containers
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值