YAML是专门用来写配置文件的语言
YAML语法规则:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用TAB键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释,从这个字符一直到行位,都会被解析器忽略
在kubernets中,只需要知道两种结构类型即可:
List
Maps
使用YAML用于k8s定义带来的好处包括:
便捷性:不必添加大量的参数到命令行中执行命令
可维护性:YAML文件可以通过源控制,跟踪每次操作
灵活性:YAML可以创建比命令更加复杂的结构。
YAML Maps
Maps顾名思义指的是字典,即一个key:value的键值对信息。例如:
-------------------------
apiVersion: v1
kind: Pod
-----------为可选的分隔符,当需要在一个文件中定义多个结构的时候需要使用,上述内容表示有两个键apiVersion和Kind,分别对应的值为v1和Pod
Maps的value既能够对应字符串也能够对应一个Maps,例如:
apiVersion: v1
Kind:Pod
metadata:
name: ceph
lebels:
app: web
注:上述YAML文件中,metadata这个key对应的值为一个Maps而嵌套的lables这个值又是一个Map。实际使用中可视情况进行多层嵌套。
YAML处理器根据行缩进来知道内容之间的关联,上述例子中,使用两个空格作为缩进,但空格的数量并不重要,只是它至少要去一个空格并且所有缩进保持一致的空格数。
YAML list
List即列表,说白了就是数组,例如:
args
-Being
-Shanghai
-Shenzhen
-Guangzhou
创建Pod
=================================
apiVersion: v1
kind: Pod
metadata:
name: kube100-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: flaskapp-demo
image: jcdemo/flaskapp
ports: 8080
=================================
apiVersion: 此处值为v1,这个版本号需要根据安装的Kubernets版本和资源类型进行变化,不是写死的。
kind: 此处创建的Pod,根据实际情况,此处资源类型可以是Deployment、Job、Ingress、Service等。
metadata: 包含Pod的一些meta信息,比如名称、namespace、标签等信息。
spe:包括一些container,storage,volume以及其他的Kunernets需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可以在特定的Kubernets API找到万兆的Kubernets Pod的属性。
除了上述的基本属性外,还可以指定复杂的属性,包括容器启动运行的命令、使用参数、工作目录以及每次实例化是否重新拉取新的副本。还可以指定更深入的信息,例如容器的退出日志的位置。容器可选的设置包括:
name 、image、command、args、workingDir、ports、env、resoure、VoumeMounts、livenessProbe、redlinessProbe、livecycle、terminationMessagePath、imagePullPolicy、securityContext、sddin、stdinOnce、tty
了解Pod的定义后,将上面创建的Pod的YAML文件保存为Pod.yaml,然后执行
#kubectl apply -f pod.yaml