跳转至

kubernets ymal

1 通用部分

  • apiVersion <string>:必选,版本号,例如v1(必选)
  • kind <string>:资源类型,例如 Pod(必选)
  • metadata <Object>:资源的元数据(必选)
  • spec <Object>:资源的详细定义
  • 示例
apiVersion: v1
kind: Namespace
metadata:
  name: test

2 Pod

  • 常用字段:
  • spec
    • containers:容器相关定义
      • image:镜像
      • imagePullPolicy:镜像拉取策略
      • ports:暴露端口
      • env:设置容器内环境变量
      • volumeMounts:使用挂载的卷
    • restartPolicy:Pod重启策略
    • hostNetwork:是否使用主机网络,默认是false
    • affinity:节点的亲和性,用于计算Pod调度k8s集群中某个node上
    • volumes:卷定义,可使用nfs、hostPath等方式
  • 示例
apiVersion: v1
kind: Namespace
metadata:
  name: test
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: test
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: IfNotPresent       #镜像拉取策略[Never|Always|IfNotPresent]
      ports:
      - containerPort: 80           #容器内端口
        hostPort: 8080              #宿主机端口
        protocol: UDP               #协议类型[TCP|UDP|SCTP](默认TCP)
      - containerPort: 80
        hostPort: 8080
        protocol: TCP
      env:                          #环境变量
      - name: env1
        value: val1
      volumeMounts:
      - name: fs1
        mountPath: /fs1
        readOnly: false
  restartPolicy: Always                   #容器重启策略[Never|Always|OnFailure]
  hostNetwork: false                      #是否使用主机网络[true|false](默认false);如果使用,hostPort不能和containerPort不同
  #nodeName: node1                         #指定k8s节点名称,pod只会调度到此节点上
  #nodeSelector:                           #节点选择器,匹配k8s节点上含test=nginx的节点
  #  test: nginx
  affinity:                               #节点亲和性,pod调度到满足条件的节点上
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:               #必要要满足的条件
        nodeSelectorTerms:
        - matchExpressions:
          - key: test
            operator: In                                            #便签匹配运算符,有In, NotIn, Exists, DoesNotExist
            values:
            - nginx
      preferredDuringSchedulingIgnoredDuringExecution:              #优先满足的条件
      - weight: 1                                                   #权重,范围1-100
        preference:
          matchExpressions:
          - key: label-1
            operator: In
            values:
            - key-1
      - weight: 50
        preference:
          matchExpressions:
          - key: label-2
            operator: In
            values:
            - key-2
  volumes:
  - name: fs1
    hostPath:                             # hostPath方式挂载,此外还有nfs、ceph等等方式
      path: /root/fs1               #主机挂载点路径
      type: DirectoryOrCreate       #可选参数,默认空

2.1 节点亲和性

2.2 挂载

2.3 生命周期检查

2.4 生命周期钩子

3 Deployment

Deployment 是pod控制器的一种,实际上通常使用控制器来管理Pod,很少直接用Pod
  • 常用字段
  • spec
    • replicas:Pod副本数
    • selector:标签选择器,用于匹配template中定义的Pod
    • strategy:更新策略(影响镜像修改,扩缩容操作)
    • template:Pod模板,语法大致和Pod ymal语法相同
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 3                         #Pod副本数量
  selector:
    matchLabels:                      #匹配下面容器定义的标签
      app: nginx
  strategy:                           #更新策略
    type: RollingUpdate
    rollingUpdate:                    #滚动更新策略,当type: RollingUpdate时才能用
      maxSurge: 1                 #滚动更新时,最多比期望的副本数多几个pod maxSurge和maxUnavailable不能同时为0,否则冲突,无法滚动更新。可以使用百分比(30%)和数值方式(2)
      maxUnavailable: 1           #滚动更新时,最多比期望的副本数少几个pod
    type: RollingUpdate           #更新策略,[Recreate,RollingUpdate]。Recreate删除pod后再重建;RollingUpdate滚动更新,新老pod可以同时存在
  template:                           #这部分基本与pod中定义相似
    metadata:
      labels:
        app: nginx                #此标签用于上面selector匹配的
    spec:
      containers:
      - image: nginx
        name: nginx

4 Service