このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

仮想ノードベースのポッドへのサイドカーコンテナーの挿入

更新日時2025-01-26 16:30

このトピックでは、ACK Virtual Node を使用して、ACSコンピューティングパワーが使用されている ACK クラスタ内の仮想ノードにスケジュールされているポッドのみにサイドカーコンテナーを挿入する方法について説明します。これにより、可観測性とセキュリティに関連する機能を使用できるようになります。また、この方法を OpenKruise SidecarSet と併用して、カスタムサイドカーコンテナー挿入ルールを作成し、サイドカーコンテナーを個別に更新することもできます。

説明

ACK では、非仮想ノードに DaemonSet を作成して、可観測性エージェントまたはセキュリティエージェントをデプロイできます。ACS は仮想ノードを使用します。したがって、ACS を使用する場合は、これらのエージェントをサイドカーコンテナーにのみデプロイできます。OpenKruise を使用すると、仮想ノードにスケジュールされているポッドへのサイドカーコンテナーの挿入を簡素化できます。OpenKruise が提供する SidecarSet コントローラーは、アドミッション Webhook を活用して、ポッドの作成中に指定されたラベルに一致する各ポッドにサイドカーコンテナーを自動的に挿入します。SidecarSet は、仮想ノードにスケジュールされているポッドを識別できません。この場合、仮想ノードにスケジュールされているポッドのみにサイドカーコンテナーを挿入するには、ack-virtual-node をクラスターにインストールします。これにより、サイドカーコンテナーが仮想ノード上のビジネスコンテナーから分離されます。

概要

  • サイドカーコンテナー:ポッドにアタッチされた補助コンテナー。サイドカーコンテナーは、プライマリコンテナーの構成を変更することなく、ポッドのプライマリコンテナーの機能を強化または拡張するために使用されます。Alibaba Cloud Container Compute Service (ACS) クラスタでサイドカーコンテナーを構成する方法の詳細については、「説明」をご参照ください。

  • SidecarSet: Alibaba Cloud によって開発されたオープンソースのクラウドネイティブ アプリケーション自動化エンジンである OpenKruise によって提供される主要なコントローラー。このコントローラーは、ポッドの作成中に指定されたラベルに一致する各ポッドにサイドカーコンテナーを自動的に挿入できます。サイドカーコンテナーは、監視エージェントまたはロギングエージェントとして機能できます。このように、SidecarSet コントローラーは、サイドカーコンテナーのライフサイクル管理をビジネスコンテナーのライフサイクル管理から分離します。

ACS 仮想ノードの SidecarSet 使用上の注意

serverless.alibabacloud.com/virtual-node: "true" ラベルを SidecarSet に追加して、仮想ノードにスケジュールされているポッドを選択できます。このラベルは、ポッドが仮想ノードにスケジュールされた後に、ポッドに自動的に追加されます。デフォルトでは、仮想ノードのデプロイにはエラスティックコンテナーインスタンスが優先的に使用されます。alibabacloud.com/compute-class: general-purpose ラベルを使用して、指定されたコンピューティングクラスが割り当てられている ACS ポッドを選択できます。

DaemonSet によって作成されたキーコンテナーは、コンテナーの構成とパラメーターのために ConfigMap を参照する場合があります。DaemonSet のキーコンテナーをビジネスポッドに挿入した後、キーコンテナーによって参照される ConfigMap がビジネスポッドと同じ名前空間に存在しない場合があります。この場合、ConfigMap をボリュームとしてサイドカーコンテナーにマウントするときに、namespace/name 形式で ConfigMap 名を指定できます。名前空間をまたいで ConfigMap とシークレットを参照するには、最初に承認を完了する必要があります。詳細については、「SidecarSetResourceBinding」をご参照ください。

説明

serverless.alibabacloud.com/virtual-node: "true" ラベルは、ACK クラスタ内の仮想ノードで ACS コンピューティングパワーが使用されている場合にのみ必要です。ACS クラスタを使用する場合は、このラベルは必要ありません。

特定のポッドへのサイドカーコンテナーの挿入

デフォルトでは、SidecarSet は仮想ノードにスケジュールされているすべてのポッドにサイドカーコンテナーを挿入します。仮想ノードにスケジュールされている特定のポッドにサイドカーコンテナーをスケジュールする場合は、.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

必須。このパラメーターは、仮想ノードにスケジュールされているポッドを選択するために使用されるラベルを指定します。

alibabacloud.com/compute-class

オプション。SidecarSet を適用する仮想ノード上のポッドのコンピューティングクラスを指定する場合に必要です。コンピューティングクラスの詳細については、「コンピューティングクラス」をご参照ください。

app

オプション。指定されたアプリケーションにサイドカーコンテナーを挿入する場合は、このパラメーターを使用してカスタム値を指定できます。

SidecarSetResourceBinding

セキュリティ上の理由から、他の名前空間の ConfigMap とシークレットをボリュームとしてサイドカーコンテナーにマウントする場合は、SidecarSetResourceBinding を作成して、SidecarSet が ConfigMap とシークレットにアクセスすることを明示的に承認する必要があります。

説明

SidecarSetResourceBinding は、ConfigMap とシークレットに対して次の操作を実行するための権限のみを付与します:取得、一覧表示、および監視。

# filebeat-sidecarset SidecarSet に一致するポッドに、kube-system 名前空間の filebeat-config ConfigMap へのアクセスを承認します。
apiVersion: sidecarset.alibabacloud.com/v1alpha1
kind: SidecarSetResourceBinding
metadata:
  name: filebeat-sidecarset-resourcebinding
  namespace: kube-system # SidecarSetResourceBinding は、kube-system 名前空間のリソースに対する権限のみを付与します。
spec:
  subjects:
    - kind: SidecarSet
      name: filebeat-sidecarset
  resourceRefs:
    - kind: ConfigMap
      name: filebeat-config
    - kind: Secret
      name: elasticsearch-master-certs

コンテナーの起動と終了の優先順位、およびジョブによって作成されたポッド

サイドカーコンテナーには、通常、次の要件があります。

  • サイドカーコンテナーは、ビジネスコンテナーよりも早く起動し、ビジネスコンテナーよりも遅く終了する必要があります。

  • ジョブによって作成されたポッドの場合、サイドカーコンテナーは、ビジネスコンテナーの終了後に積極的に終了する必要があります。

ACS シナリオでこの目標を達成するには、サイドカーコンテナーの構成で環境変数 __IS_SIDECAR__="true" を指定できます。詳細については、「サイドカーコンテナーの起動と終了の優先順位を指定する」をご参照ください。

サイドカーコンテナーの更新

ポッドに挿入した後、サイドカーコンテナーを更新する必要がある場合があります。OpenKruise が提供する ホットサイドカー更新 機能を使用して、ビジネスポッドの可用性に影響を与えることなく、サイドカーコンテナーをシームレスに更新できます。この機能は仮想ノードと互換性があります。

前提条件

次の例では、filebeat がサイドカーコンテナーにデプロイされ、NGINX アプリケーションポッドに挿入されます。

  1. ConfigMap をデプロイします。

    説明

    構成ファイルは、kube-system 名前空間の ConfigMap です。この例では、構成ファイルはサイドカーコンテナーにマウントされ、出力されます。関連する変数は有効にならないため、置き換える必要はありません。

    1. configmap.yaml という名前のファイルを作成し、次の 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. filebeat コンテナーを挿入するために使用される SidecarSet をデプロイします。

    説明

    この例では、filebeat コンテナーは、ビジネスコンテナーからのテキストログと stdout の両方を収集します。

    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" # 仮想ノードにスケジュールされているポッドを選択するためのラベルを追加します。
        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
          # stdout を収集します。
          - name: stdout-log
            emptyDir:
              medium: Stdout
      ---
      apiVersion: v1
      data:
        ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJakNDQWdxZ0F3SUJBZ0lSQUl0SDZxR2YzRG9VNFBuVWRJOUdITlV3RFFZSktvWklodmNOQVFFTEJRQXcKR3pFWk1CY0dBMVVFQXhNUVpXeGhjM1JwWTNObFlYSmphQzFqWVRBZUZ3MHlOREV3TWprd056RTNNamxhRncweQpOVEV3TWprd056RTNNamxhTUJzeEdUQVhCZ05WQkFNVEVHVnNZWE4wYVdOelpXRnlZMmd0WTJFd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFET1Zxc0svVXAvWTVNRVY5T3hzTUk2TTZMTFhYMGsKNFBGSjE0SklVNStUVnBRVVNhVmx3N0REeGtJaUQ3RDVHZ3I3Snh4WHV0cFNjVlo0QWN0UzNrNFJvV3lqdzg0cApoYW4wY3JZL2VaQmJlWjVFUUhCSXprU0ZhMWd4bkpUcVErSSsvR3lKSlNHNkQyR21UVHRqRXZ2R2pWL1loSDNHCk1DMnRadVNXN1hPYWZBKzFqWUNkVFpIZkNpeDdBZURVNU0zcVplNzR4MjhTeitDNkM4WUFCQ0ZSTnJsVGNFQW8KaGQ5WGNnellPUGdJY2VZSUJWb25DTDdzVWFPZGVKa1hrbmdBR2ZzWjB6RnJhMm1qZGZtcHVIaWZFM21LbUZ1agpydGhXVFZTdE9oZGtIUnZTck52NDZaSFdtYlErNXZCb1RiODllTFZuNTNwbzhmSkJIWWpHZ24zdEFnTUJBQUdqCllUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ3BEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBUVlJS3dZQkJRVUgKQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTU2dmVtcDRMem9QdVJiOUY3bjlmcU9JNQp2blF3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUs2alBULzc2RnV2K0RLSmsxNG15b0ZzNThnRjRqbjlLWEUwCmFqOEMrZ1BUd2o2dUpUTjRLcWFmcnV0VGxlZWM5cXhabVZjQTgzanJhTEkySzlNN2ZyVE9pVE1vSnhmNnFrU1AKZ1ozazF2OG40Z0JGbzhsczZpc2YrankvL1dpMiswUVdWOElIU1lRbDlucklCT0lpb25rS1ljbDVQY2tKWVo4RQpkYVJUYW1xbi8zRTFGODFGaXFDT3dPc0NGRk5IRHhPRDRRb25NbU5ReFFvb1I3Mks1V2R6TmQrTG5BbjE4eHZlCjE2b3gybzZNQ3hjQS9RWDE0d3dDVi9lb1Y4KzIwWlJRY01LT1U5Y0djSjZNYm9TSW1odzJzS0NpNkpYcUQwQWMKSFZscWFzTGh4cHZBc3lJdXY3TjB5VnVhVVdZVDVMV1oyOFBGUVozcmwvYTIvNHZHNStJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
        tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURpRENDQW5DZ0F3SUJBZ0lSQUp3R2cyNVR5YUNEVmlxNWJEbDliREF3RFFZSktvWklodmNOQVFFTEJRQXcKR3pFWk1CY0dBMVVFQXhNUVpXeGhjM1JwWTNObFlYSmphQzFqWVRBZUZ3MHlOREV3TWprd056RTNNamxhRncweQpOVEV3TWprd056RTNNamxhTUI4eEhUQWJCZ05WQkFNVEZHVnNZWE4wYVdOelpXRnlZMmd0YldGemRHVnlNSUlCCklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE0L1QzMUp5VzJTSCtHZjhVTHJXVmhYZmwKdHhJRytMcGFGK0l6Q2lnSGh6QW5ZZnoyM0luQTZLOG9WWWtsejZLZzRzbEZjeXRHbStxd01ta3c3QzZXeHRVRwpSWlZiUXloZDZ6L1laRGhGUVpCQXZMWDVRVnIwWmIyRlN0NjdQM3dNa3Z1RE16TVZnRXoxZ2x0TmRyOVZiOXQyCjRUTXBka09GeFpPV24rZ0IyM0l3YnlNb0ZIMVNDZ1ZtcC9EQTNHZU1ENGErWURUcGowd1dSUFRRemdNcXh4YkUKd3FFdGN5R01yLzF6Sm4ycDZ6SWdmV3E0K1pwM2lRU2VOdjFUWWpHVm5xYzdWWUhDd29nb3pSRDI5TldTbC9BMApVSTVsbld3SDI3aU51QU1pVWFQRmx4eWtNbTlFbSs4SUcrT2VsRks4aDlBSEl2TDVYSFJjT3VOQzk2SjU1d0lECkFRQUJvNEhDTUlHL01BNEdBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUkKS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlRucTk2YW5ndk9nKzVGdjBYdQpmMStvNGptK2REQmZCZ05WSFJFRVdEQldnaFJsYkdGemRHbGpjMlZoY21Ob0xXMWhjM1JsY29JY1pXeGhjM1JwClkzTmxZWEpqYUMxdFlYTjBaWEl1WkdWbVlYVnNkSUlnWld4aGMzUnBZM05sWVhKamFDMXRZWE4wWlhJdVpHVm0KWVhWc2RDNXpkbU13RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURwMVlXOFBmMm5YMldqeU5YZlVTSVJiamN0YQo2RTVpQzEwdENlbUxFZVpPZlpSRGtKOUVSaUNFQ2tUVUNCNy9QemFrTlE1UGNYQzVmcmYyWCtucGZ3RFFyREN4ClM0WkpEMWZFeHN0Yis3L29yCmgrWXNYcHJiUUJMbDJ6M0w0dm5tZ1kyb3V5bjdyT2NOdWQveENvWUdBVUd4a0YKdmVvUDNld0NUVzlaUVhGVWF0WUUzMno1bHRXTlRTOE5RU1hQRUtoSUlqYWNOL29SQ2ZhY1pRaTFoOUhTczdzQQpOcmludkRCTnE4bDl0b3g5NFZadCtXN3NmUXZvVU5hTTV1OXk0UU5Ib25rdUZ2enZMdkpGeEtvbWE0RmtFOHl5CmphR2RpUXh2NVFXdW1sTlBzZ3VOUUpSMnp3QzJEUkVVZUR1WC96Zk9xdDBucDFOZWpoWU11VTIyVk5zPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
        tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBNC9UMzFKeVcyU0grR2Y4VUxyV1ZoWGZsdHhJRytMcGFGK0l6Q2lnSGh6QW5ZZnoyCjNJbkE2SzhvVllrbHo2S2c0c2xGY3l0R20rcXdNbWt3N0M2V3h0VUdSWlZiUXloZDZ6L1laRGhGUVpCQXZMWDUKUVZyMFpiMkZTdDY3UDN3TWt2dURNek1WZ0V6MWdsdE5kcjlWYjl0MjRUTXBka09GeFpPV24rZ0IyM0l3YnlNbwpGSDFTQ2dWbXAvREEzR2VNRDRhK1lEVHBqMHdXUlBUUXpnTXF4eGJFd3FFdGN5R01yLzF6Sm4ycDZ6SWdmV3E0CitacDNpUVNlTnYxVFlqR1ZucWM3VllIQ3dvZ296UkQyOU5XU2wvQTBVSTVsbld3SDI3aU51QU1pVWFQRmx4eWsKTW05RW0rOElHK09lbEZLOGg5QUhJdkw1WEhSY091TkM5Nko1NXdJREFRQUJBb0lCQUhSK3VEaDdYY3ZSUjE1WgpzU0s5d1kvWDJobFlxUjlyZktjLy9mMXV2NG9pM2IyQjNWYVBQM3FxS042dG5Ca2tienYyeC9zM1hucEgwWXV4Cm5rTFUvRkRZaE1BQ3VBVDJHQ2tsRTUwRDlNQ3d5NlNsQ3FDUHJ0NWZvRUxHMk1KMHpxZyt5S25kclZ0SCtSK0oKTVdsQ0ZwTjNnS1ZOMUI2UUcwa0JSN1NvaUdwd1ZhSEFOMEc2Q0NKTnR0eDByZHo5UVRpU3BCMmlzYmhaSVpRVgp2U1NwemY3R2ZzaU5pN1VaOTN0WkZ5S21PRE1CUW5yZm5xWkphVXdVeWhHYk02Y2h4YWpmY0dka1dadWJ6azZJCnUrTWFDcE5VOWsvSXpDUkhnNjVyZGhITlozeVdDYzh6UXRDdFNkaWFPRmFwclZ4aHhSeFU5WW9FT2hsaVlVS0wKNGhIN1VPRUNnWUVBNkkrL3MyMDN5WGx1R0tqb3VIRXc5Z29aNU9YNHk3WWFGb2dzTm9jMTBZdUxRSURjTEozTQpLWjc4aTZ1dlV3d2lVMVpKTmRYbHFhcFFDNFRBN2N0bktnTVpNRnhzYzFPQzZsTnJ6b3FXM3FST0NDNW9DRUJOCmVSQlR2V1FjOVhXUUxrK2wwcHBEZ3BaVFVjc0tYS2NJSldlakhVb0xuajMrcmo2ZjFsOHlhU01DZ1lFQSt1NXEKd1ZtU2NkQ1pqdXQzbktsZ3V6ZGlpbWpvZ0Jkc1VnRUg4WXhkK2QzTXgveVR0eGthdGNwMnYvTHNPQ3BMV1YzSQpNVTdCTUtVR3BpZGpOMzdYQ3FMREZHM3UzdHZhMHBjditsOENaYk45NWdVN3RNeHB2WjZyZjRwVFlKdG1Ya2RsCkVmUkNxMkhocU11UEpSUlhjMllOaDU2TjNSUW5CWnJRVmxLdjBtMENnWUVBb0Fvc2RpRjIvcU1kN01Kd1JGMUEKd0ZCN09WWTVQSmI0cFFEWXpEMkgvOGZ6OEZPOU1NYjJ0TDNBTmEzVVhXWkFTUEZjT0R3V2JBZlVSZGo1bTZzYQpONE1pVm5HRUFHazc4bDJ1RnRpd3NrNkhsSUc2L2RLaWZlbUtkdzdxRHREMGc2bzBCeFk1MXlmejlwbXZhOHRXCmc4Y3FMUUhEdFFZY3VYUkhNcE1ZY2RrQ2dZRUFrZHdxbys5OEo3cDR1Rkg1T2xCZWtSVFZxOXpsWVNlOGFFSi8KS3BKTVFpVUNsekVqY0NnZ2xaRjF5NGZhZFo5b0l5OVhZZ29FVkZGbzl3WW9MeWNFdXdMM1lKV3laMHJtL01pegpNOWNzWG8raVhDV29taVRFUmx2SUZxQUNiVUtIazcvdWFTeFI0S3RKNzhNN2x2TW5Ea1pCRVJkQ0lVTklsNEp4CkhleDhsVlVDZ1lCdlVMQUU3WkMyTkFnZUpYUmpRalFRd2laNU1jS09rTTBvYjlsYUlaR0xZUUVTOHVtYXA0THYKMVc5clN4UElxMTg3Q1haejBuOTdPN210aUpwYXhERDg1QVdZMEg5MGhFNitvZUltWmlPN3ZYbW5RTVRNZjNtWgp6dUcvNk84ckpsNWcyNnY4NTVBYjVUbC9ZQTNRcW1tOVdKdUt5eGw1bWxvMGkxNU14cWNia1E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
      kind: Secret
      metadata:
        name: elasticsearch-master-certs
        namespace: kube-system
      type: kubernetes.io/tls        
    2. 次のコマンドを実行して、SidecarSet を作成します。

      kubectl apply -f sidecarset.yaml
  3. filebeat コンテナーに kube-system 名前空間の ConfigMap へのアクセスを承認します。

    説明

    アプリケーションポッドはデフォルトの名前空間にデプロイされます。filebeat コンテナーに別の名前空間の ConfigMap へのアクセスを明示的に承認する必要があります。

    1. policy.yaml という名前のファイルを作成し、次のコンテンツをファイルにコピーします。

      apiVersion: sidecarset.alibabacloud.com/v1alpha1
      kind: SidecarSetResourceBinding
      metadata:
        name: filebeat-sidecarset-resourcebinding
        namespace: kube-system # SidecarSetResourceBinding は、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. 次のテンプレートを使用して NGINX アプリケーションポッドをデプロイします。詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。

    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:
                # volumeMount を介してログディレクトリを 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. 次のコマンドを実行して、アプリケーションポッドをクエリします。

    kubectl get pods nginx-785d5xxxxx-xxxxx

    予期される出力:

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-785d5xxxxx-xxxxx   2/2     Running   0          10m

    出力は、ポッドで 2 つのコンテナーが実行されていることを示しています。これは、挿入が成功したことを意味します。

  6. アプリケーションポッドのテキストログと stdout が filebeat コンテナーにマウントされていることを確認します。

    1. 次のコマンドを実行して、filebeat コンテナーにログインします。

       kubectl exec -it deploy/nginx -c filebeat -- /bin/bash
    2. filebeat コンテナーのエラーログを表示します。

      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 コンテナーの stdout を表示します。

      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
  7. 別の名前空間の filebeat-config ConfigMap が filebeat コンテナーにマウントされていることを確認します。

    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" ]

    出力は、別の名前空間の filebeat-config ConfigMap が filebeat コンテナーにマウントされていることを示しています。

  • 目次 (0, M)
  • 説明
  • 概要
  • ACS 仮想ノードの SidecarSet 使用上の注意
  • 特定のポッドへのサイドカーコンテナーの挿入
  • SidecarSetResourceBinding
  • コンテナーの起動と終了の優先順位、およびジョブによって作成されたポッド
  • サイドカーコンテナーの更新
  • 前提条件
フィードバック