kube
ここでは Wantedly の社内ツールである kube
の概要について解説します。 kube
というツール自体に着目し、Kubernetes やその運用方法については扱いません。
この章を Wantedly に存在する kube
に関するルートドキュメントと位置づけます。 したがって説明は概論にとどめて細かい利用方法などは他のドキュメントで保管していくものとします。 現在各所に散らばる kube
に関するドキュメントをこの章に集約している段階です。
想定読者
主に下のような人を想定しています。
kube
というツールを初めて使う人kube
をなんとなく使っているが全体像がよくわからない人
kube とはなにか
kube
は wantedly/kube-go (internal) で管理されている Wantedly の Kubernetes クラスタのリソースを操作するためのユーティリティです。Kubernetes を操作するための標準 CLI ツールとして用意されている kubectl の機能に加え、いくつかの便利機能とサブコマンド、および権限に応じたアクセス制御の仕組みを持ちます。
このため kube
の理解には最低限の Kubernetes の理解が必要です。 理解に不安がある場合は プロダクト開発のための 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 に関わらないコマンドも一部ありますが、下のような事情からこのような運用も一定の範囲で行っています。
全開発者がインストールしている
インストール方法が簡単
インストールが認証されている
機能
Kubefork
擬似的に Kubernetes クラスタをコピーし、自分専用のデプロイ先として用いることで開発を簡単にする機能です。 詳しくは Kubefork (internal) を参照してください。
Kubectl にできること
前述の通り kube
は kubectl
の wrapper として機能するため、kubectl
で行える任意のオペレーションを実行可能です。 コマンドはすべて kubectl
を kube [env]
に読み替えることでそのまま実行できます。 したがって kubectl get pods
は kube qa get pods
や kube sandbox get pods
などと読み替えることで実行ができます。
kubectl
については Overview of kubectl などを参照してください。
知っておくと良いコマンド
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
より詳細な使い方は kube の使い方 (internal) を参照してください。
もっと知りたい
最終更新