k8s部署-22-yaml文件怎么写,规则是什么,在k8s中分别有什么含义

网友投稿 221 2022-09-12

k8s部署-22-yaml文件怎么写,规则是什么,在k8s中分别有什么含义

在前面的文章中,我们使用了较多的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文件附上:

#deployapiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-demospec: 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---#serviceapiVersion: v1kind: Servicemetadata: name: tomcat-demospec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: tomcat-demo---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata: name: tomcat-demospec: rules: - host: tomcat.yunweijia.com 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 # 定义容器对外的端口

细化第二段:

#serviceapiVersion: v1 # 指定api版本标签kind: Service # 定义资源的类型/角色metadata: # 定义资源的元数据信息 name: tomcat-demo # 资源的名字spec: ports: - port: 80 # 对外暴露端口 protocol: TCP # 端口协议 targetPort: 8080 # 容器端口 selector: # 选择器 app: tomcat-demo

细化第三段:

#ingressapiVersion: extensions/v1beta1 # 定义api版本标签kind: Ingress # 定义资源类型,ingress就是通信协议中的外访内metadata: # 资源的元数据信息 name: tomcat-demospec: rules: # 路由 - host: tomcat.yunweijia.com # dns paths: - path: / backend: serviceName: tomcat-demo # 对应的服务 servicePort: 80 # 端口访问

便于理解的话,可以按照这个顺序来看:

ingress-->service-->deployment

最需要注意的是,资源一定要对应正确,别对应去别的服务上,那就得不偿失了。

我在这里只是以ingress-nginx为例,介绍了tomcat-demo的yaml文件,肯定还有很多没有涉及到的,我们在后面的k8s实验中会一一提到,还是那句话,会搭建,只是开始,要学以致用。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s部署-21-ingress-nginx实现原理和部署,并简单使用
下一篇:粉丝经济这张营销王牌,撑起了户外广告的半边天!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~