【k8s】Kubernetes ~ 基礎知識編 ~

■ はじめに

少しづつだが、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/

関連記事

KubernetesWindows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
KubernetesLinux / 環境構築編 ~
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
KubernetesKubernetes 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