【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

* 上述「2)ノード(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 の種類

https://kubernetes.io/ja/docs/concepts/services-networking/service/

Service type Explanations Memo
ClusterIP (デフォルト) クラスタ内部のIPアドレスでServiceを公開 クラスタ外からアクセスできない。Ingressというリソースを利用して公開は可能
NodePort 全てのNodeのIPアドレスで指定したポート番号(NodePort)を公開 Nodeのランダムなポートを使用して外部サーバからアクセス
LoadBalancer 外部ロードバランサを用いて外部IPアドレスを公開
ExternalName Service を externalNameの内容にマッピング クラスタDNSサーバがその外部ホスト名の値をもつエイリアス(別名。CNAME)を返すように設定される
* CNAME レコードの詳細に関しては、以下の関連記事を参照の事

DNS (Domain Name System)
https://dk521123.hatenablog.com/entry/2015/02/03/151621

【5】用語整理

1)Namespace(名前空間)

* 同一の物理クラスター上で複数の仮想クラスターの動作をサポートしているのだが
 この仮想クラスターをNamespaceと呼ぶ

https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/namespaces/

* 詳細は、以下の関連記事を参照のこと

Kubernetes ~ Namespace ~
https://dk521123.hatenablog.com/entry/2024/10/25/000712

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 ~ 基本編 / Pod ~
https://dk521123.hatenablog.com/entry/2024/03/16/111336
Kubernetes ~ 基本編 / minikube ~
https://dk521123.hatenablog.com/entry/2023/05/07/214515
Kubernetes ~ Kind ~
https://dk521123.hatenablog.com/entry/2025/01/20/001754
Kubernetes ~ 基本編 / kubeconfigファイル ~
https://dk521123.hatenablog.com/entry/2023/05/24/211803
Kubernetes ~ 基本編 / Helm ~
https://dk521123.hatenablog.com/entry/2023/05/11/000840
Kubernetes ~ Namespace ~
https://dk521123.hatenablog.com/entry/2024/10/25/000712
Kubernetes ~ kube-proxy ~
https://dk521123.hatenablog.com/entry/2025/03/22/111422
Kubernetes ~ Health check / Probe ~
https://dk521123.hatenablog.com/entry/2025/03/27/182147
Kubernetes ~ ConfigMap ~
https://dk521123.hatenablog.com/entry/2025/03/11/000418
Kubernetes ~ Label / Selector ~
https://dk521123.hatenablog.com/entry/2025/04/01/223249
KubernetesKubernetes Dashboard
https://dk521123.hatenablog.com/entry/2023/05/27/144144
kubectlコマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
デバッグに役立つkubectlコマンド ~ kubectl debug ~
https://dk521123.hatenablog.com/entry/2025/03/13/003015
デバッグに役立つkubectlコマンド ~ kubectl logs ~
https://dk521123.hatenablog.com/entry/2025/03/15/231209
デバッグに役立つkubectlコマンド ~ kubectl get/describe/api-resources ~
https://dk521123.hatenablog.com/entry/2025/03/21/151944
Kubernetes ~ トラブルシュート方法 ~
https://dk521123.hatenablog.com/entry/2025/02/13/233043
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