OpenShiftにfluentd公式イメージのdaemonsetをデプロイする
OpenShiftにはConfigMapで設定変更できるfluentdが用意されているので、このブログ記事の内容は大抵の人は必要ないはずです。特定の新しいバージョンのfluentdが必須であるとか、あえて別にfluentd公式イメージをデプロイする理由がある人だけ読んでください。
OpenShiftの上でfluentd-docker-imageを動かすにはどうすればいいのか,みたいな質問が稀に来るので誰か記事かいて欲しい
— SKSの申し子 (@repeatedly) 2018年4月19日
https://github.com/fluent/fluentd-kubernetes-daemonset と対応するリファレンスKubernetes Logging with Fluentd、リポジトリ上のfluentd-daemonset-elasticsearch-rbac.yaml見ると、Service account fluentd
で/var/log
をhostPathマウントして読み込むのでrootアクセスが必要、privilegedコンテナにする必要があるようです。privileged sccをfluentdサービスアカウントに追加して、containerのsecurityContext.privilegedをtrueに変更、podを再作成して反映させます。
oc project kube-system oc create -f https://raw.githubusercontent.com/fluent/fluentd-kubernetes-daemonset/master/fluentd-daemonset-elasticsearch-rbac.yaml oc adm policy add-scc-to-user privileged -z fluentd oc patch ds fluentd -p "spec: template: spec: containers: - name: fluentd securityContext: privileged: true" oc delete pod -l k8s-app=fluentd-logging
このprivilegedコンテナにするだけの変更でとりあえず動いているように見えます。対応するElasticSearchを用意して確認まではしてません。
privilegedコンテナでroot権限の設定なので対象イメージが信頼できる場合のみ設定しましょう。