K8s华丽的资源编排(YAML)

717 阅读2分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

编写YAML注意事项

YAML 是一种简洁的非标记语言。

语法格式:

  • 缩进表示层级关系
  • 不支持制表符“tab”缩进,使用空格缩进
  • 通常开头缩进 2 个空格
  • 字符后缩进 1 个空格,如冒号、逗号等
  • “---” 表示YAML格式,一个文件的开始
  • “#”注释

1. YAML内容解析

在K8S部署一个应用的YAML内容大致分为两部分:

控制器定义:定义控制器属性

被控制对象:Pod模板,定义容器属性

具体字段意义:

apiVersionAPI版本
kind资源类型
metadata资源元数据
spec资源规格
replicas副本数量
selector标签选择器
templatePod模板
metadataPod元数据
specPod规格
containers容器配置

使用YAML创建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:
        - containerPort: 500

apiVersion:此处值是v1,这个版本号需要根据安装的Kubernetes版本和资源类型进行变化,记住不是写死的。

kind:此处创建的是Pod,根据实际情况,此处资源类型可以是Deployment、Job、Ingress、Service等。

metadata:包含Pod的一些meta信息,比如名称、namespace、标签等信息。

spec:包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可在特定Kubernetes API找到完整的Kubernetes Pod的属性。

2. 资源字段太多,记不住怎么办?

很多同学YAML不会写!主要原因还是用的少,里面都是由于各个资源组成,熟悉了每个资源应用,自然就会写了,但也不用等到熟悉各种资源,这里教你几个技巧,帮助快速上手。

  • 用run命令生成部署模板

    kubectl create deployment nginx --image=nginx:1.14 -o yaml --dry-run> my-deploy.yaml

  • 用get命令将已有部署的应用yaml导出

    kubectl get my-deploy/nginx -o=yaml --export > my-deploy.yaml

  • 如果某个字段单词不记得了,可以通过explain查看更详细的帮助文档获得

    kubectl explain pods.spec.containers