目录
YAML资源清单
(一)YAML 语言
(1)基本语法
(2)支持的数据结构
(二)通过资源清单管理容器资源
YAML 语法格式:
创建Service资源清单
(三)使用kubectl命令创建yaml模板
1、创建deployment模板
2、查看创建的模板
3、创建tomcat容器资源
4、查看创建状态
5、创建service模板
6、编辑service模板
7、创建service资源
8、查看创建状态
9、访问测试:
YAML资源清单
在 Kubernetes 中可以使用 YAML 格式的文件来创建符合预期期望的 Pod,这样的YAML 文件一般称之为资源清单。
(一)YAML 语言
YAML 语言是一个可读性高,用来表达数据序列的语言格式。YAML 是"YAMLAin't a MarkupLanguage"(YAML 不是一种标记语言)的递归缩写。在开发这个语言时,YAML 的意思其实是:"YetAnother Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
(1)基本语法
·缩进时不允许使用 Tab 键,只允许使用空格;
·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;
·# 用于标识注释,从这个字符一直到行尾,都会被解释器忽略。
(2)支持的数据结构
·对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/ 字典(dictionary);
·数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list);
·纯量(scalars):单个的、不可再分的值字符串。包括布尔值、整数、浮点数、Null、时间、日期。
(二)通过资源清单管理容器资源
前面介绍了使用 kubectl 命令创建容器资源方法。基于这种命令方式创建容器资源,优点在于简单直观快捷、上手比较快,适合临时测试或实验。除了 kubectl 命令方式创建资源之外,还可以通过 YAML 配置文件来创建容器资源。
基于 YAML 配置文件创建容器资源的方式,优点在于配置文件提供了创建资源的模板,能够重复部署,可以像管理代码一样管理部署,适合正式的、跨环境的、规模化部署。
YAML 语法格式:
·缩进标识层级关系;
·不支持制表符(Tab键)缩进,使用空格缩进;
·通常开头缩进两个空格;
·字符后缩进一个空格,如冒号、逗号等;
·“---”表示 YAML 格式,一个文件的开始;
·“#”表示注释。
通过 kubectl api-versions 查看以 group/version 的格式显示服务器所支持的 API 版本。
[root@k8s-master ~]# kubectl api-versions
在创建 Deployment 资源清单之前先创建 demo 目录,用于存放资源清单的文件。在创建的 nginx-deployment.yaml 资源清单中,定义以下信息。
kind:指定资源类型为 deployment;
metadata:为元数据对象;
name:指定资源 deployment 的名称;
labels:为标签,定义标签选择器为 app: nginx,和 template 定义的遥相呼应,目的在于明确标识对象的属性。启动 Pod 的时候,通过 nodeSelector 指定要调度到的 node 节点的标签;
spec:为详细定义对象;
replicas:定义副本数为 3;
matchLabels :用 于定 义一 组 Label , 与直 接写 在 Selector 中 作用 相同 。
matchExpression :用于定义一组基于集合的筛选条件,可用的条件运算符包括:In、NotIn、Exists 和 DoesNotExist;
template:为模板,这里是 Pod 的定义。定义标签选择器为 app: nginx,容器名称为 nginx,为镜像 1.19.6,对外暴露的端口为 80。
apiVersion: apps/v1 #指定API版本
kind: Deployment #指定资源类型
metadata: #指定属性
name: nginx-deployment #指定名称
labels: #定义标签
app: nginx
spec: #定义详细信息
replicas: 3 #指定副本数量
selector: #定义选择器信息
matchLabels:
app: nginx
template: #指定模板
metadata:
labels:
app: nginx
spec: #定义容器信息
containers:
- name: nginx
image: nginx:1.19.6
ports:
- containerPort: 80
[root@k8s-master ~]# mkdir k8s
[root@k8s-master ~]# cd k8s
[root@k8s-master k8s]# vim nginx-deployment.yaml
创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。
[root@k8s-master k8s]# kubectl create -f nginx-deployment.yaml
[root@k8s-master k8s]# kubectl get pods
创建Service资源清单
在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。
[root@k8s-master k8s]# vim nginx-service.yaml
[root@k8s-master k8s]# kubectl create -f nginx-service.yaml
service/nginx-service created
[root@k8s-master k8s]# kubectl get svc
[root@k8s-master k8s]# kubectl get gods
访问测试
[root@k8s-master ~]# elinks --dump http://192.168.100.131:32112
[root@k8s-master ~]# elinks --dump http://192.168.100.132:32112
[root@k8s-master ~]# elinks --dump http://192.168.100.133:32112
Ps备注:创建Service资源清单时。记得一定要有pods的存在,也就是要有服务,才可以暴露端口,不然会出现下列情况!
[root@k8s-master k8s]# kubectl create -f nginx-service.yaml
[root@k8s-master k8s]# kubectl get gods
访问测试,访问不成功!因为没有nginx服务存在!
(三)使用kubectl命令创建yaml模板
1、创建deployment模板
[root@k8s-master ~]# kubectl create deployment tomcat --image=tomcat:8 -o yaml --dry-run > tomcat-deployment.yaml
2、查看创建的模板
[root@k8s-master ~]# vim tomcat-deployment.yaml
3、创建tomcat容器资源
[root@k8s-master ~]# kubectl create -f tomcat-deployment.yaml
4、查看创建状态
[root@k8s-master ~]# kubectl get pod
5、创建service模板
[root@k8s-master ~]# kubectl expose deployment tomcat --port=8080 --target-port=8080 --type=NodePort -o yaml --dry-run >tomcat_service.yaml
6、编辑service模板
[root@k8s-master ~]# vim tomcat_service.yaml
7、创建service资源
[root@k8s-master ~]# kubectl create -f tomcat_service.yaml
8、查看创建状态
[root@k8s-master ~]# kubectl get svc
9、访问测试: