Kubernetes(k8s)クラスターをセットアップすると、初期状態でいくつかの**Namespace(名前空間)**が自動的に作成されます。Namespaceは、クラスター内のリソースを論理的に分離するための仮想的な区画であり、チームやプロジェクト、環境ごとにリソースを整理・管理するのに役立ちます。
初期状態で作成される主要なNamespaceは以下の4つです。
1. kube-system
- 用途: KubernetesクラスターのシステムコンポーネントやアドオンがデプロイされるNamespaceです。
- 内容:
kube-apiserver
,kube-controller-manager
,kube-scheduler
,etcd
などのコアコンポーネントのPodや、DNSサービス(CoreDNS)、Kubernetes DashboardなどのアドオンがこのNamespaceに配置されます。 - 注意: 通常、ユーザーがこのNamespace内のリソースを直接操作することは推奨されません。
2. kube-public
- 用途: 全てのユーザーが読み取り可能なリソースを配置するためのNamespaceです。
- 内容: 主にクラスター情報や、クラスター全体で共有されるConfigMapなどが配置されます。例えば、クラスターの発見(discovery)に必要な情報などが含まれることがあります。
- 注意: このNamespaceに機密情報やユーザー固有のデータを配置すべきではありません。
3. kube-node-lease
- 用途: 各ノードのハートビート情報(ノードが正常に動作していることを示す信号)を保存するためのNamespaceです。
- 内容: 各ノードに対応するLeaseオブジェクトが格納されます。これにより、大規模なクラスターにおけるノードのヘルスチェックのパフォーマンスが向上します。
- 注意: 通常、ユーザーがこのNamespace内のリソースを直接操作することはありません。
4. default
- 用途: Namespaceを明示的に指定せずにリソースを作成した場合に、デフォルトでデプロイされるNamespaceです。
- 内容: ユーザーが作成するアプリケーションのPod、Service、Deploymentなどのリソースが、特に指定がなければこのNamespaceに配置されます。
- 注意: 小規模なクラスターや学習目的では
default
Namespaceを使用することも多いですが、本番環境や複数のアプリケーションを運用する環境では、リソースの衝突や管理の複雑化を避けるため、カスタムのNamespaceを適切に作成して利用することが推奨されます。
これらの初期Namespaceを理解することは、Kubernetesクラスターの基本的な動作と管理を把握する上で重要です。
参考
- 青山真也, 『Kubernetes完全ガイド 第2版 impress top gearシリーズ』, インプレス (2021)
- Kubernetes Concepts - Namespaces | Kubernetes