VerrazzanoへのKubernetesサイドカーのデプロイ

カスタム・サイドカーをVerrazzanoワークロード・コンポーネントにデプロイするためのガイド

サイドカーをさらにVerrazzanoワークロードに追加できます。任意のイメージまたはサイドカー・コンテナを使用できます。このガイドでは、アプリケーション・ログ用のカスタムFluentdサイドカーの作成方法を説明します。

Verrazzanoは、WebLogicポッドごとにFluentdサイドカー・インジェクションを作成および管理します。これによって、アプリケーション・ログがクラスタ全体のFluentd DaemonSetと相互作用できます。ただし、これらのリソースは現在構成できず、Fluentd構成ファイルとコンテナ・イメージをカスタマイズするために追加のコンテナが必要です。FluentdサイドカーおよびDaemonSetの詳細は、ロギングを参照してください。

次の手順では、ToDo Listサンプル・アプリケーションを使用して、カスタムFluentdサイドカーをVerrazzanoWebLogicWorkloadコンポーネントに接続およびデプロイする方法を示します。アプリケーションをデプロイする前に、アプリケーションとコンポーネントのYAMLファイルを編集する必要があります。次のコマンドを実行して、それらのローカル・コピーを作成します:

$ curl https://raw.githubusercontent.com/verrazzano/verrazzano/v1.1.2/examples/todo-list/todo-list-components.yaml --output todo-list-components.yaml
$ curl https://raw.githubusercontent.com/verrazzano/verrazzano/v1.1.2/examples/todo-list/todo-list-application.yaml --output todo-list-application.yaml

todo-list-components.yamlファイルにVerrazzanoWebLogicWorkloadが含まれており、ここでデプロイメントを変更します。

Fluentdカスタム・サイドカー構成ファイルの作成

VerrazzanoWebLogicWorkloadコンポーネントをデプロイする前に、Fluentd構成ファイルを含むConfigMapを作成します。

apiVersion: v1
kind: ConfigMap
metadata:
   name: fluentdconf
   namespace: todo-list
data:
   fluent.conf: |
      ...
      <match **>
        @type stdout
      </match>      

Verrazzanoが管理する Fluentd DaemonSetと相互作用するために、構成によってログを標準出力にリダイレクトする必要があります。Fluentd構成ファイルの末尾にある該当のブロックをご覧ください。このConfigMapは事前にデプロイするか、他のすべてのアプリケーション・リソースに対してデプロイする必要があります。

Fluentdカスタム・サイドカー・ボリュームの作成

Fluentd構成のConfigMapがデプロイされたところで、アプリケーション・ログおよびFluentd構成ファイルへのFluentdアクセス権を付与するボリュームを作成します。

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: todo-domain
  namespace: todo-list
spec:
  workload:
    apiVersion: oam.verrazzano.io/v1alpha1
    kind: VerrazzanoWebLogicWorkload
    spec:
      template:
        metadata:
          name: todo-domain
          namespace: todo-list
        spec:
          domainUID: tododomain
          domainHome: /u01/domains/tododomain
          image: container-registry.oracle.com/verrazzano/example-todo:0.1.12-1-20210624160519-017d358
          imagePullSecrets:
            - name: tododomain-repo-credentials
          domainHomeSourceType: "FromModel"
          includeServerOutInPodLog: true
          replicas: 1
          webLogicCredentialsSecret:
            name: tododomain-weblogic-credentials
          configuration:
            introspectorJobActiveDeadlineSeconds: 900
            model:
              configMap: tododomain-jdbc-config
              domainType: WLS
              modelHome: /u01/wdt/models
              runtimeEncryptionSecret: tododomain-runtime-encrypt-secret
            secrets:
              - tododomain-jdbc-tododb
          serverPod:
            # ---- BEGIN: Add volumes for Fluentd container ----
            volumes:
              - emptyDir: {}
                name: shared-log-files
              - name: fdconfig
                configMap:
                  name: fluentdconf
            # ---- END: Add volumes for Fluentd container  ----
            env:
              - name: JAVA_OPTIONS
                value: "-Dweblogic.StdoutDebugEnabled=false"
              - name: USER_MEM_ARGS
                value: "-Djava.security.egd=file:/dev/./urandom -Xms64m -Xmx256m "
              - name: WL_HOME
                value: /u01/oracle/wlserver
              - name: MW_HOME
                value: /u01/oracle

サンプル・ボリュームshared-log-filesを使用して、Fluentdコンテナがアプリケーション・コンテナのログを表示できるようにします。この例では、アクセスしやすいようにemptyDirボリューム・タイプを使用していますが、他のボリューム・タイプを使用できます。

fdconfigサンプル・ボリュームが、前にデプロイされたConfigMap (Fluentd構成を含む)をマウントします。これによって、アタッチされたFluentdサイドカーが埋込みのFluentd構成ファイルにアクセスできるようになります。

Fluentdカスタム・サイドカー・コンテナの作成

VerrazzanoWebLogicWorkloadへの最後のリソース追加は、カスタムのサイドカー・コンテナの作成です。

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: todo-domain
  namespace: todo-list
spec:
  workload:
    apiVersion: oam.verrazzano.io/v1alpha1
    kind: VerrazzanoWebLogicWorkload
    spec:
      template:
        metadata:
          name: todo-domain
          namespace: todo-list
        spec:
          domainUID: tododomain
          domainHome: /u01/domains/tododomain
          image: container-registry.oracle.com/verrazzano/example-todo:0.1.12-1-20210624160519-017d358
          imagePullSecrets:
            - name: tododomain-repo-credentials
          domainHomeSourceType: "FromModel"
          includeServerOutInPodLog: true
          replicas: 1
          webLogicCredentialsSecret:
            name: tododomain-weblogic-credentials
          configuration:
            introspectorJobActiveDeadlineSeconds: 900
            model:
              configMap: tododomain-jdbc-config
              domainType: WLS
              modelHome: /u01/wdt/models
              runtimeEncryptionSecret: tododomain-runtime-encrypt-secret
            secrets:
              - tododomain-jdbc-tododb
          serverPod:
            # ---- BEGIN: Add Fluentd container with volumeMounts  ----
            containers:
              - image: ghcr.io/verrazzano/fluentd-kubernetes-daemonset:v1.12.3-20210517195222-f345ec2
                name: fluentd
                env:
                  - name: FLUENT_UID
                    value: root
                  - name: FLUENT_CONF
                    value: fluent.conf
                  - name: FLUENTD_ARGS
                    value: -c /fluentd/etc/fluent.conf
                volumeMounts:
                  - mountPath: /scratch
                    name: shared-log-files
                    readOnly: true
                  - name: fdconfig
                    mountPath: /fluentd/etc/
            # ---- END: Add Fluentd container with volumeMounts  ----
            volumes:
              - emptyDir: {}
                name: shared-log-files
              - name: fdconfig
                configMap:
                  name: fluentdconf
            env:
              - name: JAVA_OPTIONS
                value: "-Dweblogic.StdoutDebugEnabled=false"
              - name: USER_MEM_ARGS
                value: "-Djava.security.egd=file:/dev/./urandom -Xms64m -Xmx256m "
              - name: WL_HOME
                value: /u01/oracle/wlserver
              - name: MW_HOME
                value: /u01/oracle

このサンプル・コンテナはVerrazzano Fluentdイメージを使用していますが、追加のFluentdプラグインを含む任意のイメージをかわりに使用できます。

作成される両方のボリュームがマウントされると、Fluentdサイドカーでログのモニターと解析を行えるようになります。VerrazzanoWebLogicWorkloadsは、ログ・ファイルを含む/scratchディレクトリにボリュームをマウントします。したがって、すべてのサイドカー・コンテナのログ・アクセスはこのディレクトリ内に制限されます。前述のように、shared-log-fileボリュームは、この理由で/scratchにマウントされます。

サンプルのFluentd構成ボリュームは/fluentd/etc/にマウントされます。このパスは柔軟性が高いですが、それに応じてFLUEND_ARGS環境変数を更新する必要があります。

Fluentdサイドカーのデプロイ

リソースが構成されたところで、アプリケーションをデプロイできます。ToDo Listサンプル・アプリケーションの手順のステップ1から3に従います。ステップ4のデプロイメント・コマンドでは、ローカルで編集したYAMLファイルで置き換えます:

$ kubectl apply -f todo-list-components.yaml
$ kubectl apply -f todo-list-application.yaml

次に、必要に応じて、ToDoリストの手順のステップ5以降に従います。

デプロイメントでカスタムFluentdサイドカーが正常に作成されたことを確認するには:

  • コンテナ名がWebLogicアプリケーション・ポッドに存在することを確認します。
    $ kubectl get pods -n <application-namespace> <application-pod-name> -o jsonpath="{.spec.containers[*].name}" | tr -s '[[:space:]]' '\n'
    ...
    fluentd
    ...
    
  • Fluentdサイドカーがログを標準出力にリダイレクトしていることを確認します。
    kubectl logs -n <application-namespace> <application-pod-name> fluentd
    
  • Verrazzanoのロギングの手順に従って、Fluentd DaemonSetが標準出力からログを収集していることを確認します。これらのログは、Verrazzanoで管理される ElasticSearchおよびKibanaに表示されます。