kube
ここでは Wantedly の社 内ツールである
kube
の概要について解説します。 kube
というツール自体に着目し、Kubernetes やその運用方法については扱いません。この章を Wantedly に存在する
kube
に関するルートドキュメントと位置づけます。 したがって説明は概論にとどめて細かい利用方法などは他のドキュメントで保管していくものとします。 現在各所に散らばる kube
に関するドキュメントをこの章に集約している段階です。主に下のような人を想定しています。
kube
というツールを初めて使う人kube
をなんとなく使っているが全体像がよくわからない人
kube
は wantedly/kube-go (internal) で管理されている Wantedly の Kubernetes クラスタのリソースを操作するためのユーティリティです。Kubernetes を操作するための標準 CLI ツールとして用意されている kubectl の機能に加え、いくつかの便利機能とサブコマンド、および権限に応じたアクセス制御の仕組みを持ちます。主に下の責務を担っています。
kubectl
の各種設定隠蔽kubectl
の拡張- 一般的な開発用 utility
基本的には「
kube
は引数を parse して適切に変換して kubectl
に渡している」と考えて問題ありません。より厳密には、コマンド・機能によっては、下記のように
kubectl
の単純なラッパー以外の操作を行う場合があります。kubectl
以外のgcloud
,stern
,telepresence
,argo
などの Kubernetes 関連ツールに渡すこともある- 各種ツールを組み合わせたり複数回呼び出すこともある
- 稀にどのツールにも依存しない機能も存在する
# latest
bash <(curl -sL https://get.wantedlyapp.com/kube)
# specific version
KUBE_VERSION=4.2.0 bash <(curl -sL https://get.wantedlyapp.com/kube)
下の例のように
PATH
を通した後に kube setup
を実行してプロンプトの指示に従ってください。export PATH=$HOME/.wantedly/bin:$PATH
kube
には大きく分けて 2 種類のコマンドが存在します。Wantedly で管理する複数の Kubernetes クラスタのうち特定の一つに対して実行するコマンドです。 ミスを避けるためにクラスタを第一引数で明示する手法をとっています。 Wantedly では 1 クラスタ 1 環境で運用しているため、
prod
, qa
などの環境名を第一引数に指定することになります。# 例 (sandbox / qa / prod が環境名)
kube sandbox fork
kube qa get pod
kube prod history
ここで提供されているコマンド群は
kube
の責務のうち主に下の 2 つを担当します。kubectl
の各種設定隠蔽kubectl
の拡張
一部のコマンドはクラスタに依存しない形式で存在します。
setup
, version
, self-update
などの管理用のコマンドに加えて、 CI で適切な形式の Docker image を build する ci-build
や Kubernetes manifest を生成する generate
などのコマンドがあります。ここで提供されているコマンド群は
kube
の責務のうち主に「一般的な開発用 utility」を担当します。Kubernetes に関わらないコマンドも一部ありますが、下のような事情からこのような運用も一定の範囲で行っています。
- 全開発者がインストールしている
- インストール方法が簡単
- インストールが認証されている
前述の通り
kube
は kubectl
の wrapper として機能するため、kubectl
で行える任意のオペレーションを実行可能です。 コマンドはすべて kubectl
を kube [env]
に読み替えることでそのまま実行できます。 したがって kubectl get pods
は kube qa get pods
や kube sandbox get pods
などと読み替えることで実行ができます。# kubectl
kubectl [command] [TYPE] [NAME] [flags]
# kube での読み替え
kube [env] [command] [TYPE] [NAME] [flags]
kube
はカレントディレクトリから操作対象の Namespace を決定します。 したがって、原則操作対象のマイクロサービスのリポジトリがあるディレクトリに移動してからコマンドを実行するのが良いでしょう。- コマンドを実行したい:
kube <env> sh <-c, -d, branch_name> COMMAND
- e.g. 今のブランチで sandbox に DB migration したい
kube sandbox sh -c rails db:migrate
- e.g. 今デプロイされてる QA で Rails console を使いたい
kube qa sh -d rails c
- デプロイしたい:
kube <env> deploy <-c, -d, branch_name>
- 環境変数をセットしたい:
kube <env> dotenv set FOO=bar
- 今動いている Pod 一覧が見たい:
kube <env> get po
- ログが見たい:
kube <env> tail
- クラスタをコピーし自分専用のものとして利用する:
kube <env> fork
最終更新 1yr ago