Kubernetes CLI pluginを使ってOpenShiftのアプリケーション情報をダンプするpluginを作る
Kubernetes / OpenShift もくもく会 No. 1でした。
ここにあるOpenShiftで特定のプロジェクト(ネームスペース)をダンプするスクリプトをてきとーに作って使ったりしていたんですが、他の人にも使われるようになって汎用化とかOpenShiftの製品の一部にするとかいろいろしなきゃなー、って感じになってきたので、同僚のRobertが手を付けていたKubernetes CLI pluginとしてマージする作業をはじめました。以下のリポジトリです。
https://github.com/nekop/openshift-sos-plugin
とりあえず最低限のダンプがとれるようにアップデートして、一旦Robertに目を通してもらうためにpull reqしました。
https://github.com/bostrt/openshift-sos-plugin/pull/1
以下のように実行するとダンプファイルが生成されます。トラブルシューティングに必要な大体のオブジェクトのダンプと、イベントログ、podのログを全て保存して固めたものです。
$ oc plugin sos -n logging Data capture complete and archived in /tmp/oc-sos-logging-20180206-210447.tar.xz $ tar tf /tmp/oc-sos-logging-20180206-210447.tar.xz logging/ logging/pods-logging-kibana-3-bwlw2_kibana-proxy.previous.log logging/pods-logging-kibana-3-bwlw2_kibana-proxy.log logging/pods-logging-kibana-3-bwlw2_kibana.previous.log logging/pods-logging-kibana-3-bwlw2_kibana.log logging/pods-logging-fluentd-rwgjv_fluentd-elasticsearch.previous.log logging/pods-logging-fluentd-rwgjv_fluentd-elasticsearch.log logging/pods-logging-fluentd-6fbm9_fluentd-elasticsearch.previous.log logging/pods-logging-fluentd-6fbm9_fluentd-elasticsearch.log logging/pods-logging-fluentd-4b5n5_fluentd-elasticsearch.previous.log logging/pods-logging-fluentd-4b5n5_fluentd-elasticsearch.log logging/pods-logging-fluentd-2fxhc_fluentd-elasticsearch.previous.log logging/pods-logging-fluentd-2fxhc_fluentd-elasticsearch.log logging/pods-logging-es-data-master-ye3u4nvd-3-q6md6_elasticsearch.previous.log logging/pods-logging-es-data-master-ye3u4nvd-3-q6md6_elasticsearch.log logging/pods-logging-es-data-master-ye3u4nvd-3-q6md6_proxy.previous.log logging/pods-logging-es-data-master-ye3u4nvd-3-q6md6_proxy.log logging/oc-get-all.txt logging/oc-get-all.yaml logging/oc-get-project.yaml logging/oc-get-event.txt logging/oc-status.txt logging/oc-version.txt
Kubernetes CLI pluginについてはここに記述されています。
https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/
気付いたこととして、plugin.yaml
の記述をミスっても静かにプラグインとして認識されなくなります。実行しようとしてもそんなプラグインないよ、という以外に特にエラー報告とかはされないのでがんばって直しましょう。
あとはflags
には必ずValueを要求するオプションしか定義できないようです。-v / --debug
オプションを定義したかったのですが、この制限のため微妙な感じになったので後回し。
このあとのTODOとしてはこんな感じ。
sos.sh
単体でも利用できるよう、plugin特有のENVと直接コマンドパラメータの両方を入力として受けられるようにする、かな。- アプリケーションではなく
oc get node,hostsubnet
などノードレベルのトラブルのための情報を取得するcluster-admin向けのオプション追加 - debugオプション追加
- secretやconfigmapを取得されたくないときもあるので、取得切り替えフラグ追加