kube
最終更新
役に立ちましたか?
最終更新
役に立ちましたか?
ここでは Wantedly の社内ツールである kube
の概要について解説します。 kube
というツール自体に着目し、Kubernetes やその運用方法については扱いません。
この章を Wantedly に存在する kube
に関するルートドキュメントと位置づけます。 したがって説明は概論にとどめて細かい利用方法などは他のドキュメントで保管していくものとします。 現在各所に散らばる kube
に関するドキュメントをこの章に集約している段階です。
主に下のような人を想定しています。
kube
というツールを初めて使う人
kube
をなんとなく使っているが全体像がよくわからない人
kube
は で管理されている Wantedly の Kubernetes クラスタのリソースを操作するためのユーティリティです。Kubernetes を操作するための標準 CLI ツールとして用意されている kubectl の機能に加え、いくつかの便利機能とサブコマンド、および権限に応じたアクセス制御の仕組みを持ちます。
このため kube
の理解には最低限の Kubernetes の理解が必要です。 理解に不安がある場合は を参照してください。
主に下の責務を担っています。
kubectl
の各種設定隠蔽
kubectl
の拡張
一般的な開発用 utility
基本的には「kube
は引数を parse して適切に変換して kubectl
に渡している」と考えて問題ありません。
より厳密には、コマンド・機能によっては、下記のように kubectl
の単純なラッパー以外の操作を行う場合があります。
kubectl
以外の gcloud
, stern
, telepresence
, argo
などの Kubernetes 関連ツールに渡すこともある
各種ツールを組み合わせたり複数回呼び出すこともある
稀にどのツールにも依存しない機能も存在する
下の例のように PATH
を通した後に kube setup
を実行してプロンプトの指示に従ってください。
kube
には大きく分けて 2 種類のコマンドが存在します。
Wantedly で管理する複数の Kubernetes クラスタのうち特定の一つに対して実行するコマンドです。 ミスを避けるためにクラスタを第一引数で明示する手法をとっています。 Wantedly では 1 クラスタ 1 環境で運用しているため、prod
, qa
などの環境名を第一引数に指定することになります。
ここで提供されているコマンド群は 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
などと読み替えることで実行ができます。
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
擬似的に Kubernetes クラスタをコピーし、自分専用のデプロイ先として用いることで開発を簡単にする機能です。 詳しくは を参照してください。
kubectl
については などを参照してください。
より詳細な使い方は を参照してください。