Yaml文件详解

本文详细介绍了Kubernetes中用于管理资源对象的YAML文件,包括YAML的基本语法、Kubernetes API资源版本标签的查看,以及如何编写和理解YAML文件。文中还通过示例演示了创建Pod和Service,并解释了port、nodePort、targetPort和containerPort的概念。提供了使用`kubectl run`和`kubectl explain`命令简化YAML编写的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Kubernetes与yaml文件

1.Kubernetes支持管理资源对象的文件格式

2.YAML语法格式

3.查看api资源版本标签

4.写一个yaml文件demo

5.详解k8s中的port

6.创建yaml文件模板

7.怎样更轻松的写yaml


Kubernetes与yaml文件

1.Kubernetes支持管理资源对象的文件格式

Kubernetes支持YAML 和JSON 格式管理资源对象

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

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

2.YAML语法格式

●大小写敏感

●使用缩进表示层级关系

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

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

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

●"—"表示YAML格式, 一个文件的开始,用于分隔文件间

●“#"表示注释

3.查看api资源版本标签

K8S---apiVersion对照表:点击这里

kubectl api-versions

4.写一个yaml文件demo

mkdir /opt/demo
cd /opt/demo/

参考模板:
vim nginx-deployment.yaml
apiVersion: apps/v1   #指定api版本标签
kind: Deployment      #定义资源的类型/角色,deployment 为副本控制器,此处资源类型可以是Deployment、Job、 Ingress、 Service等
metadata:             #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment   #定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:             #定义资源标签(Pod的标签)
    app: nginx
spec:              #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
 replicas: 3       #定义副本数量
 selector :        #定义标签选择器
  matchLabels:     #定义匹配标签
    app: nginx     #匹配上面的标签,需与上面的标签定义的app保持一致
 template:         #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
  metadata:
    labels:
    
### Python解析YAML文件的方法及详解 #### 使用PyYAML库解析YAML文件 在Python中,`PyYAML`是一个常用的第三方库,用于读取和写入YAML格式的数据。它提供了丰富的功能来处理复杂的YAML结构。 要使用`PyYAML`,首先需要安装该库: ```bash pip install pyyaml ``` 导入必要的模块并加载YAML数据可以按照如下方式进行: ```python import yaml # 加载YAML字符串 data_str = """ name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - name: Jenny Smith age1: 12 """ # 解析YAML字符串到字典对象 data_dict = yaml.safe_load(data_str) print(data_dict) ``` 上述代码展示了如何将一个简单的YAML字符串转换成Python中的嵌套字典[^1]。 #### 自定义表示器(Representer)以支持复杂类型 当遇到非标准的Python对象时,可以通过自定义表示器将其转化为YAML可识别的形式。例如创建一个新的类实例,并希望将其保存至YAML文件中,则需先注册相应的表示器函数[^2]: 假设有一个名为Person的新类, ```python class Person: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def person_representer(dumper, obj): return dumper.represent_mapping('!person', {"first": obj.first_name, "last": obj.last_name}) yaml.add_representer(Person, person_representer) tom = Person("Tom", "Smith") with open('output.yaml', 'w') as f: yaml.dump(tom, f) ``` 此部分说明了通过添加自定义representer可以使特殊类型的对象被正确序列化为YAML文档的一部分[^2]。 #### 将数据存储回YAML文件 除了从现有的YAML源加载数据之外,还可以利用 `dump()` 方法把Python原生数据结构导出成为新的YAML文件[^4]: ```python import yaml data_to_write = { 'a': 1, 'b': [ {'key':'value'}, ['list item'] ], } with open('new_file.yaml','w') as outfile: yaml.dump(data_to_write,outfile,default_flow_style=False) ``` 以上例子演示了一个包含列表和其他复合元素在内的字典是如何被写出到外部YAML文件里的[^4]。 #### 处理大型或复杂配置项 对于更高级的应用场景来说,可能还会涉及到环境变量替换等功能,在这种情况下就需要深入理解锚点(`&`)与别名(`*`)机制以及如何结合这些特性构建动态化的配置管理系统[^1]. --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值