VerrazzanoへのKubernetesサイドカーのデプロイ
サイドカーをさらにVerrazzanoワークロードに追加できます。任意のイメージまたはサイドカー・コンテナを使用できます。このガイドでは、アプリケーション・ログ用のカスタムFluentdサイドカーの作成方法を説明します。
Verrazzanoは、WebLogicポッドごとにFluentdサイドカー・インジェクションを作成および管理します。これによって、アプリケーション・ログがクラスタ全体のFluentd DaemonSetと相互作用できます。ただし、これらのリソースは現在構成できず、Fluentd構成ファイルとコンテナ・イメージをカスタマイズするために追加のコンテナが必要です。FluentdサイドカーおよびDaemonSetの詳細は、「ログ収集用のFluentdの構成」を参照してください。
次の手順では、ToDo Listサンプル・アプリケーションを使用して、カスタムFluentdサイドカーをVerrazzanoWebLogicWorkloadコンポーネントに接続およびデプロイする方法を示します。アプリケーションをデプロイする前に、アプリケーションとコンポーネントのYAMLファイルを編集する必要があります。次のコマンドを実行して、それらのローカル・コピーを作成します:
$ curl https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/examples/todo-list/todo-list-components.yaml --output todo-list-components.yaml
$ curl https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7.1/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>
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管理のOpenSearchおよびOpenSearchダッシュボードに表示されます。