Elastic Container Instance(Pod)のメタデータは、PodおよびPod内のコンテナに関する情報を提供します。この情報には、Podとコンテナの名前、ID、IPアドレス、およびネットワークインターフェースコントローラー(NIC)が含まれます。Podのメタデータを使用して、コンテナを管理および使用できます。このトピックでは、実行中のコンテナにメタデータを表示するために、コンテナからPodのメタデータを取得する方法について説明します。
方法1:MetaServerを使用してメタデータにアクセスする
コンテナに接続します。詳細については、Elastic Container Instanceへの接続を参照してください。
メタデータにアクセスします。
説明コンテナにcurlがインストールされていない場合は、curlをインストールしてください。
curl http://100.100.100.200/latest/meta-data/<metadata>
<metadata>
を、クエリするメタデータ項目に置き換えます。たとえば、<metadata>をinstance-idに置き換えます。curl http://100.100.100.200/latest/meta-data/instance-id
次の表に、クエリできるElastic Container Instanceのメタデータ項目を示します。
メタデータ項目
説明
/dns-conf/nameservers
Elastic Container Instanceのドメインネームシステム(DNS)設定。
/eipv4
Elastic Container InstanceのElastic IPv4アドレス。
/hostname
Elastic Container Instanceのホスト名。ContainerGroupNameの値です。
/instance-id
Elastic Container InstanceのID。
/mac
Elastic Container Instanceのメディアアクセス制御(MAC)アドレス。
/network/interfaces/
NICのMACアドレス。
/network/interfaces/macs/[mac]/network-interface-id
NICのID。[mac]をElastic Container InstanceのMACアドレスに置き換えます。
/network/interfaces/macs/[mac]/netmask
NICのサブネットマスク。
/network/interfaces/macs/[mac]/vswitch-cidr-block
NICが接続されているvSwitchのIPv4 CIDRブロック。
/network/interfaces/macs/[mac]/vpc-cidr-block
NICが属する仮想プライベートクラウド(VPC)のIPv4 CIDRブロック。
/network/interfaces/macs/[mac]/private-ipv4s
NICに割り当てられているプライベートIPv4アドレス。
/network/interfaces/macs/[mac]/vpc-ipv6-cidr-blocks
NICが属するVPCのIPv6 CIDRブロック。この項目は、VPC内にあり、IPv6アドレスが割り当てられているElastic Container Instanceにのみ適用されます。
/network/interfaces/macs/[mac]/vswitch-id
NICのセキュリティグループと同じVPCにあるvSwitchのID。
/network/interfaces/macs/[mac]/vpc-id
NICのセキュリティグループが存在するVPCのID。
/network/interfaces/macs/[mac]/primary-ip-address
NICのプライマリプライベートIPアドレス。
/network/interfaces/macs/[mac]/gateway
NICのIPv4ゲートウェイアドレス。
/instance/max-netbw-egress
Elastic Container Instanceの最大アウトバウンド内部帯域幅。単位:Kbit/s。
/instance/max-netbw-ingerss
Elastic Container Instanceの最大インバウンド内部帯域幅。単位:Kbit/s。
/network/interfaces/macs/[mac]/ipv6s
NICに割り当てられているIPv6アドレス。この項目は、VPC内にあり、IPv6アドレスが割り当てられているElastic Container Instanceにのみ適用されます。
/network/interfaces/macs/[mac]/ipv6-gateway
NICが属するVPCのIPv6ゲートウェイアドレス。
/network/interfaces/macs/[mac]/vswitch-ipv6-cidr-block
NICが接続されているvSwitchのIPv6 CIDRブロック。この項目は、VPC内にあり、IPv6アドレスが割り当てられているElastic Container Instanceにのみ適用されます。
/private-ipv4
Elastic Container InstanceのプライベートIPv4アドレス。
/ntp-conf/ntp-servers
ネットワークタイムプロトコル(NTP)サーバーのアドレス。
/owner-account-id
Elastic Container Instanceが属するAlibaba CloudアカウントのID。
/region-id
Elastic Container InstanceのリージョンID。
/serial-number
Elastic Container Instanceのシリアル番号。
/vpc-id
Elastic Container Instanceが存在するVPCのID。
/vpc-cidr-block
Elastic Container Instanceが存在するVPCのCIDRブロック。
/vswitch-cidr-block
Elastic Container Instanceが接続されているvSwitchのCIDRブロック。
/vswitch-id
Elastic Container Instanceが接続されているvSwitchのID。
/zone-id
Elastic Container InstanceのゾーンID。
/ram/security-credentials/[role-name]
Elastic Container InstanceのResource Access Management(RAM)ロールに対して生成された一時的なSecurity Token Service(STS)認証情報。一時的なSTS認証情報は、Elastic Container InstanceにRAMロールを指定した後にのみ取得できます。[role-name]をRAMロールの名前に置き換えます。[role-name]をRAMロールの名前に置き換えない場合、Elastic Container Instanceの名前が返されます。
方法2:コンテナの環境変数を設定する
コンテナ環境変数を設定することで、Elastic Container Instanceのメタデータを取得できます。次の表に、コンテナ環境変数を設定することで取得できるElastic Container Instanceのメタデータ項目を示します。
キー | 値 | 説明 |
eci_id | __ECI_ID__ | Elastic Container InstanceのID。 |
eci_name | __ECI_NAME__ | Elastic Container Instanceの名前。 |
region_id | __REGION_ID__ | Elastic Container InstanceのリージョンID。 |
zone_id | __ZONE_ID__ | Elastic Container Instanceのゾーン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__
コンテナにログインして環境変数を確認します。環境変数が有効になっていることがわかります。例:
方法3:Downward APIを使用する
Kubernetes Downward APIは、Pod情報を稼働中のコンテナに公開するために、以下の方法を提供します。
Pod情報をコンテナの環境変数に渡す
Pod情報の各部分を、単一の環境変数の値としてコンテナに渡すことができます。
Pod情報をボリュームファイルとしてコンテナにマウントする
Pod情報に基づいてファイルを作成し、そのファイルをボリュームとしてコンテナにマウントできます。
Container Service for Kubernetes(ACK)とElastic Container Instanceの統合は、Downward APIで使用されるほとんどのフィールドをサポートしています。
Pod情報をコンテナの環境変数に渡す
Downward APIを使用して、Podの名前、名前空間、IPアドレスなどの情報をコンテナの環境変数に渡すことができます。次の表に、コンテナの環境変数を設定することで取得できるメタデータ項目を示します。
メタデータ項目 | 説明 |
metadata.name | Podの名前。 |
metadata.namespace | Podの名前空間。 |
metadata.uid | PodのユーザーID(UID)。 |
metadata.labels['<KEY>'] | Podのラベル値。 |
metadata.annotations['<KEY>'] | Podのアノテーション値。詳細については、Podアノテーションを参照してください。 |
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が有効になっていることがわかります。例:
Pod情報をボリュームファイルとしてコンテナにマウントする
Downward APIを使用して、ラベルやアノテーションなどのPod情報をボリュームファイルとしてコンテナにマウントできます。次の表に、ボリュームファイルをコンテナにマウントすることで取得できるElastic Container Instanceのメタデータ項目を示します。
メタデータ項目 | 説明 |
metadata.name | Podの名前。 |
metadata.namespace | Podの名前空間。 |
metadata.uid | PodのUID。 |
metadata.labels['<KEY>'] | Podのラベル値。 |
metadata.annotations['<KEY>'] | Podのアノテーション値。 |
metadata.labels | Podのすべてのラベル。 |
metadata.annotations | Podのすべてのアノテーション。 |
Downward APIは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
コンテナにログインして、ボリュームがマウントされているディレクトリに移動します。fieldRefが有効になっており、fieldRefで指定されたPod情報がディレクトリに保存されていることがわかります。例: