apiVersion: v1
kind: Pod

        可以看到由kind、apiVersion、metadata、spec和status等几个部分组成。

1 kind

    kind表明对象。对象(objects):例如Pod、RC、Service、Namespace及Node等

2 apiVersion

   表明API的版本号

3 metadata

    资源对象的元数据定义,是集合类的元素类型,包含一组由不同名称定义的属性

  • namespace:对象所属的命名空间,默认为“default”的系统命名空间
  • name:对象的名字,在一个命名空间中名字应具备唯一性
  • uid:系统为每个对象生成的唯一ID

   此外,每种对象还应该包含以下几个重要元数据。

    labels:map标签,通常用于标签选择器(Label Selector),用来匹配目标对象

  • annotations:用户可定义的“注解”,map,被Kubernetes内部进程或者某些外部工具使用,用于存储和获取关于该对象的特定元数据。
  • resourceVersion:用于识别该资源内部版本号的字符串,在用于Watch操作时,可以避免在GET操作和下一次Watch操作之间造成的信息不一致,客户端可以用它来判断资源是否改变。该值应该被客户端看作不透明,且不做任何修改就返回给服务端。
  • creationTimestamp:记录创建对象时的时间戳
  • deletionTimestamp:记录删除对象时的时间戳
  • selfLink:通过API访问资源自身的URL,例如一个Pod的link可能是/api/v1/namespaces/ns36aa8455/pods/sc-cluster-test-1-6bc58d44d6-r8hld
metadata:
  creationTimestamp: 2018-06-12T03:02:29Z
  generateName: sc-cluster-test-1-6bc58d44d6-
  labels:
    kubeapp: sc-cluster-test-1
    pod-template-hash: "2671480082"
  name: sc-cluster-test-1-6bc58d44d6-r8hld
  namespace: ns36aa8455
  ownerReferences:
  - apiVersion: extensions/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: sc-cluster-test-1-6bc58d44d6
    uid: 2d9b9fff-6dec-11e8-9290-005056839655
  resourceVersion: "6674931"
  selfLink: /api/v1/namespaces/ns36aa8455/pods/sc-cluster-test-1-6bc58d44d6-r8hld
  uid: 0b0699db-6ded-11e8-9290-005056839655

4 spec

     描述的主体部分都在spec里给出,持久化到etcd中保存,系统通过spec的描述来创建或更新对象,以达到用户期望的状态

spec:
  containers:
  - image: 10.12.40.217/paas-k8s/sc-cluster:latest
    imagePullPolicy: Always
    name: sc-cluster-test-1
    ports:
    - containerPort: 20888
      name: 6f71997b94
      protocol: TCP
    resources:
      limits:
        cpu: "1"
        memory: 1Gi
      requests:
        cpu: 500m
        memory: 1Gi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /data
      name: sc-cluster-test-10
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-jtn4n
      readOnly: true
  dnsPolicy: ClusterFirst
  nodeName: node7
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  volumes:
  - hostPath:
      path: /data
      type: ""
    name: sc-cluster-test-10
  - name: default-token-jtn4n
    secret:
      defaultMode: 420
      secretName: default-token-jtn4n

5 status

     对象在系统中的当前状态信息以Pod为例,Pod的status信息主要包括conditions、containerStatuses、hostIP、phase、podIP、startTime等

  • phase:对象所处的生命周期阶段,Pending(创建中)Running Active(正在运行中)Terminated(已终结)
  • condition:表示条件,由条件类型和状态值组成,目前仅有一种条件类型Ready,对应的状态值可以为True、False或Unknown。一个对象可以具备多种condition,而condition的状态值也可能不断发生变化,condition可能附带一些信息,例如最后的探测时间或最后的转变时间。
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: 2018-06-12T03:04:52Z
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: 2018-06-12T03:04:53Z
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: 2018-06-12T03:02:29Z
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://65bc9886543f835e65be8afb9e7a12772ffd739f9035e33efeb7d3accb53ca54
    image: 10.12.40.217/paas-k8s/sc-cluster:latest
    imageID: docker-pullable://10.12.40.217/paas-k8s/sc-cluster@sha256:74e7b431c7bcac48ebfd0ee5b76bb75c10400dbf206f27fe1a0fe2a4cd1888c2
    lastState: {}
    name: sc-cluster-test-1
    ready: true
    restartCount: 0
    state:
      running:
        startedAt: 2018-06-12T03:04:53Z
  hostIP: 10.12.51.172
  phase: Running
  podIP: 10.233.100.159
  qosClass: Burstable
  startTime: 2018-06-12T03:04:52Z

pod phase 可能存在的值

  •     Pending: Pod 已经被 kubernetes 接收,但有一个或者多个容器镜像尚未创建,等待时间包括调度,Pod的时间和通过网络下载镜像的时间,可能需要些时间
  •    Running: 该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建,至少有一个容器正在运行,或者正处于启动或重启状态
  •    Succeeded: Pod中所有的容器都被成功终止,并且不会在重启
  •    Failed: Pod中所有容器都已终止,并且至少有一个容器是因为失败终止(容器以非0状态退出或者被系统终止)
  •    Unknown: 因为某些原因无法获取 Pod 状态,通常因为与 Pod 所在主机通信失败

===============================================================================================

===============================================================================================

10. 对于 Deployment 

  对于 stragegy 指定更新 pod 的策略,recreate / rollingUpdate,默认值为 rollingUpdate。

   recreate 在创建出新的 pod 之前会 kill 掉已存在的 pod 

  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 25%
    type: RollingUpdate

  maxSurge:1 表示滚动升级时会先启动 1 一个 pod 也就是在 DESIRED 数量基础上额外启动的 pod 数量,或者可以指定 maxSurge: 25% 意味着可以在 DESIRED 数量基础上先创建 DESIRED * 25% 数量个新 pod

  maxUnavailable:指的是在滚动升级过程中,可以允许最大不可用 pod 个数

         volumeMounts:          #挂载 volumes
          - name: log-cache
            mount: /tmp/log
          - name: sdb           #该卷跟随容器销毁,挂载一个目录
            mountPath: /data/media    
          - name: nfs-client-root        #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
            mountPath: /mnt/nfs
          - name: example-config  #高级用法第1种,将ConfigMap的key1,key2分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
            mountPath: /etc/config       
          - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)

  #使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容
  volumes:
  - name: log-cache
    emptyDir: {}
  - name: sdb  #挂载宿主机上面的目录
    hostPath:
      path: /any/path/it/will/be/replaced
  - name: example-config     #ConfigMap文件内容到指定路径使用
    configMap:
      name: example-config   #ConfigMap中名称
      items:
      - key: key1                 #ConfigMap中的Key
        path: path/to/key1        #指定目录下的一个相对路径path/to/key1
      - key: key2                 #ConfigMap中的Key
        path: path/to/key2        #指定目录下的一个相对路径path/to/key2
  - name: nfs-client-root         #供挂载NFS存储类型
    nfs:
      server: 10.42.0.55          #NFS服务器地址
      path: /opt/public           #showmount -e 看一下路径
  - name: rbd-pvc                 #挂载PVC磁盘
    persistentVolumeClaim:
      claimName: rbd-pvc1         #挂载已经申请的pvc磁盘
Logo

开源、云原生的融合云平台

更多推荐