基本的なクラスタ リソースを調べる
このステップでは、すべての名前空間にわたって基本的な Kubernetes リソース(ポッド、デプロイメント、サービスなど)を調べます。-A(または --all-namespaces)フラグを使用することで、クラスタ全体にわたるリソースの組織化方法を確認できます。これは、Kubernetes の 名前空間 の概念を導入し理解する良い機会です。
名前空間:リソースの隔離
名前空間は、Kubernetes クラスタ内の論理的な区分であり、リソースの組織化と管理に役立ちます。関連するオブジェクトをグループ化し、ポリシー、アクセス制御、およびリソース クォータを細かいレベルで適用する方法を提供します。リソースを異なる名前空間に分離することで、以下のことができます。
- 組織化の向上: 関連するワークロードをグループ化する(たとえば、プロジェクト、チーム、または環境による区分 — 開発、テスト、本番など)。
- セキュリティとアクセス制御の強化: 特定の名前空間内のリソースを表示または変更できるユーザーまたはサービス アカウントを制限する。
- リソース管理の簡素化: リソース制限、ネットワーク ポリシー、およびその他のクラスタ全体の構成をより効果的に適用する。
-A(または --all-namespaces)フラグでリソースを一覧表示すると、Kubernetes システムに属するコンポーネントが kube-system 名前空間にあることに気付きます。この名前空間はクラスタレベルのインフラストラクチャ用に割り当てられています。ユーザーが作成したアプリケーションは通常、default 名前空間または定義したその他のカスタム名前空間にあります。
名前空間とリソース
flowchart LR
%% User interacts with the cluster via kube-apiserver
User((Developer))
User -->|kubectl get pods -A| API[kube-apiserver]
%% Control Plane Subgraph
subgraph ControlPlane[Control Plane]
API
ETCD[etcd]
SCH[kube-scheduler]
CTLM[kube-controller-manager]
end
API --> ETCD
API --> SCH
API --> CTLM
%% kube-system namespace
subgraph kube-system[Namespace: kube-system]
SysDeployment[Deployment: coredns]
SysPod1[Pod: coredns-xxx]
SysService[Service: kube-dns]
SysDeployment --> SysPod1
SysService --> SysPod1
end
%% default namespace (renamed to avoid parse issues)
subgraph defaultNs[Namespace: default]
DefDeployment[Deployment: my-app]
DefPod1[Pod: my-app-pod1]
DefPod2[Pod: my-app-pod2]
DefService[Service: my-app-service]
DefDeployment --> DefPod1
DefDeployment --> DefPod2
DefService --> DefPod1
DefService --> DefPod2
end
%% dev namespace
subgraph dev[Namespace: dev]
DevDeployment[Deployment: dev-app]
DevPod[Pod: dev-app-pod]
DevService[Service: dev-app-service]
DevDeployment --> DevPod
DevService --> DevPod
end
%% Demonstration of communication
API --> kube-system
API --> defaultNs
API --> dev
この図では:
- コントロール プレーン は、クラスタ全体を管理し、ノードと通信してワークロードを制御します。
- 名前空間(
kube-system、default、dev など)は、クラスタ内のリソースを論理的に分離します。
kube-system には、CoreDNS や kube-dns のようなシステムレベルのコンポーネントがあります。
default は一般的なワークロード用に一般的に使用され、ここでは my-app デプロイメントで表されています。
dev は、本番ワークロードから隔離された開発環境を表す場合があります。
すべての名前空間にわたるリソースを表示することで、これらの論理的な区分が組織化されたセキュアなクラスタを維持する方法を包括的に理解できます。
例:
すべての名前空間にわたるすべてのポッドを一覧表示するには:
kubectl get pods -A
出力例:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-787d4945fb-j8rhx 1/1 Running 0 20m
kube-system etcd-minikube 1/1 Running 0 20m
kube-system kube-apiserver-minikube 1/1 Running 0 20m
kube-system kube-controller-manager-minikube 1/1 Running 0 20m
kube-system kube-proxy-xb9rz 1/1 Running 0 20m
kube-system kube-scheduler-minikube 1/1 Running 0 20m
kube-system storage-provisioner 1/1 Running 1 (20m ago) 20m
ここでは、kube-system 名前空間に実行されているすべてのシステム関連のポッドが表示されます。異なる名前空間に他のデプロイメントやサービスがある場合、それらもこの一覧に表示され、それぞれが名前空間によって明確にスコープ付けられます。
すべての名前空間にわたるすべてのデプロイメントを一覧表示するには:
kubectl get deployments -A
出力例:
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system coredns 1/1 1 1 20m
coredns デプロイメントは kube-system 名前空間にあります。
すべての名前空間にわたるすべてのリソースの包括的なビューを取得するには:
kubectl get all -A
このコマンドは、異なる名前空間にわたるポッド、サービス、およびデプロイメントの概要を表示し、これらのリソースがクラスタ全体にどのように分布しているかを理解するのに役立ちます。
要点:
- 名前空間 は、Kubernetes クラスタ内で論理的な隔離と組織化を提供します。
- 異なる Kubernetes コンポーネントとリソースは、特定の名前空間に組織化されています(たとえば、コア サービス用の
kube-system、一般的なワークロード用の default、および作成するその他の名前空間)。
- すべての名前空間にわたるリソースを表示するために
-A を使用することで、クラスタがどのように構成されており、名前空間がリソースの組織化とアクセス制御の境界としてどのように機能するかを洞察することができます。
名前空間が論理的な環境としてどのように機能するかを理解することで、特にデプロイを拡大し、Kubernetes 環境により多くの複雑さを導入する際に、ワークロードと関連するクラスタ リソースをより良くナビゲートし、隔離し、管理することができます。