Wantedly Engineering Handbook
  • Wantedly Engineering Handbook
  • まえがき
  • 第一部:開発チームへの案内
    • 技術とアーキテクチャ
    • プロダクト概要(未執筆)
    • 開発チームの構造
    • コミュニケーションの全体
    • ドキュメンテーション(未執筆)
    • カレンダー
    • 障害対応の心構え
    • 効率的な社内知識の調べ方
    • 外部発信(執筆中)
  • 第二部:技術領域への案内
    • Apps
      • アプリを提供するプラットフォーム
      • デザインシステム入門
      • Web アプリのアーキテクチャ
      • プロダクトデザイナーと上手に協働するための心得
      • Web アプリのデザインシステムライブラリ
      • Web アプリ共通ライブラリ "React Shared Component" の紹介
      • モバイルアプリのアーキテクチャ
      • モバイルアプリのデザインシステムライブラリ(未執筆)
    • The System
      • protobuf スキーマと gRPC 通信
      • 実践: gRPC in Ruby
      • 実践: gRPC in Go
      • GraphQL Gateway - アプリ向けに API を公開する
      • Wantedly Visit で BFF GraphQL サーバーを辞めた理由
      • 実践: GraphQL スキーマ設計(未執筆)
      • API での認可処理 (Authorization)
      • マイクロサービス共通ライブラリ "servicex" の紹介
      • 非同期メッセージング処理入門(未執筆)
      • バッチ処理入門(未執筆)
    • Infrastructure
      • Infrastructure Squad
      • プロダクト開発のための Kubernetes 入門
      • インフラ構成概要
      • リリース・デプロイ戦略を支える技術
      • SaaS を活用する:New Relic, Honeybadger, Datadog
    • Data
      • データ基盤入門
      • レコメンデーション
      • Looker 入門
      • 推薦システムの開発に使っているツール
    • 開発プロセス
      • Git の慣習
      • ポストモーテムの取り組み
      • 負債返済日の取り組み
      • プロダクトの課題発見及び解決
      • ソフトウェアデザインの基礎
      • コードレビュー
      • コーディング規約
      • リリース・デプロイ戦略
      • 上長承認が必要な作業
      • アーキテクチャディシジョンレコード(ADR)
      • 作業ログを残す意味
      • 多言語化対応(i18n)
      • メール開発
    • 開発ツール
      • 社内利用している開発ツールの最新状況
      • kube
      • Code Coverage
      • Kubefork
  • おわりに
    • ロードマップ(未執筆)
    • Handbook の書き方
    • コントリビューター
  • 付録
    • 社内用語集
    • 主要な GitHub レポジトリのリスト(未執筆)
    • 今後の挑戦・未解決イシュー(未執筆)
    • プロダクト開発組織のバリュー(未執筆)
    • 採用についての考え方(未執筆)
GitBook提供
このページ内
  • 想定読者
  • kube とはなにか
  • 責務
  • 実装概要
  • セットアップ
  • インストール
  • 設定
  • コマンド体系
  • 機能
  • Kubefork
  • Kubectl にできること
  • 知っておくと良いコマンド

役に立ちましたか?

  1. 第二部:技術領域への案内
  2. 開発ツール

kube

前へ社内利用している開発ツールの最新状況次へCode Coverage

最終更新 3 年前

役に立ちましたか?

ここでは Wantedly の社内ツールである kube の概要について解説します。 kube というツール自体に着目し、Kubernetes やその運用方法については扱いません。

この章を Wantedly に存在する kube に関するルートドキュメントと位置づけます。 したがって説明は概論にとどめて細かい利用方法などは他のドキュメントで保管していくものとします。 現在各所に散らばる 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 関連ツールに渡すこともある

  • 各種ツールを組み合わせたり複数回呼び出すこともある

  • 稀にどのツールにも依存しない機能も存在する

セットアップ

インストール

# 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 に関わらないコマンドも一部ありますが、下のような事情からこのような運用も一定の範囲で行っています。

  • 全開発者がインストールしている

  • インストール方法が簡単

  • インストールが認証されている

機能

Kubefork

Kubectl にできること

前述の通り 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

もっと知りたい

擬似的に Kubernetes クラスタをコピーし、自分専用のデプロイ先として用いることで開発を簡単にする機能です。 詳しくは を参照してください。

kubectl については などを参照してください。

より詳細な使い方は を参照してください。

wantedly/kube-go (internal)
プロダクト開発のための Kubernetes 入門
Kubefork (internal)
Overview of kubectl
kube の使い方 (internal)
プロダクト開発のための Kubernetes 入門
kube English version (internal)
Non-infra Engineers' Infrastructure at Wantedly (internal)
wantedly/kube-go (internal)