在前面的文章中,我们使用了较多的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: value
child-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文件附上:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-demo
spec:
selector:
matchLabels:
app: tomcat-demo
replicas: 1
template:
metadata:
labels:
app: tomcat-demo
spec:
containers:
- name: tomcat-demo
image: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpine
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: tomcat-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: tomcat-demo
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat-demo
spec:
rules:
- host: tomcat.yunweijia.com
http:
paths:
- path: /
backend:
serviceName: tomcat-demo
servicePort: 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 # 对应的name
replicas: 1 # 副本数量
template: # 定义模板
metadata: # 匹配上面的标签
labels:
app: tomcat-demo # 和上面保持一致
spec:
containers: # 定义容器信息
- name: tomcat-demo # 容器名,要和标签/资源名称保持一致
# 使用什么容器
image: registry.cn-hangzhou.aliyuncs.com/liuyi01/tomcat:8.0.51-alpine
ports:
- containerPort: 8080 # 定义容器对外的端口
细化第二段:
剩余内容请转至VX公众号 “运维家” ,回复 “129” 查看。