前提条件:

  • K8S集群中正确部署了virtual-kubelet(serverless Kubernetes 默认集成)

ECI像原生K8S一样支持DownwardAPI,目前已经支持通过DownwardAPI传递以下信息到ECI实例:

  • metadata.annotations
  • metadata.labels
  • metadata.name
  • metadata.namespace
  • metadata.uid

本文以传递annotations/labels为例,将以下内容保存为pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: test-downwardapi
  labels:
    region: cn-beijing
    zone: cn-beijing-h
  annotations:
    eci/test: virtual-kubelet
spec:
  # ACK场景下可以通过nodeName指定调度到ECI
  # nodeName: virtual-node-eci-0
  containers:
    - name: nginx
      image: nginx
      command: ["sh", "-c"]
      args:
      - while true; do cat /etc/podinfo/labels; sleep 5; cat /etc/podinfo/annotations; sleep 5; done
      volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "labels"
            fieldRef:
              fieldPath: metadata.labels
          - path: "annotations"
            fieldRef:
              fieldPath: metadata.annotations

使用kubect创建ECI实例:

# kubectl create -f pod.yaml
pod/test-downwardapi created
# kubectl get pod test-downwardapi
NAME               READY   STATUS    RESTARTS   AGE
test-downwardapi   1/1     Running   0          32s
# kubectl logs -f test-downwardapi
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"
zone="cn-beijing-h"eci/test="virtual-kubelet"region="cn-beijing"