広告

kubernetes – Namespace

infrastructure as code

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を使えばいいでしょう。
また、最初は使わず、必要になった時点から使い始めるもの問題ありません。

ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました