Kubernetes只支持YAML和JSON格式创建资源对象。JSON格式一般用于接口之间消息的传递,YAML是专门用来写配置文件的语言,非常简洁和强大,可读性高。它实质上是一种通用的数据串行化格式。

一、YAML语法规则

  • 缩进标识层级关系

  • 不支持制表符缩进,使用空格缩进

  • 通常开头缩进两个空格

  • 字符后缩进一个空格,如冒号,逗号等

  • "---"表示YAML格式,一个文件的开始

  • "#"表示注释

二、K8s中YAML字段类型

  • 常用字段
apiVersionAPI版本
kind资源类型
metadata资源元数据
spec资源规格
replicas副本数量
selector标签选择器
templatepod模板
metadata

pod原数据

specpod规格
containers容器配置
resources资源管理
  • apiVersion

      1. apiVersion支持类型

# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
......

     2. apiVersion 选型

        从上得知apiVersion类型如此之多,那到底我们应该选那个,可以根据对应的资源类型来选择

# 可以参考到某个kind资源拥有的字段以及对应的apiVersion

# kubectl explain {kind_name}
# kubectl explain deployment
KIND:     Deployment
VERSION:  apps/v1

DESCRIPTION:
     Deployment enables declarative updates for Pods and ReplicaSets.
......
  • kind

      1. 资源类型

# kubectl api-resources -o wide --namespaced=true
NAME                        SHORTNAMES   APIGROUP                    NAMESPACED   KIND                       VERBS
bindings                                                             true         Binding                    [create]
configmaps                  cm                                       true         ConfigMap                  [create delete deletecollection get list patch update watch]
endpoints                   ep                                       true         Endpoints                  [create delete deletecollection get list patch update watch]
events                      ev                                       true         Event                      [create delete deletecollection get list patch update watch]
limitranges                 limits                                   true         LimitRange                 [create delete deletecollection get list patch update watch]
persistentvolumeclaims      pvc                                      true         PersistentVolumeClaim      [create delete deletecollection get list patch update watch]
pods                        po                                       true         Pod                        [create delete deletecollection get list patch update watch]
.......

    2. 资源类型支持字段

# kubectl explain ingresses  --recursive
KIND:     Ingress
VERSION:  extensions/v1beta1

DESCRIPTION:
     Ingress is a collection of rules that allow inbound connections to reach
     the endpoints defined by a backend. An Ingress can be configured to give
     services externally-reachable urls, load balance traffic, terminate SSL,
     offer name based virtual hosting etc. DEPRECATED - This group version of
     Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release
     notes for more information.

FIELDS:
   apiVersion	<string>
   kind	<string>
   metadata	<Object>
      annotations	<map[string]string>
      clusterName	<string>
......

三、K8s之YAML文件

  • nginx yaml 文件
# cat nginx.yml
apiVersion: v1      # 指定api版本,此值必须在kubectl apiversions中
kind: Pod           # 指定创建资源的角色/类型
metadata:           # 资源的元数据/属性
  name: test-pod    # 资源的名字,在同一个namespace中必须唯一
  namespaces: nginx 
  labels:           # 设定资源的标签
    k8s-app: nginx 
    version: v1
spec:                      # specification of the resource content 指定该资源的内容
  restartPolicy: Always    # 表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
  nodeSelector:            # 节点选择,先给主机打标签kubectl label nodes loc-k8s-node1  zone=loc-k8s-node1
    zone: loc-k8s-node1
  containers:
  - name: nginx            # 容器的名字
    image: nginx:latest    # 容器使用的镜像地址
    imagePullPolicy: Never # 三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略
                           # Always,每次都检查
                           # Never,每次都不检查(不管本地是否有)
                           # IfNotPresent,如果本地有就不检查,如果没有就拉取
    resources:             # 资源管理
      requests:            # Request用于预分配资源,当集群中的节点没有request所要求的资源数量时,容器会创建失
        cpu: 0.1           # CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
        memory: 256Mi      # 内存使用量
      limits:              # 资源限制
        cpu: 0.5   
        memory: 1000Mi
    ports:
    - containerPort: 80    # 容器对外的端口
      name: httpd          # 名称
      protocol: TCP
    livenessProbe:         # pod内容器健康检查的设置
      httpGet:             # 通过httpget检查健康,返回200-399之间,则认为容器正常
        path: /            # URI地址
        port: 80   
        #host: 127.0.0.1   # 主机地址
        scheme: HTTP       # 连接协议
      timeoutSeconds: 5    # 检测的超时时间
      periodSeconds: 15    # 检查间隔时间
    volumeMounts:          # 挂载持久存储卷 
    - name: volume         # 挂载设备的名字,与volumes[*].name 需要对应
      mountPath: /data     # 挂载到容器的某个路径下
      readOnly: True
  volumes:                 # 定义一组挂载设备
  - name: volume           # 定义一个挂载设备的名字
    #meptyDir: {}
    hostPath:
      path: /data          # 挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
    #nfs
  • 快速生产yaml文

    1. 针对未部署的项目生成yaml文件格式模板

# kubectl create deployment web --image=nginx -o yaml --dry-run

    2. 通过web界面配置yaml文件

https://github.com/dotbalo/ratel-doc/blob/master/cluster/Install.md

    3. 通过vs code安装kubernetes插件编写,有提示

    4. 针对已经部署的项目导出yaml文件

# kubectl get deploy nginx -o yaml --export > nginx.yaml

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐