RHEL9 での kubeadm を利用した Kubernetes クラスタ構築

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

タグ: Kubernetes kubeadm rhel9 containerd Docker

10月1日 05:49 投稿