すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:コンテナからメタデータを取得する

最終更新日:Dec 28, 2024

Elastic Container Instance(Pod)のメタデータは、PodおよびPod内のコンテナに関する情報を提供します。この情報には、Podとコンテナの名前、ID、IPアドレス、およびネットワークインターフェースコントローラー(NIC)が含まれます。Podのメタデータを使用して、コンテナを管理および使用できます。このトピックでは、実行中のコンテナにメタデータを表示するために、コンテナからPodのメタデータを取得する方法について説明します。

方法1:MetaServerを使用してメタデータにアクセスする

  1. コンテナに接続します。詳細については、Elastic Container Instanceへの接続を参照してください。

  2. メタデータにアクセスします。

    説明

    コンテナに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__

コンテナにログインして環境変数を確認します。環境変数が有効になっていることがわかります。例:

K8s获取元数据

方法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が有効になっていることがわかります。例:

downward

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情報がディレクトリに保存されていることがわかります。例:

K8s获取元数据2