nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

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を取得されたくないときもあるので、取得切り替えフラグ追加