Namespaceとは
manifestのリソース指定:
kind: Namespace
Namespaceは、公式ドキュメントでは以下のように説明されています。
Namespaces are a way to divide cluster resources between multiple users (via resource quota).
Namespaceはk8sクラスタ内部で、環境を分けるために機能です。
分けると言っても、実際に完全な分離はできないため、使う場面が限られています。
※複数チームでの開発や、複数のプロジェクトが同じクラスタを使用する時にNamespaceが使われます。
デフォルトのNamespaces
k8sでは、デフォルトで下記の3つのNamespaceが用意されています
- kube-system:k8sクラスタのコンポーネントやアドオンがデプロイされるNamespace
- kube-public:全ユーザーが利用できるConfigMapなどを配置するNamespace
- default:デフォルトのNamespace。Namespace指定なしで作成したリソースは基本ここに属します。
同じNamespace内で同じ名前のリソースは作成できません。リソースに属すNamespaceは一つのみです。
ちなみに、以前説明した通り、k8s内部の名前解決は(DNS)以下の形式です。
<service-name>.<namespace-name>.svc.cluster.local
また、すべてのリソースがNamespaceに属しているわけではありませんので、ご注意ください。
※例えば、nodeとpersistentVolume
# リソース確認
# In a namespace
kubectl api-resources --namespaced=true
# Not in a namespace
kubectl api-resources --namespaced=false
Namespaceに対する設定
具体的Namespaceで何が設定可能でしょうか。
Namespaceごとに、以下の項目が設定可能です。
- ResourceQuota:リソースの上限数を決めるリソース
- RBAC(RoleBaseAccessControl):権限の設定
- NetworkPolicy:ネットワークの制限を掛けるための設定
RBACとNetworkPolicyによって、Namespaceで環境を分離することを可能になっています。
Namespaceのmanifest例
apiVersion: v1
kind: Namespace
metadata:
name: <namespace-name>
最後に
Namespaceは大きなプロジェクトで使うことの多い機能です。
小さい環境の場合、default Namespaceを使えばいいでしょう。
また、最初は使わず、必要になった時点から使い始めるもの問題ありません。
ここまで読んでいただいて、お疲れ様でした。
コメント