■ はじめに
少しづつだが、Kubernetes について勉強していく
目次
【1】Kubernetes 1)コンテナ管理の具体例 2)その他のコンテナオーケストレーション 3)docker-compose との比較 【2】公式サイト 【3】動画 【4】コンポーネント 1)コントロールプレーン(Control Planes) 2)ノード(Node) 補足:Kubernetes Cluster(クラスタ) 【5】リソース 1)Node 2)Pod 3)ReplicaSet 4)Deployment 5)Service 【6】用語整理 1)Namespace(名前空間) 2)CRD (Custom Resource Definitions) 3)Amazon EKS
【1】Kubernetes
* Dockerコンテナ管理 => よく「コンテナのオーケストレーションツール」とか言われている
補足
* Kubernetes (ギリシャ語) = 操舵手, パイロット, 人生の道標 * koo-ber-net-ees = クーべネティス * 略語:K8s(k-eights) => 8文字の「ubernete」を「8」 * Google製 * Go言語で作成
1)コンテナ管理の具体例
* 複数のDockerホストの管理 * スケーリング / オートスケーリング * ロードバランシング * コンテナの死活監視 etc...
2)その他のコンテナオーケストレーション
1)Docker Swarm => Docker 標準 2)Apache MESOS
3)docker-compose との比較
* docer-compose は、コンテナ作成のみだが Kubernetes は、コンテナ作成+コンテナ監視・維持。 => 例えば、Kubernetes は、コンテナが停止しても、 維持のために新しいコンテナを作り直す
【2】公式サイト
* 充実している
https://kubernetes.io/ja/docs/home/
チュートリアル
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/
【3】動画
日本語
https://youtu.be/r0NpHb-6IvY?t=102
英語
https://www.youtube.com/watch?v=4ht22ReBjno&feature=youtu.be&t=31
【4】コンポーネント
* 大きく分けて、以下の2つ。 1)コントロールプレーン(Control Planes。制御盤) 2)ノード(Node)
1)コントロールプレーン(Control Planes)
* クラスタのWorker NodeとPodを管理する * コントロールプレーンは、以下の表の5つのコンポーネントで構成 => 以下の構成図を見ながら確認するのがいい。
https://kubernetes.io/ja/docs/concepts/overview/components/
# | 項目 | 内容 |
---|---|---|
1 | kube-apiserver | 外部とのやり取りをするサービス。kubectlコマンドを受けて実行 |
2 | kube-controller-manager | コントローラを統括管理し、実行 |
3 | kube-scheduler | Podをワーカーノードに割り当てるサービス |
4 | colud-controller-manager | AWSなどのクラウドサービスと連携し、サービスを作る |
5 | etcd | クラスタ情報を管理するキーバリュー型のデータベース |
マスターノード(Master Node)
* コントロールプレーンを実行しているのがマスターノードと呼ぶ
2)ノード(Node)
* アプリケーションを実行しているマシン => ノード自体は、一台の物理サーバもしくは仮想マシン => 以下のサイトの構成図が分かりやすい * Worker Nodeとも呼ぶ。
https://kubernetes.io/ja/docs/concepts/overview/components/
https://thinkit.co.jp/article/17453
* コンテナの実行ホストを提供する
補足:Kubernetes Cluster(クラスタ)
* 「コントロールプレーン」と「ノード」の「集まり(Cluster)」を クラスタとして管理
【5】リソース
* Kubernetes は、OS機能(e.g. iptables)や仕組みを「リソース」という オブジェクトとして抽象化して管理している * 以下は代表的なリソースである。 1)Node(ノード) 2)Pod(ポッド) 3)ReplicaSet(レプリカセット) 4)Deployment(デプロイメント) 5)Service(サービス) Pod < ReplicaSet < Deployment
https://news.mynavi.jp/itsearch/article/devsoft/4358
https://blog.a-know.me/entry/2018/08/14/185324
https://qiita.com/sky0621/items/beb12145f1b674fe7904
https://qiita.com/tkusumi/items/01cd18c59b742eebdc6a
https://qiita.com/mihirat/items/ebb0833d50c882398b0f
1)Node
* アプリケーションを実行しているマシン * Worker Node ともいう * 以下が存在する + Container Runtime (Dockerなど) + kubelet + kube-proxy
# | 項目 | 内容 |
---|---|---|
1 | kubelet | マスターノードのkube-schedulerと連携して、ワーカーノード上にPodを配置し実行。また、Podを監視し、kube-schedulerへ通知 |
2 | kube-proxy | ネットワーク通信をルーティングする仕組み |
2)Pod
* コンテナをグループ化したもの * Kubernetesで管理上の最小単位 => 『コンテナ』の集合体(Container/Networking(PodのIPアドレス)/Volumn) 以下の公式サイトの構成図を見るとイメージしやすいかも。
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/
=> 仮想NICを共有(同じIP、同じVolumn)し、仮想ホストのように働く => 基本的には1Pod:1コンテナだが、1Pod:複数コンテナも可能。 => Node とは、「1 Node:多 Pod」の関係
3)ReplicaSet
* Podを生成・管理 => 指定された数のポッド数を『維持』するための Pod マネージャ的存在 => 障害などでPodが減少した場合、別ノードで自動的にPodを起動し、 レプリカ数を維持する * ReplicationControllerの後継
https://kubernetes.io/ja/docs/concepts/workloads/controllers/replicaset/
4)Deployment
* 複数のReplicaSetを生成・管理 => 例えば、サーバのVersion Upをさせたい場合に使用 => 以下のサイトが分かりやすいかも
https://qiita.com/tkusumi/items/01cd18c59b742eebdc6a
5)Service
* Podに対して、まとめて管理するもの
Service の種類
a)ClusterIP (デフォルト) ... Kubernetes内での通信で利用(クラスタ外からアクセスできない) b)NodePort ... 外部ネットワークからのアクセスを提供 ... KubernetesのNodeのランダムなポートを使用して外部サーバからアクセス c)LoadBalancer ... ロードバランサー d)ExternalName ... 外部サービスに対して、エイリアス(別名)を作成
https://kubernetes.io/ja/docs/concepts/services-networking/service/
【5】用語整理
1)Namespace(名前空間)
* 同一の物理クラスター上で複数の仮想クラスターの動作をサポートしているのだが この仮想クラスターをNamespaceと呼ぶ
https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/namespaces/
2)CRD (Custom Resource Definitions)
* DeploymentやPodといったリソースではなく ユーザ独自のリソースを定義することもできる機能 * Kubernetes APIを拡張して独自のリソースを定義
https://qiita.com/cvusk/items/773e222e0971a5391a51
https://qiita.com/Attsun/items/785008ef970ad82c679c
https://www.sambaiz.net/article/182/
https://hi1280.hatenablog.com/entry/2019/11/15/003101
https://atmarkit.itmedia.co.jp/ait/articles/2109/10/news013.html
https://zoetrope.github.io/kubebuilder-training/introduction/basics.html
3)Amazon EKS
* EKS : Elastic Kubernetes Service * Kubernetes クラスタを管理するための AWSサービス
参考文献
https://thinkit.co.jp/article/18079
https://thinkit.co.jp/article/13542
https://thinkit.co.jp/article/17453
https://qiita.com/mihirat/items/ebb0833d50c882398b0f
https://qiita.com/Kta-M/items/ce475c0063d3d3f36d5d
https://y-ohgi.com/introduction-kubernetes/
https://docs.microsoft.com/ja-jp/learn/modules/intro-to-kubernetes/
関連記事
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/02/005053
Kubernetes ~ MicroK8s / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/03/10/230329
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ 基本編 / minikube ~
https://dk521123.hatenablog.com/entry/2023/05/07/214515
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Kubernetes ~ 基本編 / kubeconfigファイル ~
https://dk521123.hatenablog.com/entry/2023/05/24/211803
Kubernetes ~ 基本編 / Helm ~
https://dk521123.hatenablog.com/entry/2023/05/11/000840
Kubernetes ~ Kubernetes Dashboard ~
https://dk521123.hatenablog.com/entry/2023/05/27/144144
Amazon EKS ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/02/23/000000
Amazon EKS ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/10/220241
Apache Flink ~ 環境構築編 / Kubernetes ~
https://dk521123.hatenablog.com/entry/2023/05/09/235256