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

Container Service for Kubernetes:ポッド側の変更を行わずに、エッジでInClusterConfigを使用するアプリケーションポッドを実行する

最終更新日:Dec 19, 2024

ACK Edgeは、クラウドとエッジのワークロードを非侵入的な方法に基づいて調整する最初のクラウドネイティブエッジコンピューティングサービスです。 ACK Edgeを使用すると、エッジにアプリケーションポッドをデプロイし、これらのポッドをInClusterConfigを使用して、ポッドに対応する変更を加えることなくKubernetes APIサーバーにアクセスするように設定できます。 このトピックでは、エッジでInClusterConfigを使用するアプリケーションポッドを実行する方法について説明します。

背景情報

オープンソースのKubernetesクラスターのアプリケーションポッドをエッジにデプロイし、これらのポッドをInClusterConfigを使用してKubernetes APIサーバーにアクセスするように設定すると、次の問題が発生します。

  • 問題1: アプリケーションポッドは、InClusterConfigのアドレスに基づいてKubernetes APIサーバーにアクセスします。ノードで設定されたデフォルトの負荷分散ルール (iptables/ipvs) は、IPアドレスに基づいてKubernetes APIサーバーのアプリケーションポッドに外部要求を転送します。 ただし、エッジのポッドとクラウドのKubernetes APIサーバーは異なるネットワークに属しています。 したがって、エッジのポッドはクラウド内のポッドのIPアドレスにアクセスできません。 その結果、エッジのアプリケーションポッドはInClusterConfigを使用してKubernetes APIサーバーにアクセスすることはできません。

  • 問題2: 問題1が修正された後、クラウド内のネットワークのジッターによりアプリケーションポッドが再起動した場合、エッジのポッドはKubernetes APIサーバーからワークロード設定を取得できません。 これは、アプリケーションポッドの再起動に影響します。

ポッドからAPIにアクセスする方法の詳細については、「ポッドからAPIにアクセスする」をご参照ください。

解決策

エッジノードでACK edgeのエッジハブを有効にして、非侵入的な方法に基づいて上記の問題を修正できます。 次に、エッジでアプリケーションポッドを設定して、InClusterConfigを使用して、ポッドに対応する変更を加えることなくKubernetes APIサーバーにアクセスできます。 次の詳細に注意してください。

  • エッジにデプロイされたポッドのエンドポイントは、アプリケーションの認識なしで、環境変数KUBERNETES_SERVICE_HOSTおよびKUBERNETES_SERVICE_PORTからエッジハブのHTTPSエンドポイントおよびポート (KUBERNETES_SERVIC_HOST=169.254.2.1) およびKUBERNETES_SERVIC_PORT=10268に自動的に自動的に変更されます。 これにより、アプリケーションポッドはInClusterConfigを使用して、エッジハブに基づくKubernetes APIサーバーにアクセスできます。 これは最初の問題を修正します。

  • edge-hubのキャッシュ機能を有効にする必要があります。 これにより、アプリケーションポッドは、再起動時にローカルキャッシュからデータを取得できます。 これは2番目の問題を修正します。

    edge-hubのキャッシュ機能を有効にする方法の詳細については、このトピックの「edge-hubのキャッシュ機能の有効化」をご参照ください。

edge-hubのキャッシュ機能を有効にする

説明
  • データはローカルディスクにキャッシュされるため、多数のリストまたはウォッチ要求を受信したポッドのキャッシュ機能を無効にすることをお勧めします。

  • ポッドのキャッシュ機能が有効になったら、ポッドを再起動する必要があります。

  1. User-Agentヘッダーを取得します。

    User-Agentヘッダーは、アプリケーションポッドの起動コマンドにあります。

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: edge-app-pod
    spec:
      コンテナー:
        -name: "edge-app"
          画像: "xxx/edge-app-amd64:1.18.8"
          command:
            - /bin/sh
            - -ec
            - |
              # User-Agentヘッダーはスタートアップコマンドにあります: edge-app 
              /usr/local/bin/edge-app -- v=2 

    エッジハブログには、{User-Agent} watch {resource) などのUser-Agentヘッダーもあります。 例:

    I0820 07:50:18.899015 1 util.go:221] edge-app get services: /api/v1/services/xxx with status code 200、使用済み21.035061152ms
  2. edge-hubのキャッシュ機能を有効にします。

    edge-hubのキャッシュ機能を有効にするには、アプリケーションポッド宛ての要求に含まれるUser-Agentヘッダーをedge-hub-cfg ConfigMapのcache_agentsフィールドに追加します。

    次のYAMLテンプレートに例を示します。

    apiVersion: v1
    kind: ConfigMap
    メタデータ:
      名前: edge-hub-cfg
      名前空間: kube-system
    データ:
      # User-Agentヘッダーがedge-appであるedge-appポッドがKubernetes APIサーバーにアクセスすると、データがキャッシュされます。 
      # キャッシュ機能が有効になった後、アプリケーションポッドを再起動します。 
      cache_agents: "edge-app"# 複数のコンポーネントをコンマ (,) で区切ります。

  3. アプリケーションポッドから返されたデータがキャッシュされているかどうかを確認します。

    アプリケーションポッドをホストするノードの /etc/kubernetes/cache/{User-Agent} ディレクトリにキャッシュデータが存在するかどうかを確認します。