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

Container Compute Service:仮想ノード上の Pod にサイドカーコンテナーをインジェクトする

最終更新日:Mar 01, 2026

仮想ノードは DaemonSet をサポートしていないため、可観測性エージェントやセキュリティエージェントは、各 Pod 内でサイドカーコンテナーとして実行する必要があります。ACK Virtual Node コンポーネントは OpenKruise SidecarSet と連携し、仮想ノードにスケジュールされた Pod にサイドカーコンテナーを自動的にインジェクトします。これにより、サイドカーのライフサイクル管理がアプリケーションコンテナーから分離されます。

サイドカーインジェクションの仕組み

物理ノードでは、DaemonSet を通じてモニタリングエージェントやセキュリティエージェントをデプロイします。仮想ノードは DaemonSet をサポートしていないため、エージェントはサイドカーコンテナーとして実行する必要があります。

OpenKruise SidecarSet は、admission Webhook を使用して、作成時に指定されたラベルに一致する Pod にサイドカーコンテナーをインジェクトします。しかし、スケジューリングの決定後まで Pod のスケジューリングターゲットが不明な場合、SidecarSet 単体では物理ノード向けの Pod と仮想ノード向けの Pod を区別できません。

ACK Virtual Node コンポーネントは、Pod が仮想ノードにスケジュールされることが確認された後、Pod に serverless.alibabacloud.com/virtual-node: "true" というラベルを追加することでこの問題を解決します。デフォルトでは、Elastic Container Instance (ECI) インスタンスが優先されます。その後、SidecarSet はこのラベルに一致させ、仮想ノードの Pod にのみサイドカーコンテナーをインジェクトします。

説明

ACK クラスターで仮想ノードを介してコンピューティング能力を使用する場合にのみ、serverless.alibabacloud.com/virtual-node: "true" ラベルを設定してください。ACK クラスターを直接使用する場合は、追加の設定は不要です。

サポートされるコンピューティングタイプ

この機能は、以下のコンピューティングタイプの CPU Pod のみをサポートします:

  • 汎用

  • コンピューティング最適化インスタンス

前提条件

  • ACK Pro マネージドクラスター、ACK 専用クラスター、または ACK Serverless Pro クラスターが作成されていること。クラスターバージョンは 1.22 以降である必要があります。詳細については、「ACK マネージドクラスターの作成」、「ACK 専用クラスターの作成」、または「ACK Serverless クラスターの作成」をご参照ください。

  • ACK Virtual Node コンポーネントがインストールされていること。コンポーネントのバージョンは v2.13.0 以降である必要があります。詳細については、「ACK Virtual Node」をご参照ください。

  • ack-kruise コンポーネントがインストールされていること。コンポーネントのバージョンは v1.3.0 以降である必要があります。詳細については、「ack-kruise」をご参照ください。

  • SidecarSetServerlessPod=true フィーチャーゲートが有効になっていること。Kubernetes API サーバーコンポーネントの featureGatesSidecarSetServerlessPod=true を設定します。詳細については、「コントロールプレーンコンポーネントのパラメーターのカスタマイズ」をご参照ください。

セレクターラベルによる特定の Pod のターゲティング

デフォルトでは、仮想ノードのラベルを使用する SidecarSet は、仮想ノードにスケジュールされたすべての Pod にサイドカーコンテナーをインジェクトします。特定の Pod をターゲットにするには、.spec.selector にさらにラベルを追加します。

apiVersion: apps.kruise.io/v1alpha1
kind: SidecarSet
metadata:
  name: filebeat-sidecarset
spec:
  containers:
    ...
  selector:
    matchLabels:
      serverless.alibabacloud.com/virtual-node: "true"
      alibabacloud.com/compute-class: general-purpose
      app: nginx
ラベル必須説明
serverless.alibabacloud.com/virtual-nodeはい仮想ノードにスケジュールされたすべての Pod に一致します。
alibabacloud.com/compute-classいいえ特定のコンピューティングタイプ (例:general-purpose) の Pod にインジェクションを制限します。詳細については、「コンピューティングタイプの定義」をご参照ください。
カスタムラベル (例:app)いいえ特定のアプリケーションラベルを持つ Pod にインジェクションを制限します。

SidecarSetResourceBinding による名前空間をまたがるリソースへのアクセス

サイドカーコンテナーは、その構成のために ConfigMap や Secret に依存することがよくあります。サイドカーが異なる名前空間の Pod にインジェクトされると、デフォルトでは Pod はサイドカーの元の名前空間にあるリソースにアクセスできません。

別の名前空間から ConfigMap または Secret を参照するには、SidecarSet のボリューム定義で namespace/name 形式を使用します。次に、SidecarSetResourceBinding を作成して、名前空間をまたがるアクセスを許可します。

SidecarSetResourceBinding は、指定された ConfigMap および Secret リソースに対して読み取り専用 (Get、List、Watch) 権限のみを付与します。このバインディングは、自身の名前空間にあるリソースのみを許可できます。

apiVersion: sidecarset.alibabacloud.com/v1alpha1
kind: SidecarSetResourceBinding
metadata:
  name: filebeat-sidecarset-resourcebinding
  namespace: kube-system  # kube-system 名前空間のリソースへのアクセスのみを許可できます
spec:
  subjects:
    - kind: SidecarSet
      name: filebeat-sidecarset
  resourceRefs:
    - kind: ConfigMap
      name: filebeat-config
    - kind: Secret
      name: elasticsearch-master-certs
説明

この権限付与では、ConfigMap と Secret に対する読み取り専用 (Get、List、Watch) 権限のみが付与されます。

コンテナーの起動と終了順序の制御

サイドカーコンテナーは通常、次のことを行う必要があります:

  • アプリケーションコンテナーの前に起動し、その後に終了する。

  • Job Pod の場合、アプリケーションコンテナーが終了した後にアクティブに終了する。

ACS シナリオでは、この動作を有効化するために、サイドカーコンテナーで環境変数 __IS_SIDECAR__="true" を設定します。詳細については、「サイドカーコンテナーの起動およびシャットダウンの順序を設定する」をご参照ください。

サイドカーコンテナーの個別アップグレード

サイドカーコンテナーをデプロイした後、OpenKruise のサイドカーホットアップグレード機能を使用して、個別にアップグレードできます。この機能は、Pod の可用性に影響を与えることなくシームレスなアップグレードを実行し、仮想ノード方式と完全に互換性があります。

例:Filebeat サイドカーの Nginx Pod へのインジェクション

以下のウォークスルーでは、Nginx アプリケーション Pod とともに Filebeat サイドカーコンテナーをデプロイします。Filebeat サイドカーは、アプリケーションコンテナーからファイルログと標準出力の両方を収集します。

ステップ 1:ConfigMap のデプロイ

この ConfigMap は Filebeat の構成を提供します。これは kube-system 名前空間に配置されます。この例では、構成はマウントされて表示されるだけで、構成内の環境変数は有効にならず、置き換える必要もありません。

  1. configmap.yaml という名前のファイルを作成します:

        apiVersion: v1
        data:
          filebeat.yml: |
            filebeat.inputs:
              - type: log
                paths:
                  - /var/log/*
                  - /stdout/*
            output.elasticsearch:
              host: '${NODE_NAME}'
              hosts: '["https://${ELASTICSEARCH_HOSTS:elasticsearch-master:9200}"]'
              username: '${ELASTICSEARCH_USERNAME}'
              password: '${ELASTICSEARCH_PASSWORD}'
              protocol: https
              ssl.certificate_authorities: [ "/usr/share/filebeat/certs/ca.crt" ]
        kind: ConfigMap
        metadata:
          name: filebeat-config
          namespace: kube-system
  2. ConfigMap をデプロイします:

        kubectl apply -f configmap.yaml

ステップ 2:SidecarSet のデプロイ

この SidecarSet は、Filebeat サイドカーコンテナーとそのインジェクションルールを定義します。

  1. sidecarset.yaml という名前のファイルを作成します:

    クリックしてコードの詳細を展開

        apiVersion: apps.kruise.io/v1alpha1
        kind: SidecarSet
        metadata:
          name: filebeat-sidecarset
        spec:
          containers:
            - args:
                - -e
                - -E
                - http.enabled=true
              env:
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.namespace
                - name: NODE_NAME
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: spec.nodeName
                - name: ELASTICSEARCH_USERNAME
                  value: elastic
                - name: ELASTICSEARCH_PASSWORD
                  value: gpU11EevMYaf2EBS
                - name: __IS_SIDECAR__  # このコンテナーをサイドカーとしてマーク
                  value: "true"
              image: docker.elastic.co/beats/filebeat:8.5.1
              imagePullPolicy: IfNotPresent
              name: filebeat
              podInjectPolicy: BeforeAppContainer
              resources:
                limits:
                  cpu: "1"
                  memory: 200Mi
                requests:
                  cpu: 100m
                  memory: 100Mi
              shareVolumePolicy:
                type: disabled
              upgradeStrategy:
                upgradeType: ColdUpgrade
              volumeMounts:
                - mountPath: /var/log
                  name: varlog
                  readOnly: true
                - mountPath: /stdout
                  name: stdout-log
                  readOnly: true
                - mountPath: /usr/share/filebeat/certs/
                  name: elasticsearch-master-certs
                - mountPath: /usr/share/filebeat/filebeat.yml
                  name: filebeat-config
                  readOnly: true
                  subPath: filebeat.yml
          selector:
            matchLabels:
              serverless.alibabacloud.com/virtual-node: "true"  # 仮想ノード上のすべての Pod に一致
          updateStrategy:
            type: NotUpdate
          volumes:
            - name: elasticsearch-master-certs
              secret:
                secretName: kube-system/elasticsearch-master-certs
            - configMap:
                name: kube-system/filebeat-config
              name: filebeat-config
            # ファイルログ
            - emptyDir: {}
              name: varlog
            # 標準出力
            - name: stdout-log
              emptyDir:
                medium: Stdout
        ---
        apiVersion: v1
        data:
          ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJakNDQWdxZ0F3SUJBZ0lSQUl0SDZxR2YzRG9VNFBuVWRJOUdITlV3RFFZSktvWklodmNOQVFFTEJRQXcKR3pFWk1CY0dBMVVFQXhNUVpXeGhjM1JwWTNObFlYSmphQzFqWVRBZUZ3MHlOREV3TWprd056RTNNamxhRncweQpOVEV3TWprd056RTNNamxhTUJzeEdUQVhCZ05WQkFNVEVHVnNZWE4wYVdOelpXRnlZMmd0WTJFd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFET1Zxc0svVXAvWTVNRVY5T3hzTUk2TTZMTFhYMGsKNFBGSjE0SklVNStUVnBRVVNhVmx3N0REeGtJaUQ3RDVHZ3I3Snh4WHV0cFNjVlo0QWN0UzNrNFJvV3lqdzg0cApoYW4wY3JZL2VaQmJlWjVFUUhCSXprU0ZhMWd4bkpUcVErSSsvR3lKSlNHNkQyR21UVHRqRXZ2R2pWL1loSDNHCk1DMnRadVNXN1hPYWZBKzFqWUNkVFpIZkNpeDdBZURVNU0zcVplNzR4MjhTeitDNkM4WUFCQ0ZSTnJsVGNFQW8KaGQ5WGNnellPUGdJY2VZSUJWb25DTDdzVWFPZGVKa1hrbmdBR2ZzWjB6RnJhMm1qZGZtcHVIaWZFM21LbUZ1agpydGhXVFZTdE9oZGtIUnZTck52NDZaSFdtYlErNXZCb1RiODllTFZuNTNwbzhmSkJIWWpHZ24zdEFnTUJBQUdqCllUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ3BEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBUVlJS3dZQkJRVUgKQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTU2dmVtcDRMem9QdVJiOUY3bjlmcU9JNQp2blF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUs2alBULzc2RnV2K0RLSmsxNG15b0ZzNThnRjRqbjlLWEUwCmFqOEMrZ1BUd2o2dUpUTjRLcWFmcnV0VGxlZWM5cXhabVZjQTgzanJhTEkySzlNN2ZyVE9pVE1vSnhmNnFrU1AKZ1ozazF2OG40Z0JGbzhsczZpc2YrankvL1dpMiswUVdWOElIU1lRbDlucklCT0lpb25rS1ljbDVQY2tKWVo4RQpkYVJUYW1xbi8zRTFGODFGaXFDT3dPc0NGRk5IRHhPRDRRb25NbU5ReFFvb1I3Mks1V2R6TmQrTG5BbjE4eHZlCjE2b3gybzZNQ3hjQS9RWDE0d3dDVi9lb1Y4KzIwWlJRY01LT1U5Y0djSjZNYm9TSW1odzJzS0NpNkpYcUQwQWMKSFZscWFzTGh4cHZBc3lJdXY3TjB5VnVhVVdZVDVMV1oyOFBGUVozcmwvYTIvNHZHNStJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
          tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURpRENDQW5DZ0F3SUJBZ0lSQUp3R2cyNVR5YUNEVmlxNWJEbDliREF3RFFZSktvWklodmNOQVFFTEJRQXcKR3pFWk1CY0dBMVVFQXhNUVpXeGhjM1JwWTNObFlYSmphQzFqWVRBZUZ3MHlOREV3TWprd056RTNNamxhRncweQpOVEV3TWprd056RTNNamxhTUI0eEhEQWJCZ05WQkFNVEZHVnNZWE4wYVdOelpXRnlZMmd0YldGemRHVnlNSUlCCklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE0L1QzMUp5VzJTSCtHZjhVTHJXVmhYZmwKdHhJRytMcGFGK0l6Q2lnSGh6QW5ZZnoyM0luQTZLOG9WWWtsejZLZzRzbEZjeXRHbStxd01ta3c3QzZXeHRVRwpSWlZiUXloZDZ6L1laRGhGUVpCQXZMWDVRVnIwWmIyRlN0NjdQM3dNa3Z1RE16TVZnRXoxZ2x0TmRyOVZiOXQyCjRUTXBka09GeFpPV24rZ0IyM0l3YnlNb0ZIMVNDZ1ZtcC9EQTNHZU1ENGErWURUcGowd1dSUFRRemdNcXh4YkUKd3FFdGN5R01yLzF6Sm4ycDZ6SWdmV3E0K1pwM2lRU2VOdjFUWWpHVm5xYzdWWUhDd29nb3pSRDI5TldTbC9BMApVSTVsbld3SDI3aU51QU1pVWFQRmx4eWtNbTlFbSs4SUcrT2VsRks0aDlBSEl2TDVYSFJjT3VOQzk2SjU1d0lECkFRQUJvNEhDTUlHL01BNEdBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWRCZ05WSFNNRUdEQVdnQlRucTk2YW5ndk9nKzVGdjBYdQpmMStvNGptK2REQmZCZ05WSFJFRVdEQldnaFJsYkdGemRHbGpjMlZoY21Ob0xXMWhjM1JsY29JY1pXeGhjM1JwClkzTmxZWEpqYUMxdFlYTjBaWEl1WkdWbVlYVnNkSUlnWld4aGMzUnBZM05sWVhKamFDMXRZWE4wWlhJdVpHVm0KWVhWc2RDNXpkbU13RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURwMVlXOFBmMm5YMldqeU5YZlVTSVJiamN0YQo2RTVpQzEwdENlbUxFZVpPZlpSRGtKOUVSaUNFQ2tUVUNCNy9QemFrTlE1UGNYQzVmcmYyWCtucGZ3RFFyREN4ClM0WkpEMWZFeHN0Yis3L29yQmgrWXNYcHJiUUJMbDJ6M0w0dm5tZ1kyb3V5bjdyT2NOdWQveENvWUdBVUd4a0YKdmVvUDNld0NUVzlaUVhGVWF0WUUzMno1bHRXTlRTOE5RU1hQRUtoSUlqYWNOL29SQ2ZhY1pRaTFoOUhTczdzQQpOcmludkRCTnE4bDl0b3g5NFZadCtXN3NmUXZvVU5hTTV1OXk0UU5Ib25rdUZ2enZMdkpGeEtvbWE0RmtFOHl5CmphR2RpUXh2NVFXdW1sTlBzZ3VOUUpSMnp3QzJEUkVVZUR1WC96Zk9xdDBucDFOZWpoWU11VTIyVk5zPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
          tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBNC9UMzFKeVcyU0grR2Y4VUxyV1ZoWGZsdHhJRytMcGFGK0l6Q2lnSGh6QW5ZZnoyCjNJbkE2SzhvVllrbHo2S2c0c2xGY3l0R20rcXdNbWt3N0M2V3h0VUdSWlZiUXloZDZ6L1laRGhGUVpCQXZMWDUKUVZyMFpiMkZTdDY3UDN3TWt2dURNek1WZ0V6MWdsdE5kcjlWYjl0MjRUTXBka09GeFpPV24rZ0IyM0l3YnlNbwpGSDFTQ2dWbXAvREEzR2VNRDRhK1lEVHBqMHdXUlBUUXpnTXF4eGJFd3FFdGN5R01yLzF6Sm4ycDZ6SWdmV3E0CitacDNpUVNlTnYxVFlqR1ZucWM3VllIQ3dvZ296UkQyOU5XU2wvQTBVSTVsbld3SDI3aU51QU1pVWFQRmx4eWsKTW05RW0rOElHK09lbEZLOGg5QUhJdkw1WEhSY091TkM5Nko1NXdJREFRQUJBb0lCQUhSK3VEaDdYY3ZSUjE1WgpzU0s5d1kvWDJobFlxUjlyZktjLy9mMXV2NG9pM2IyQjNWYVBQM3FxS042dG5Ca2tienYyeC9zM1hucEgwWXV4Cm5rTFUvRkRZaE1BQ3VBVDJHQ2tsRTUwRDlNQ3d5NlNsQ3FDUHJ0NWZvRUxHMk1KMHpxZyt5S25kclZ0SCtSK0oKTVdsQ0ZwTjNnS1ZOMUI2UUcwa0JSN1NvaUdwd1ZhSEFOMEc2Q0NKTnR0eDByZHo5UVRpU3BCMmlzYmhaSVpRVgp2U1NwemY3R2ZzaU5pN1VaOTN0WkZ5S21PRE1CUW5yZm5xWkphVXdVeWhHYk02Y2h4YWpmY0dka1dadWJ6azZJCnUrTWFDcE5VOWsvSXpDUkhnNjVyZGhITlozeVdDYzh6UXRDdFNkaWFPRmFwclZ4aHhSeFU5WW9FT2hsaVlVS0wKNGhIN1VPRUNnWUVBNkkrL3MyMDN5WGx1R0tqb3VIRXc5Z29aNU9YNHk3WWFGb2dzTm9jMTBZdUxRSURjTEozTQpLWjc4aTZ1dlV3d2lVMVpKTmRYbHFhcFFDNFRBN2N0bktnTVpNRnhzYzFPQzZsTnJ6b3FXM3FST0NDNW9DRUJOCmVSQlR2V1FjOVhXUUxrK2wwcHBEZ3BaVFVjc0tYS2NJSldlakhVb0xuajMrcmo2ZjFsOHlhU01DZ1lFQSt1NXEKd1ZtU2NkQ1pqdXQzbktsZ3V6ZGlpbWpvZ0Jkc1VnRUg4WXhkK2QzTXgveVR0eGthdGNwMnYvTHNPQ3BMV1YzSQpNVTdCTUtVR3BpZGpOMzdYQ3FMREZHM3UzdHZhMHBjditsOENaYk45NWdVN3RNeHB2WjZyZjRwVFlKdG1Ya2RsCkVmUkNxMkhocU11UEpSUlhjMllOaDU2TjNSUW5CWnJRVmxLdjBtMENnWUVBb0Fvc2RpRjIvcU1kN01Kd1JGMUEKd0ZCN09WWTVQSmI0cFFEWXpEMkgvOGZ6OEZPOU1NYjJ0TDNBTmEzVVhXWkFTUEZjT0R3V2JBZlVSZGo1bTZzYQpONE1pVm5HRUFHazc4bDJ1RnRpd3NrNkhsSUc2L2RLaWZlbUtkdzdxRHREMGc2bzBCeFk1MXlmejlwbXZhOHRXCmc4Y3FMUUhEdFFZY3VYUkhNcE1ZY2RrQ2dZRUFrZHdxbys5OEo3cDR1Rkg1T2xCZWtSVFZxOXpsWVNlOGFFSi8KS3BKTVFpVUNsekVqY0NnZ2xaRjF5NGZhZFo5b0l5OVhZZ29FVkZGbzl3WW9MeWNFdXdMM1lKV3laMHJtL01pewpNOWNzWG8raVhDV29taVRFUmx2SUZxQUNiVUtIazcvdWFTeFI0S3RKNzhNN2x2TW5Ea1pCRVJkQ0lVTklsNEp4CkhleDhsVlVDZ1lCdlVMQUU3WkMyTkFnZUpYUmpRalFRd2laNU1jS09rTTBvVjlsYUlaR0xZUUVTOHVtYXA0THYKMVc5clN4UElxMTg3Q1haejBuOTdPN210aUpwYXhERDg1QVdZMEg5MGhFNitvZUltWmlPN3ZYbW5RTVRNZjNtWgp6dUcvNk84ckpsNWcyNnY4NTVBYjVUbC9ZQTNRcW1tOVdKdUt5eGw1bWxvMGkxNU14cWNia1E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
        kind: Secret
        metadata:
          name: elasticsearch-master-certs
          namespace: kube-system
        type: kubernetes.io/tls
  2. SidecarSet をデプロイします:

        kubectl apply -f sidecarset.yaml

ステップ 3:SidecarSetResourceBinding の作成

アプリケーション Pod は default 名前空間で実行されるため、インジェクトされた Filebeat コンテナーは、kube-system 名前空間の ConfigMap と Secret にアクセスするための明示的な権限付与が必要です。

  1. policy.yaml という名前のファイルを作成します:

        apiVersion: sidecarset.alibabacloud.com/v1alpha1
        kind: SidecarSetResourceBinding
        metadata:
          name: filebeat-sidecarset-resourcebinding
          namespace: kube-system  # kube-system 名前空間のリソースへのアクセスのみを許可できます
        spec:
          subjects:
            - kind: SidecarSet
              name: filebeat-sidecarset
          resourceRefs:
            - kind: ConfigMap
              name: filebeat-config
            - kind: Secret
              name: elasticsearch-master-certs
  2. SidecarSetResourceBinding をデプロイします:

        kubectl apply -f policy.yaml

ステップ 4:アプリケーション Pod のデプロイ

Pod を仮想ノードにスケジュールする Nginx Deployment をデプロイします。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        alibabacloud.com/compute-class: general-purpose
        alibabacloud.com/compute-qos: default
    spec:
      containers:
        - name: nginx
          image: mirrors-ssl.aliyuncs.com/nginx:latest
          resources:
            limits:
              cpu: "1"
              memory: 200Mi
            requests:
              cpu: 100m
              memory: 100Mi
          volumeMounts:
            # filebeat サイドカーコンテナーとログディレクトリを共有
            - mountPath: /var/log/nginx
              name: varlog
      volumes:
        - name: varlog
          emptyDir: {}
      nodeSelector:
        type: virtual-kubelet
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Equal
          value: alibabacloud
          effect: NoSchedule

ステップ 5:インジェクションの検証

  1. Pod のステータスを確認します:期待される出力:`READY` 列の 2/2 は、サイドカーコンテナーが正常にインジェクトされたことを示します。

        kubectl get pods nginx-785d5xxxxx-xxxxx
        NAME                     READY   STATUS    RESTARTS   AGE
        nginx-785d5xxxxx-xxxxx   2/2     Running   0          10m
  2. Filebeat コンテナーがアプリケーションコンテナーからファイルログにアクセスできることを確認します:コンテナー内で、エラーログを表示します:期待される出力:

        kubectl exec -it deploy/nginx -c filebeat -- /bin/bash
        cat /var/log/error.log
        2024/11/08 07:20:54 [notice] 1#1: using the "epoll" event method
        2024/11/08 07:20:54 [notice] 1#1: nginx/1.27.2
        2024/11/08 07:20:54 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
        2024/11/08 07:20:54 [notice] 1#1: OS: Linux 5.10.134-17.2.1.lifsea8.x86_64
        2024/11/08 07:20:54 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
        2024/11/08 07:20:54 [notice] 1#1: start worker processes
        2024/11/08 07:20:54 [notice] 1#1: start worker process 29
  3. Filebeat コンテナーがアプリケーションコンテナーの標準出力にアクセスできることを確認します:期待される出力:

        cat /stdout/nginx/0.log
        2024-11-08T15:20:53.99215101+08:00 stdout F /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
        2024-11-08T15:20:53.992173978+08:00 stdout F /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
        2024-11-08T15:20:54.003081339+08:00 stdout F /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
        2024-11-08T15:20:54.085010761+08:00 stdout F 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
        2024-11-08T15:20:54.276107913+08:00 stdout F 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
        2024-11-08T15:20:54.276263126+08:00 stdout F /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
        2024-11-08T15:20:54.276842182+08:00 stdout F /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
        2024-11-08T15:20:54.345892283+08:00 stdout F /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
        2024-11-08T15:20:54.347524813+08:00 stdout F /docker-entrypoint.sh: Configuration complete; ready for start up
  4. Filebeat コンテナーが名前空間をまたがる構成ファイルをマウントしたことを確認します:期待される出力:この出力は、名前空間をまたがる ConfigMap が正しくマウントされていることを示します。

        kubectl exec deploy/nginx -c filebeat -- cat /usr/share/filebeat/filebeat.yml
        filebeat.inputs:
          - type: log
            paths:
              - /var/log/*
              - /stdout/*
        output.elasticsearch:
          host: '${NODE_NAME}'
          hosts: '["https://${ELASTICSEARCH_HOSTS:elasticsearch-master:9200}"]'
          username: '${ELASTICSEARCH_USERNAME}'
          password: '${ELASTICSEARCH_PASSWORD}'
          protocol: https
          ssl.certificate_authorities: [ "/usr/share/filebeat/certs/ca.crt" ]

関連情報