ECI Pod(即ECI執行個體)的中繼資料可以提供關於Pod及其容器的資訊用於管理和使用容器,例如名稱、ID等基本資料,以及IP地址、網卡等網路資訊等。本文介紹如何在容器內擷取中繼資料,將ECI Pod資訊和容器Meta資料呈現給運行中的容器。
方式一:通過MetaServer訪問中繼資料
您可以使用以下方式擷取ECI執行個體中繼資料。
串連容器。具體操作,請參見調試ECI執行個體。
執行以下命令訪問中繼資料的根目錄。
curl http://100.100.100.200/latest/meta-data/在URL中添加具體的中繼資料名稱即可擷取具體的中繼資料。
例如:執行以下命令擷取執行個體ID。
curl http://100.100.100.200/latest/meta-data/instance-idECI執行個體目前能擷取的基本執行個體中繼資料項如下表所示:
執行個體中繼資料項
說明
/dns-conf/nameservers
執行個體的DNS配置。
/eipv4
執行個體的Elastic IP Address(IPv4類型)。
/hostname
執行個體的主機名稱,對應ContainerGroupName。
/instance-id
執行個體ID。
/mac
執行個體的MAC地址。
/network/interfaces/
網卡的MAC地址清單。
/network/interfaces/macs/[mac]/network-interface-id
網卡的標識ID,其中[mac]參數需要替換為執行個體MAC地址。
/network/interfaces/macs/[mac]/netmask
網卡對應的子網路遮罩。
/network/interfaces/macs/[mac]/vswitch-cidr-block
網卡所屬的虛擬交換器IPv4 CIDR段。
/network/interfaces/macs/[mac]/vpc-cidr-block
網卡所屬的VPC IPv4 CIDR段。
/network/interfaces/macs/[mac]/private-ipv4s
網卡分配的私網IPv4地址清單。
/network/interfaces/macs/[mac]/vpc-ipv6-cidr-blocks
網卡所屬的VPC IPv6 CIDR段,僅支援已配置了IPv6的VPC類型執行個體。
/network/interfaces/macs/[mac]/vswitch-id
網卡所屬安全性群組的虛擬交換器ID。
/network/interfaces/macs/[mac]/vpc-id
網卡所屬安全性群組的VPC ID。
/network/interfaces/macs/[mac]/primary-ip-address
網卡主私人IP地址。
/network/interfaces/macs/[mac]/gateway
網卡對應的IPv4網關地址。
/instance/max-netbw-egress
執行個體規格的出方向內網最大頻寬。單位:Kbit/s。
/instance/max-netbw-ingerss
執行個體規格的入方向內網最大頻寬。單位:Kbit/s。
/network/interfaces/macs/[mac]/ipv6s
網卡分配的IPv6地址清單,僅支援已配置了IPv6的VPC類型執行個體。
/network/interfaces/macs/[mac]/ipv6-gateway
網卡所屬的VPC的IPv6網關地址。
/network/interfaces/macs/[mac]/vswitch-ipv6-cidr-block
網卡所屬的虛擬交換器IPv6 CIDR段,僅支援已配置了IPv6的VPC類型執行個體。
/private-ipv4
執行個體的私網IPv4地址。
/ntp-conf/ntp-servers
NTP伺服器位址。
/owner-account-id
執行個體擁有者的阿里雲帳號ID。
/region-id
執行個體所屬地區。
/serial-number
執行個體所對應的序號。
/vpc-id
執行個體所屬VPC ID。
/vpc-cidr-block
執行個體所屬VPC的CIDR網段。
/vswitch-cidr-block
執行個體所屬虛擬交換器的CIDR網段。
/vswitch-id
執行個體所屬虛擬交換器ID。
/zone-id
執行個體所屬可用性區域。
/ram/security-credentials/[role-name]
執行個體RAM角色策略所產生的STS臨時憑證。只有在執行個體指定了RAM角色後,您才能擷取STS臨時憑證。其中[role-name]參數需要替換為執行個體RAM角色的名稱。如果未指定[role-name],將返回執行個體RAM角色名稱。
方式二:配置容器的環境變數
通過容器環境變數的Value可以擷取ECI執行個體的中繼資料。支援配置環境變數擷取的中繼資料項如下:
Key | Value | 說明 |
eci_id | __ECI_ID__ | 執行個體ID。 |
eci_name | __ECI_NAME__ | 執行個體名稱。 |
region_id | __REGION_ID__ | 執行個體所屬地區。 |
zone_id | __ZONE_ID__ | 執行個體所屬可用性區域。 |
container_name | __CONTAINER_NAME__ | 執行個體容器名稱。 |
配置樣本如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
env:
- name: eci_id
value: __ECI_ID__
- name: eci_name
value: __ECI_NAME__
- name: region_id
value: __REGION_ID__
- name: zone_id
value: __ZONE_ID__
- name: container_name
value: __CONTAINER_NAME__
登入容器查看環境變數,可以看到環境變數已經生效。樣本如下:

方式三:Downward API
Kubernetes Downward API提供了以下兩種方式:
環境變數
用於單個變數,可以將Pod資訊直接注入容器內部。
Volume掛載
可以將Pod資訊產生為檔案,直接掛載到容器內部。
目前阿ACK+ECI已經支援了Downward API的大部分常用欄位,下文將為您介紹使用方式。
環境變數方式
您可以通過Downward API將Pod的名稱、命名空間、IP等資訊注入到容器的環境變數中。通過環境變數可以獲得的中繼資料項如下表所示。
參數 | 描述 |
metadata.name | Pod名稱。 |
metadata.namespace | Pod命名空間。 |
metadata.uid | Pod的UID。 |
metadata.labels['<KEY>'] | Pod的標籤值。 |
metadata.annotations['<KEY>'] | Pod的註解值。具體請參見ECI Pod Annotation。 |
spec.serviceAccountName | Pod服務帳號名稱。 |
spec.nodeName | 節點名稱。 |
status.podIP | 節點IP。 |
Deployment樣本如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: downward-env
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
regionId: cn-beijing
platform: Aliyun ECI
labels:
app: nginx
env: test
alibabacloud.com/eci: "true"
spec:
containers:
- name: nginx
image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
env:
- name: METADATA_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: METADATA_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: METADATA_UID
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: METADATA_LABELS
valueFrom:
fieldRef:
fieldPath: metadata.labels['env']
- name: METADATA_ANNOTATIONS_REGION
valueFrom:
fieldRef:
fieldPath: metadata.annotations['regionId']
- name: METADATA_ANNOTATIONS_ECI_INSTANCE_ID
valueFrom:
fieldRef:
fieldPath: metadata.annotations['k8s.aliyun.com/eci-instance-id']
- name: STATUS_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: SPEC_SERVICE_ACCOUNT_NAME
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName登入容器查看環境變數,可以看到fieldRef已經生效。樣本如下:

Volume掛載方式
您可以通過Downward API將Pod的Label、Annotation等資訊通過Volume掛載到容器的某個檔案中。通過Volume掛載可以獲得的中繼資料項如下表所示。
參數 | 描述 |
metadata.name | Pod名稱。 |
metadata.namespace | Pod命名空間。 |
metadata.uid | Pod的UID。 |
metadata.labels['<KEY>'] | Pod的標籤值。 |
metadata.annotations['<KEY>'] | Pod的註解值。 |
metadata.labels | Pod的所有標籤。 |
metadata.annotations | Pod的所有註解。 |
目前僅支援Pod欄位,還不支援容器欄位,例如:limits.cpu、requests.cpu、limits.memory、requests.memory、limits.ephemeral-storage、requests.ephemeral-storage。
Deployment樣本如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: downward-down-volume
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
regionId: cn-beijing
platform: Aliyun ECI
labels:
app: nginx
env: test
alibabacloud.com/eci: "true"
spec:
containers:
- name: nginx
image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
readOnly: false
volumes:
- name: podinfo
downwardAPI:
items:
- path: "metadata.name"
fieldRef:
fieldPath: metadata.name
- path: "metadata.namespace"
fieldRef:
fieldPath: metadata.namespace
- path: "metadata.uid"
fieldRef:
fieldPath: metadata.uid
- path: "metadata.labels"
fieldRef:
fieldPath: metadata.labels
- path: "metadata.annotations"
fieldRef:
fieldPath: metadata.annotations登入容器查看Volume的掛載目錄,可以看到Volume的fieldRef已經生效,並儲存在容器指定的目錄下。樣本如下:
