NamespaceはK8sクラスタ内に仮想的なクラスタ分離機能を提供します。
K8sクラスタの初期状態では、クラスタ上の全てのリソースは誰でも、どのAPIリソース同士でも参照・操作可能です。
Namespaceを分けることで、参照できるAPIリソースや操作できるAPIリソースをある程度制御することが可能になります。
また別のK8sリソース(ResourceQuota、NetworkPolicy)と合わせて使用することで、Namespace単位で使用できるHWリソースの上限を設定したり、Namespace間の通信制御を行うこともできます。
複数の顧客向けサービスの提供(マルチテナント)や複数チームでK8sクラスタを共有する時などに使用します。
初期状態では次のようなNamespaceが用意されています。 (K8sサービスによっては他のNamespaceがあるかもしれません)
- default
- 実際にユーザが作成したPodやDeploymentなどが所属するデフォルトのNamespace
- 作成時に明示的にNamespaceを指定しなかった場合、このNamespaceに所属する
- 初期状態では何も配置されていない
- 実際にユーザが作成したPodやDeploymentなどが所属するデフォルトのNamespace
- kube-system
- 主にクラスタを構成するコンポーネントやK8s自身が作成したAPIリソースが配置される
- kube-public
- ユーザ共通のConfigMapなどが配置される
全てのAPIリソースがNamespaceに所属するわけではなく、PersistentVolume(PV)など、Namespaceに所属しないAPIリソースも存在します。
-
Namespaceリソースのオブジェクト一覧を表示してください。
-
Namespace:kube-systemに属するPodリソースのオブジェクト一覧を表示してください。
(-n <Namespace名> で参照するNamespaceを指定できます) -
以下を満たすマニフェストを作成しデプロイしてください。なお、Namespaceについては公式ドキュメントを参考にしてください。
- 要件
- Namespace
- 名前は
web
- 名前は
- Deployment
- 名前は
nginx - Namespaceは
web - replicas:
1 - labelはすべて
app: nginx - Pod
- 名前は
nginx
- 名前は
- 名前は
- Service
- 名前は
nginx-svc - Namespaceは
web - 対象のlabelは
app: nginx - プロトコルは
TCP - Portは
80 - targetPortは
80
- 名前は
- Namespace
- 要件
-
Namespaceリソースのオブジェクト一覧を表示し、
webが作成されていることを確認してください。 -
Namespace:
defaultのDeployment, Pod, Serviceのオブジェクト一覧を表示し、上記手順で作成したAPIリソースが表示されないことを確認してください。 -
Namespace:
webのDeployment, Pod, Serviceのオブジェクト一覧を表示し、nginxを含んだDeployment, Pod, Serviceがあることを確認してください。 -
接続確認に使用するcurlコマンドが実行可能なtestpodを
Namespace:defaultに作成し、testpodからService:nginx-svcに対して接続確認をしてください。 -
testpodから
Namespace:webに所属するService:nginx-svcに対して接続確認をしてください。
(別NamespaceのServiceを指定する場合は<service名>.<namespace名>と表記します。) -
接続確認に使用するcurlコマンドが実行可能なtestpodを
Namespace:webに作成し、testpodからService:nginx-svcに対して接続確認をしてください。 -
作成したリソースを削除してください。
以上で本演習は終了です。
具体的な操作およびその結果に関する回答例はこちらにあります。 具体的な操作方法がわからなかった場合や、想定した結果にならなかった場合などに参照してください。
次: DaemonSet