我们在安装 kubernetes 集群的时候使用了一些 YAML 文件来创建相关的资源,所以我们先来简单看一看 YAML 文件是如何工作的,并使用 YAML 文件来定义一个 kubernetes pod,然后再来定义一个 kubernetes deployment
YAML 基础
它的基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
- Lists
- Maps
Maps
首先我们来看看 Maps,我们都知道 Map 是字典,就是一个 key:value 的键值对,Maps 可以让我们更加方便的去书写配置信息,例如:
{"apiVersion": "v1", "kind": "pod" }
我们在创建一个相对复杂一点的 YAML 文件,创建一个 KEY 对应的值不是字符串而是一个 Maps:

上面的 YAML 文件,metadata 这个 KEY 对应的值就是一个 Maps 了,而且嵌套的 labels 这个KEY 的值又是一个 Map,你可以根据你自己的情况进行多层嵌套。上面我们也提到了 YAML 文件的语法规则,YAML 处理器是根据行缩进来知道内容之间的关联性的。比如我们上面的 YAML 文件,我用了两个空格作为缩进,空格的数量并不重要,但是你得保持一致,并且至少要求一个空格(什么意思?就是你别一会缩进两个空格,一会缩进4个空格)。我们可以看到 name 和 labels 是相同级别的缩进,所以 YAML 处理器就知道了他们属于同一个MAP,而 app 是 labels 的值是因为 app 的缩进更大。
Lists
Lists 就是列表,说白了就是数组,在 YAML 文件中我们可以这样定义:


使用 YAML 创建 Pod
现在我们已经对 YAML 文件有了大概的了解了,我相信你应该没有之前那么懵逼了吧?我们还是来使用 YAML 文件来创建一个 DeploymentAPI 说明: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/
---
apiVersion: v1
kind: Pod
metadata: #元数据信息
name: first-pod #kubectl get pods 和 登陆容器显示的名字
labels: #标签,可以作为查询条件 kubectl get pods -l
app: tomcat
node: devops-103
spec:
containers: #容器
- name: tomcat #容器名称
image: docker.io/tomcat #使用的镜像
ports:
- containerPort: 8080
- name: nginx #容器名称
image: docker.io/nginx #使用的镜像
ports:
- containerPort: 80
# 设置env,登陆到容器中查看环境变量, DEME_GREETING 的值是 "hello from the enviroment"
env:
- name:GREETING
value: "hello from the environment" #规格
apiVersion,这里它的值是 v1,这个版本号需要根据我们安装的 kubernetes 版本和资源类型进行变化的,记住不是写死的kind,这里我们创建的是一个 Pod,当然根据你的实际情况,这里资源类型可以是Deployment、Job、Ingress、Service 等待。metadata:包含了我们定义的 Pod 的一些 meta 信息,比如名称、namespace、标签等等信息。spec:包括一些 containers,storage,volumes,或者其他 Kubernetes 需要知道的参数,以及诸如是否在容器失败时重新启动容器的属性。你可以在特定 Kubernetes API 找到完整的 Kubernetes Pod 的属性。
nameimagecommandargs
workingDirportsenvresourcesvolumeMountslivenessProbereadinessProbelivecycleterminationMessagePathimagePullPolicysecurityContextstdinstdinOncetty

创建 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment #//部署名称
labels:
app: nginx
spec:
replicas: 3 #//副本数量
selector: #//Pod选择规则
matchLabels:
app: nginx
template:
metadata:
labels: #//Pods标签
app: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:1.7.9
ports:
- containerPort: 80
terminationGracePeriodSeconds: 30
注意这里的 apiVersion 对应的值是 app/v1 ,当然 kind 要指定为
$ kubectl create -f deployment.yamldeployment "nginx-deployment" created

可以使用http://www.yamllint.com/去检验 YAML 文件的合法性。


3546



被折叠的 条评论
为什么被折叠?



