Kubernetesで名前空間をつくる方法


その移植性と拡張性のおかげで、Kubernetesはコンテナ化されたワークロードとサービスを管理する開発者のための信頼性の高いオープンソースコンテナオーケストレーションシステムと見なされます.一般的にK 8 Sとして知られている、プラットフォームは、退屈なソフトウェアの展開と管理タスクの自動化を介してスケーラビリティを可能にします.
しかし、多目的環境でスケーラビリティで、コンテナ化されたアプリケーションは、より良い管理を必要とします.これはKubernetesの1つまたは複数の名前空間を必要とする場合です.
あなたがまだ質問を尋ねているならば、『Kubernetes名前空間である』、あるいは、あなたが話題のより明快さを必要とするならば、我々がKubernetesで名前空間をつくることについて知っている必要があるすべてをカバーするので、読んでください.

Kubernetesの名前空間とは


Kubernetesでは、名前空間は単純なサブクラスタに複雑なクラスタを組織化する手段です.これは、明確なチームとサブチームが衝突なしで単一のKubernetesクラスタを共有するのを助けます.
クラスタが成長するにつれて、リソース名の間の衝突の可能性は増加します.名前空間は、この問題を解決する方法を提供します.これは、同じクラスタ内に保持しながら、異なるグループのリソースを分離するのに役立ちます.これで、リソース名は各クラスタの代わりに各々の名前空間のためにユニークでなければなりません.
この概念を理解するために、同じクラスターを使用している組織から2チームを考えてください.
つのチームからの新しい従業員は誤って名前の類似性のために別のチームに属する重要なリソースを編集するかもしれません.個別の名前空間を使用すると、リソースのスコープを定義することができます.

Kubernetes名前空間に含まれるもの


あなたの名前空間にいくつかのサービス、レプリケーションコントローラ、PODなどを追加してスコープを制限します.このコマンドを実行して、名前空間が何を構成できるかを確認します.
kubectl api-resources --namespaced=true

Kubernetes名前空間から除外されるもの


- PersistentVolume、StorageClass、およびノードのような、クラスタ全体のオブジェクトの可視性またはアクセシビリティは、名前空間を使用して制限することはできません.名前空間を通してすべてのオブジェクトを制限できないか確認するには、次のコマンドを使用します.
kubectl api-resources --namespaced=false

どのように、名前空間は仮想クラスタと異なりますか?


名前空間が組織内の異なるチームを表す場合、仮想クラスタは異なる組織が自分のオフィスを持っている建物を表します.
仮想クラスタは、同じクラスタ内でより高い分離度を提供する.サービスとポッドには分離されていませんが、仮想クラスタのスコープを定義しながら、永続化ボリューム、ノード、およびクラスタロールをバンドルできます.名前空間を使用してグループ化するとき、後者のコンポーネントは共有されたままです.

Source

高速事実:Kubernetes名前空間

  • 互いに入れ子にできない
  • わずかに異なる資源を区別するための「ラベル」によって特徴づけられる
  • チームによって資源を分類する手段を提供する
  • 名前の衝突を避ける
  • より良い可搬性、アクセス制限、および管理のための環境を分離する
  • ストレージクォータを割り当てることができます
  • 複数の仮想クラスタを含む
  • ユニークなKubernetesリソース
  • デフォルトの名前空間


    Kubernetesは4つのプリロードされた名前空間`を持っています
  • デフォルト
    リソースが名前空間にグループ化されるまで、それらは' default '名前空間の一部です.したがって、あなたのKubernetesコマンドのどんな名前空間にも含まれていないすべてのリソースのために、あなたは参照' default 'を使用しなければなりません.
  • 空部制度
    すべてのシステムで作成されたKubernetesコンポーネントがこの名前空間に追加されます.それで、あなたはそれにあなたの資源を加えるべきでないと示唆されます.
  • 公共部
    認証されたかどうかは、クラスタへのアクセスを持つ誰もがこの名前空間のリソースを読み取ることができます.これは自動的に作成され、必要に応じて、その従来の可視性を変更することができます.
  • クベノードリース
    クラスタ内の各ノードに関連するリースオブジェクトは、この名前空間に保持されます.これらのリースの目的は、制御プレーンがノード故障をより速く発見するのを助けることになっています.このために、彼らはハートビートデータをKubernetes control plane .
  • 複数の名前空間が必要ですか?


    名前空間は、同じクラスタ内で論理的に残っているので、クラスタの複雑さを増して、何も達成しないように賢明にそれらを作成し、使用することが重要です.
    実際には、1つの名前空間(デフォルト)は小さなチームやプロジェクトに十分です.
    しかし、複数のコンテナ化されたアプリケーションや複数のチームを使用してプロジェクトを処理する場合は、複数の名前空間を維持する作業環境を分離するのに最適です.Kubernetes名前空間を使用すると、あなたのチームまたはプロジェクトによりクリーンで特定のリソースセットを提供できます.
    複数の名前空間を作成するには、いくつかの状況で良いアイデアです.
    アイソレーション
    同じクラスタ上で作業する複数のチームがクラスタ上で展開するにつれて衝突する可能性があります.それで、どのようにチームはこの状況を避けることができますか?
    プロジェクトとマイクロサービスの良いレベルの分離は、名前空間を作成することで実現できます.これは、チームが自分のリソースの名前を他のチームが選択した名前を気にすることなく名前を付けることができます.これはまた、1チームの操作の問題が別の衝突を排除します.
    目的
    アプリケーションが複雑さを増すにつれて、ステージング(開発)、ライブ(展開)、テストコンポーネントの区別が難しくなる.これらの場合には、クラスタを自分の目的に基づいて名前空間に分割することで、より良いレベルの組織を実現することができます.これは、コードがテスト中などに有効なプロジェクトが更新されているインスタンスを防ぎます.
    特権
    組織では、複数のクラスタを使用せずに、ユーザーとプロセスに対するアクセス制限を強制します.たとえば、組織内のさまざまな人々にリソースのセットのアクセス許可のさまざまなレベルを提供する場合は、名前空間を使用すると、これを達成することができます.
    用途
    クラスタ内のリソースの公平な配分を確保するために、チームのリソースクォータを定義するには、複数の名前空間を使用できます.メモリ使用量やCPU使用量に関するポリシーを定義することで、リソースをよりよく制御できます.
    探索性
    開発チームが1つのクラスタ内の異なるクライアントのプロジェクトを配置すると想像してください.これらのプロジェクトをより良い検索可能性と組織を達成するために分離する必要があります.複数の名前空間の作成は、これを実現するための理想的な解決策です.
    パフォーマンス
    特定のプロジェクトがKubernetes API呼び出しを処理する必要がある場合は、別の名前空間を割り当てる必要があります.これは、システムがより速く操作を実行し、コンテナ化されたアプリケーションのパフォーマンスを向上させるのに役立ちます.

    名前空間を使わないときはいつですか?


    地理的サーバ分割たとえば、1つのサーバーをあなたの米国ベースのクライアントに割り当て、あなたのEUの顧客の別の別の場合は、名前空間を使用してパーティションを助けることはありません.
    ここで増加したセキュリティが必要です.名前空間が他の名前空間にも見えている共有コンポーネントを持っているかもしれないので、彼らはセキュリティ上重要である例(例えば課金している状況)で使用されてはいけません.
    将来より多くのリソースが必要な場合.より高いレベルの設定可能性のために、将来、より多くのノードまたは他のそのようなリソースを加える必要があるかもしれません.このような場合、別々のクラスタまたは別の仮想クラスタを使用する方がよい.

    Kubernetes名前空間を横断するポッドからポッドへの通信の有効化


    別の名前空間、および同じ名前空間を共有するPODをシームレスに互いに通信するように構成することができます.これを実現するには、拡張されたDNSアドレスをサービス名にプレフィックスされた名前空間の名前で利用する必要があります.たとえば、名前空間'ゲーム'で' deploy 'という名前のサービスを'ゲーム'と呼びます.展開.
    サービスへのアクセスについての軽量制限(ファイアウォールに比べて低いレベルの設定)を設定するには、ネットワークポリシーを設定します.

    名前空間を作成する前に


    パブリックトップレベルドメインと同じ名前の名前空間を作成した場合、これらの名前空間の小さいDNS名を持つサービスは、パブリックDNSと重複する可能性があります.したがって、すべての異なる名前空間からのすべてのワークロード(末尾のドットが欠けている)は、パブリックDNSの代わりにそれらのサービスに向けてリダイレクトされます.
    この問題を回避するには、名前空間のトップレベルドメインと同じ名前を使用しないでください.サードパーティ製のセキュリティコントロール(入場webhook)は、警告し、名前空間の作成をブロックすることができます.
    また、必要に応じて各名前空間のユーザーレベルの制限を有効にする必要があります.

    Kubernetesで名前空間をつくる方法


    SSCONVOXという名前空間を作成するには、次のコードを使用できます.
    apiVersion: v1
    kind: Namespace
    metadata
    name: "ssconvox"

    You can add this code in a ‘.yaml’ file named “namespace.yml” and run this command -


    $ kubectl create –f namespace.yml

    名前空間の制御

    Other essential commands for working with Kubernetes namespaces are:

    • Seeing the list of available namespaces $ kubectl get namespace
    • Renaming
    • Namespaces CANNOT be renamed, so you must carefully name them in the very beginning.

      • Switching between namespaces


      kubectl config set-context --current --namespace=ssconvoxtwo

      • Getting details about a particular namespace


      $ kubectl describe namespace ssconvox

      • Getting the lists of pods in the current namespace


      $ kubectl get pods --namespace=ssconvox

      • Delete the namespace ‘ssconvox’


      $ kubectl delete namespace ssconvox

      Note: As deleting a namespace runs the garbage collection over services, pods, and everything that is present in a namespace, you must be extra-cautious before deleting your namespaces.

      どのようにKubernetesを開始するとすぐに名前空間を作成する

      If you’ve read this far but actually haven’t managed to get started with Kubernetes, this is the toughest part of the process - but don’t worry, we have you covered. The good news is that Convox (a PaaS solution for Kubernetes-based deployments) can help you get started with Kubernetes in just a few clicks.

      Even if you’re signed up to a different PaaS but don’t know how to help your team achieve optimal operational efficiency through Kubernetes, Convox can help you understand the operational benefits of a migration from your existing PaaS.

      Convox lets you use a better GUI while shipping all the infrastructure for Kubernetes from one platform. As it is production-ready with zero downtime, you need not worry about the underlying components of your Kubernetes configuration with it.

      For namespace creation in Kubernetes, just install Convox CLI to get started and follow the process outlined above. Convox will create separate namespaces for each new application.

      結論

      Creating multiple namespaces in Kubernetes is the way to go when you need to classify and run multiple environments in a cluster. With individual namespaces, you can define access restrictions, usage quotas, and isolated resources for a bunch of services and pods. However, you must learn everything about the scope and suitability of namespaces before you start using them. This is why we have covered the subject in its totality. We hope that this article has helped you answer the question of what is a namespace in Kubernetes and how to create a namespace when you need it.

      Using Kubernetes with Convox already or wanting to switch? Get started with Convox, install Convox CLI, and create namespaces now.