在前面的文章中,我们使用了较多的yaml文件,例如测试kubespary方式搭建的集群可用性,亦或者前文中我们搭建ingress-nginx的时候也是用了yaml文件,那么k8s中的yaml文件到底该如何来写,针对k8s中的yaml又该如何使用呢?
              
              
            
什么是yaml
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,亦或者是.yaml,如:nginx.yml 。
基本语法
1、大小写敏感2、使用缩进表示层级关系3、缩进不允许使用tab键,只允许使用空格来缩进4、缩进的空格数不重要,只要相同层级的元素对应即可5、“#” 表示缩进
数据类型
1、对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)2、数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)3、纯量(scalars):单个的、不可再分的值
根据这三种类型分别举个例子:
1、对象
对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。也可以使用 key:{key1: value1, key2: value2, ...}。还可以使用缩进表示层级关系;例如:key:child-key: valuechild-key2: value2
2、数组
以 - 开头的行表示构成一个数组:例如:-- A- B- C
3、纯量
字符串布尔值整数浮点数Null时间日期
yaml文件在k8s中的使用
1、查看资源版本标签
YAML文件开头需要编写标签信息,对应不同资源信息,查看方式如下:
[root@node1 ~]# kubectl api-versions# 会出现很多信息,我们主要关注下面几个常用的v1 # Kubernetes API的稳定版本,包含很多核心对象:pod、service等apps/v1 # 应用资源autoscaling/v1 # 弹性伸缩资源rbac.authorization.k8s.io/v1 # 权限控制资源certificates.k8s.io/v1 # 安全相关认证的api组合
2、yaml文件书写
在这里我们使用上一篇中我们使用过的测试ingress-nginx的时候,采用的tomcatdemo文件来做认识吧。
先把这个整体的yaml文件附上:
#deployapiVersion: apps/v1kind: Deploymentmetadata:name: tomcat-demospec:selector:matchLabels:app: tomcat-demoreplicas: 1template:metadata:labels:app: tomcat-demospec:containers:- name: tomcat-demoimage: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpineports:- containerPort: 8080---#serviceapiVersion: v1kind: Servicemetadata:name: tomcat-demospec:ports:- port: 80protocol: TCPtargetPort: 8080selector:app: tomcat-demo---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata:name: tomcat-demospec:rules:- host: tomcat.yunweijia.comhttp:paths:- path: /backend:serviceName: tomcat-demoservicePort: 80
首先我们看到这个文件分成了三段,每一段是不同的服务类型,例如第一段我们创建的是deployment,第二段创建的是service,第三段是创建的ingress端口映射;
然后再细化第一段:
apiVersion: apps/v1 # 指定api版本标签kind: Deployment # 定义资源的类型/角色,deployment为控制器metadata: # 定义资源的元数据信息name: tomcat-demo # 定义资源的名称,在同一个namespace空间中必须是唯一的# 其实下面还可以打个label,即标签,如下labels: #定义资源标签app: tomcat-demo # 标签的名字spec:selector # 选择器matchLabels: # 匹配标签app: tomcat-demo # 对应的namereplicas: 1 # 副本数量template: # 定义模板metadata: # 匹配上面的标签labels:app: tomcat-demo # 和上面保持一致spec:containers: # 定义容器信息- name: tomcat-demo # 容器名,要和标签/资源名称保持一致# 使用什么容器image: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpineports:- containerPort: 8080 # 定义容器对外的端口
细化第二段:
剩余内容请转至VX公众号 “运维家” ,回复 “129” 查看。













网友评论