Kubernetes の基礎概念
アーキテクチャと主要コンポーネント
コントロールプレーンノード:
- APIサーバー(kube-apiserver):クラスタへのアクセスポイントで、すべてのRESTリクエストを処理し、認証と承認を実行します。etcdとのみ通信するコンポーネントです。
- スケジューラー(kube-scheduler):ワークロードを適切なワーカーノードに割り当てる機能を担い、リソース要件や配置制約に基づいて決定を行います。
- コントローラマネージャー(kube-controller-manager):デプロイメントやレプリカセットなどの各種コントローラを実行し、システムの状態が期待通りになるように維持します。
- etcd:分散キーバリューストアで、クラスタ全体の設定情報と状態データを保管します。
ワーカーノード:
- kubelet:マスターとの通信を行うエージェントで、ノード上で実行されるコンテナのライフサイクルを管理します。
- kube-proxy:ネットワークルールを維持し、サービスの負荷分散とトラフィック転送を実現します。
- コンテナランタイム(Docker/containerd):コンテナの実行エンジンで、イメージの取得やコンテナの作成を担当します。
主要リソースオブジェクト
Pod:
- 最小のデプロイ単位で、共通のネットワークとストレージを共有する複数のコンテナで構成されます。
- 例:WebアプリケーションのPodには、アプリケーションコンテナとログ収集コンテナが含まれることがあります。
Service:
- Podグループへのアクセス方法を定義し、安定したIPアドレスとDNS名を提供します。
- 種類にはClusterIP(内部向け)、NodePort(ノード経由での公開)、LoadBalancer(クラウドプロバイダーのロードバランサー)があります。
Deployment:
- Podのレプリカ数と更新戦略を管理し、アプリケーションの可用性を確保します。
環境構築手順
| OSバージョン | ホスト名 |
|---|---|
| RHEL 9.3 | k8s-control-plane |
| RHEL 9.3 | k8s-worker-1 |
| RHEL 9.3 | k8s-worker-2 |
| RHEL 9.3 | image-registry |
仮想マシンの複製
目的:Kubernetesクラスタは複数ノードで構成されるため、同一構成の環境を迅速に作成することで、手動設定による差異を防ぎます。
特徴:
- ハードウェアリソースの標準化:コントロールプレーンノードには4GBメモリを割り当てて制御コンポーネントを実行し、ワーカーノードには2GBメモリを割り当ててワークロード処理に専念させます。
- ネットワーク統一性:全ノードがNATモードを使用して同一サブネット内で通信できるようにします。
IPアドレスとホスト名の設定
| IPアドレス | ホスト名 |
|---|---|
| 192.168.67.100 | k8s-control-plane |
| 192.168.67.10 | k8s-worker-1 |
| 192.168.67.20 | k8s-worker-2 |
| 192.168.67.141 | registry.example.com |
Harborレジストリの構築
詳細については以下のリソースを参照してください:
認証機能付きHarborコンテナイメージレジストリの構築
ホスト名解決の設定
すべてのK8Sノードで以下を実行:
cat >> /etc/hosts << EOF
192.168.67.100 k8s-control-plane
192.168.67.10 k8s-worker-1
192.168.67.20 k8s-worker-2
192.168.67.141 registry.example.com
EOF
Dockerのインストール
理由:Kubernetesはコンテナを直接管理せず、コンテナランタイム(Dockerなど)を通じて操作します。DockerはKubernetesがサポートする代表的なランタイムの一つです。
Dockerリポジトリの構築:
cat >> /etc/yum.repos.d/docker.repo << EOF
[docker-ce-stable]
name=Docker CE Stable
baseurl=https://download.docker.com/linux/centos/9/x86_64/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
EOF