kubernetes覚書

# kubernetes(k8s) 覚書

## 用語

| 項目名                           | 内容                                                                               |
| -------------------------------- | ---------------------------------------------------------------------------------- |
| Pod                              | コンテナの管理やネットワーキングの目的でまとめられた、1 つ以上のコンテナのグループ |
| Service                          | Pod を外部に公開する                                                               |
| Deployment                       | Pod の作成。スケーリング管理。アプリケーション管理                                 |
| Job                              | 使い捨ての Pod を作成して任意のイメージでコマンドを実行                            |
| Operator                         | 独自のリソースを追加して k8s を拡張する                                            |
| Resource                         | k8s の文脈では、Pod、Deployment など                                               |
| CRD(Custom Resource Definitions) | カスタムリソース定義                                                               |
| Custom Controller                | Custom Resource の制御を行う                                                       |

<!-- ||| -->

## ソリューション・ケーススタディ

- 開発などの用途でローカルに k8s 環境を作る
  - [Minikube をインストール](https://minikube.sigs.k8s.io/docs/start/)
- [使い捨ての Pod で処理を実行する](https://kubernetes.io/ja/docs/concepts/workloads/controllers/job/)
- [ロールアウト(自動的に、段階的にデプロイ)、ロールバックの管理をする](https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/update/update-intro/)
  - [kubectl rollout](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout)
- [ローカルストレージや ネットワークストレージ、クラウドストレージなどをマウントする](https://kubernetes.io/ja/docs/concepts/storage/volumes/)
- [環境変数やコマンドライン引数を管理する](https://kubernetes.io/ja/docs/concepts/configuration/configmap/)
- [パスワードなどの機密データを管理する](https://kubernetes.io/ja/docs/concepts/configuration/secret/)

## Tool

| 名称                                             | 内容                           |
| ------------------------------------------------ | ------------------------------ |
| [kubeflow](https://www.kubeflow.org/)            | ワークフローの自動化           |
| [krew](https://github.com/kubernetes-sigs/krew/) | プラグインマネージャ           |
| [k9s](https://k9scli.io/)                        | CUI                            |
| [Lens](https://k8slens.dev/)                     | Desktop IDE                    |
| [Helm](https://github.com/helm/helm)             | パッケージ管理                 |
| [kompose](https://github.com/kubernetes/kompose) | k8s 上で docker-compose を実行 |
| [kube-ops-view](https://codeberg.org/hjacobs/kube-ops-view) |モニタリングツール|

<!-- | []() || -->

## プラグイン

| 名称                                                                           | 内容                                                                                 |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
| [stern](https://github.com/stern/stern)                                        | Pod の tail 出力を簡単に行う                                                         |
| [kubectl-iexec](https://github.com/gabeduke/kubectl-iexec)                     | 実行中の Pod を一覧して Shell 接続する                                               |
| [kubectl-view-allocations](https://github.com/davidB/kubectl-view-allocations) | リソース割当の一覧表示                                                               |
| kubectl-images                                                                 | Pod が使用している Image を一覧表示                                                  |
| ksniff                                                                         | tcpdump と Wireshark を利用して、任意の Pod のリモートキャプチャを開始する           |
| kubie                                                                          | 複数のシェルで異なるコンテキストを扱える。多くのクラスタの操作が必要な場合に重宝する |
| kubectl-tree                                                                   | ownerReferences を通して、オブジェクト間の所有関係を調べる。                         |
| kube-capacity                                                                  | Kubernetes クラスタのリソース要求、制限、および利用の概要を提供する                  |

## Link

- [Hello minikube](https://kubernetes.io/ja/docs/tutorials/hello-minikube/)
- [kubectl チートシート](https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/)

## CLI

- kubectl

  - create : 作成
    - deployment
  - delete : 削除
    - deployment
    - pod
    - service
  - get : 一覧取得
    - deployment
    - pods
    - events
    - services
  - describe : 内容記述
    - deployment/
    - pods/
  - set : 指定した機能をオブジェクトに設定
    - image: コンテナイメージをセット。
      - deployments/
  - rolloout : ローリングアップデート
    - undo : ロールバック
      - deployments/
  - scale
    - deployment/ : スケールする(Pod を増減させる)
      - `--replicas` : Pod 数
  - config
    - view : 設定を閲覧
    - set : 設定変更
      - memory
  - expose : Service の作成
    - deployment
      - `--type`
        - ClusterIP :プライベート IP でクラスタ内部にのみ公開
        - NodePort : NAT で公開
        - LoadBalancer : ロードバランサで公開
        - ExternalName : FQDN と Kube-DNS で公開
      - `--port`
  - cluster-info : クラスタ情報
  - port-forward : ポートフォワーディング
    - service/
      - --address
  - proxy : API アクセス用プロキシ
  - attach : コンテナにアタッチ
  - exec : Pod にシェル接続
  - label : Pod に名称をつける
  - annotate : リソースのアノテーションを設定
  - run : 指定したイメージをクラスターで実行
  - explain : リソースに関するドキュメントを表示
  - edit : リソースを編集
  - autoscale : オートスケール
  - certificate : 証明書を管理
  - top : リソースの利用状況(上位)を表示
  - cordon : ノードをスケジュール不可状態にする
  - uncordon : ノードをスケジュール可能状態にする
  - drain : ノードをメンテナンスモードにする
  - taint : ノードにスケジュール制御のための Taint を設定/設定解除
  - logs : Pod のログを表示
  - cp : コンテナとのファイルコピー
  - auth : 認可検査
  - debug : でバッギングセッションを作成
  - diff : 現バージョンと新バージョンの差異を表示
  - apply : コンフィグレーション情報をリソースに設定
  - patch : リソースの一部を変更
  - replace : リソースを置換
  - wait : リソースの状態待ち
  - kustomize : カスタマイズターゲットを生成
  - completion : シェル補完用コードを生成
  - alpha : アルファバージョンのコマンドを表示
  - api-resources : リソース種別の一覧を表示
  - api-versions : API バージョンを表示
  - plugin : プラグインを管理
  - version : kubectl のバージョンを表示

- minikube
  - start : クラスタ始動
  - dashboard : GUI ダッシュボードにアクセス
  - status : 状態取得
  - service : サービスに接続するための URL を表示
  - tunnel : LoadBarancer サービスに接続
  - addons : アドオン一覧、追加、削除
    - list
    - enable
    - disable
  - logs : デバッグログを表示
  - stop : クラスタ停止
  - delete : 削除
  - pause : 一時停止
  - unpause : 再開
  - image
    - ls : イメージ一覧
  - cache: イメージキャッシュの操作
  - config : コンフィグ値を管理
  - profile : プロファイルを表示
  - update-context : IP アドレス・ポート番号変更時に Kubernetes を更新
  - mount : minikube にディレクトリをマウント
  - ssh : minikube に SSH ログイン
  - node : ノードを管理
  - cp : minikube にファイルをコピー
  - ssh-key : 指定ノードの SSH 鍵パスを表示
  - ssh-host : 指定ノードの SSH ホスト鍵を取得
  - ip : 指定ノードの IP アドレスを表示
  - update-check : minikube の最新バージョンを表示
  - version : minikube のバージョンを表示
  - options : minikube のオプションを管理
  - license : ライセンスを表示
  - completion : シェル補完用コードを生成