kubernetes专辑之03定义清单YAML文件

简介: Kubernetes系列

k8s所有的配置文件以及资源的定义配置文件都是基于YAML格式的,所以熟悉并掌握YAML是必要的。先说说YAML常用的校验工具,然后在细说YAML的基本语法。

yaml工具

pip3 install pyyaml
python3 -c 'import yaml, sys; yaml.safe_load(sys.stdin)' < cfg.yaml

image-20200725210917109

  • 获取yaml的值的工具 shyaml
cat yapi-deployment.yml | shyaml get-value metadata.namespace
kube-ops
# 更多使用帮助请参考github上的文档

image-20200725222351846

YAML的设计目标

使用 YAML 文件的优点:

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

Yaml基础语法与技巧

  • 开始符号: ---用于表示开始的符号,在一个文件中包含多个YAML设定的时候使用非常常见。
  • 结束符号:用于表示yaml文件结束
  • 注释:YAML中使用#表示注释
apiVersion: v1 # #后面是注释的部分
  • 字符支持:YAML使用 Unicode 编码作为字符标准编码,可以使用UTF-8、UTF-16、UTF-32字符集
date: 2020-07-26
info:
  - name: "云原生生态圈"
tags:
  - num: 1
  - descript: "writing somthing here" 
  • 缩进:YAML中缩进是非常重要的规范,不支持Tab,支持空格,没有严格要求空格个数,但是需要确保同一层次的左侧对齐,下图就是一个错误的例子,缩进不规范

image-20200725221333627

  • 单行注释:单行注释使用#进行标记,可以在单行的任何位置开始注释的内容
  • 多行注释:不提供特殊的多行注释,使用多行行首的单行注释#实现多行注释的需求
info:
# 下面是两个空格,然后一个短横线
  - name: Marionxue
  • 基本数据类型:支持整型浮点型时间戳类型Null等基本数据类型
 integer: 12345     # 整数标准形式
 octal: 0o34        # 八进制表示,第二个是字母 o
 hex: 0xFF          # 十六进制表示

 float: 1.23e+3     # 浮点数
 fixed: 13.67       # 固定小数
 minmin: -.inf      # 表示负无穷
 notNumber: .NaN    # 无效数字

 null:              # 空值
 boolean: [true, false] # 布尔值
 string: '12345'    # 字符串

 date: 2015-08-23   # 日期
 datetime: 2015-08-23T02:02:00.1z  # 日期时间
 iso8601: 2015-08-23t21:59:43.10-05:00  # iso8601 日期格式
 spaced: 2015-08-23 21:59:43.10 -5      # ?
  • 组合数据类型:支持键/值方式和列表类型,并可进行嵌套组合
  • 键/值方式:使用冒号:进行分隔,也可使用{}结合逗号进行表达
  • 列表类型:使用横线-进行分隔,也可使用[]结合逗号进行表达
--- # start
- [dog, cat, docker] #list
- [apache, tomcat]
- site: {devopsman:www.devopsman.cn, kube: www.kubemaster.top}  # key/value list
  • 单引号与双引号:字符串类型可以不使用单引号和双引号,使用单引号和双引号与不使用的时候在特殊字符及其转义的时候有些细微的区别,可用倒斜线(\)进行特殊字符转义,但最终都表示为一行。
  • 区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(使用符号|)或新行折叠(使用符号>)两种方式,一般用在较长的描绘性说明中

    • |表示保留区块中的回车换行
    • >表示将区块中的回车换行替换为空行,最终连成一行
- describle: |
        Hi,all:
            my name is xxx.
- code: > # 注意: 区块中的换行会替换成空格
        fmt.Println("姓名: %s",
         name)
  • 强制类型转换:可以使用!!用于强制类型转换
---
account-limiter:
  account-blacklist:
    - 1
    - 2
    - 3
---
account-limiter:
  account-blackset: !!set {1, 2, 3} # 强制转换为set
...

# 以下为内置的类型
!!int               # 整数类型
!!float             # 浮点类型
!!bool              # 布尔类型
!!str               # 字符串类型
!!binary            # 也是字符串类型
!!timestamp         # 日期时间类型
!!null              # 空值
!!set               # 集合
!!omap, !!pairs     # 键值列表或对象列表
!!seq               # 序列,也是列表
!!map               # 键值表

# example
isString: !!str 2020-07-26     # 强调是字符串不是日期数据
picture: !!binary |            # Base64  图片
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
  • 重复性内容:可以使用锚点标记&和应用标记*结合使用可以处理重复性的内容
 ---
 tags:
   - yaml
   # Following node labeled SS
   - &SS "yaml tool"            # 定义要复制的数据
 desc:
   - *SS # 这里是数据复制目标
   - pyyaml
  • 保留字符:@和`为当前YAML规格的保留字符
☸️  k8sdev🔥 default  ~  🐳 👉 cat demo.yaml
---
tags:
  - yaml
  # Following node labeled SS
  - &SS "yaml tool"            # 定义要复制的数据
desc:
  - *SS # 这里是数据复制目标
  - pyyaml
☸️  k8sdev🔥 default  ~  🐳 👉 cat demo.yaml| shyaml get-value desc.0
yaml tool%                                                                                                                                                                                     ☸️  k8sdev🔥 default  ~  🐳 👉 cat demo.yaml| shyaml get-value desc.1
pyyaml%                                                                                                                                                                                        ☸️  k8sdev🔥 default  ~  🐳 👉 cat demo.yaml| shyaml get-value tags.1
yaml tool%

YAML的注意事项

  • 空白字符限制:在使用逗号及冒号时,后须接一个空白字符
  • YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16
  • 使用空白字符(不能使用Tab)分层,同层元素左侧对齐
  • 单行注解由井字号( # )开始,可以出现在行中任何位置
  • 每个清单成员以单行表示,并用短杠+空白(- )起始
  • 每个杂凑表的成员用冒号+空白(: )分开键和值
  • 杂凑表的键值可以用问号 (?)起始,表示多个词汇组成的键值
  • 字串一般不使用引号,但必要的时候可以用引号框住
  • 使用双引号表示字串时,可用倒斜线(\)进行特殊字符转义
  • 区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(使用符号|)或新行折叠(使用符号>)两种方式
  • 在单一档案中,可用连续三个连字号(---)区分多个档案
  • 可选择性的连续三个点号(...)用来表示档案结尾(在流式传输时非常有用,不需要关闭流即可知道到达结尾处)
  • 重复的内容可使从参考标记星号 (*)复制到锚点标记(&)
  • 指定格式可以使用两个惊叹号 ( !! ),后面接上名称

YAML可以用来做什么

当数据能够容易的被读懂的时候,任何事情都会变得简单。
  • 配置文件configuration files
  • 日志文件log files
  • 进程间消息传递interprocess messaging
  • 跨语言数据共享cross-language data sharing
  • 对象持久性object persistence
  • 复杂数据结构debugging of complex data structures

YAML与 JSON 和 XML 的关系

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

在需要额外功能的情况下,可以轻松地从 JSON 迁移到 YAML。YAML 是从 XML 衍生而来。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
Kubernetes 安全 网络协议
Kubernetes实用指令:通过dry-run生成部署与服务的YAML配置
总结起来, 使用 ` -- dry—run = client `- o yam l' 参数能够帮助用户预览 Kubernetes 资源定义并且确保它们符合预期效果且没有立即影响现有集群断层结构. 这种做法对于新手学习 K8s 资源规范、测试新策略或者审核现有策略都非常有效率与安全.
426 4
|
5月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
180 4
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
348 2
k8s学习--YAML资源清单文件托管服务nginx
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
425 3
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
170 0
ingress相关yaml文件报错且相关资源一切正常解决方法
|
4月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
454 1
|
4月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
312 89
|
9月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
500 9
|
9月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。

推荐镜像

更多