ウェブサイト検索

Kubernetesクラスターを管理するための50以上のKubectlコマンド


Kubectlは、Kubernetesクラスタに対してコマンドを実行するためのコマンドラインユーティリティです。これを使って、アプリケーションやマイクロサービスのデプロイ、リソースの閲覧と管理、ログファイルの検査など、幅広い作業を行うことができます。

このチュートリアルでは、Kubernetes(K8S)クラスターを管理するための一般的に使用されるkubectlコマンドを紹介します。

私たちは、ローカルのKubernetesクラスターとしてUbuntu 22.04上でMinikubeを使用しています。

Kubernetesオブジェクト/リソースの作成

Kubernetesでは、オブジェクトはクラスターが望ましい状態を維持するための永続的なエンティティです。これらは、クラスター内のワークロードの基本要素です。オブジェクトには、レプリカセット、デプロイメント、ポッド、デーモンセット、サービス、ネームスペース、コンフィグマップ、シークレット、及びいくつかのものとしての永続ボリュームが含まれます。

オブジェクトを作成する最も一般的な方法は、通常 YAML マニフェストファイルを使用することであり、通常は .yaml または .yml 拡張子が付いています。

YAML マニフェストファイルからオブジェクトを作成するには、次のように実行します:

$ kubectl apply -f ./file1.yaml

複数のYAMLファイルからリソースを作成するには、次を実行します:

$ kubectl apply -f ./file1.yaml  -f ./file2.yaml 

ディレクトリ内のすべてのマニフェストファイルからリソースを作成するには、次のコマンドを実行します:

$ kubectl apply -f ./dir   

URLからリソースを作成するには、次のように実行します:

$ kubectl apply -f https://sample-url.io

Kubernetesクラスター内のノード

ノードは、ポッドやワークロードを支える他のリソースが動作する物理的または仮想的なマシンです。各ノードは、ポッドを実行するために必要な複数のサービスを含むコントロールプレーンとして知られるマスターノードによって管理されます。クラスターは通常、複数のノードを持っています。

クラスターのノード数を取得するには、次のコマンドを実行してください:

$ kubectl get nodes

ノード上でポッドを実行するには、次のコマンドを実行します:

$ kubectl get pods -o wide | grep <node_name>

ノードをスケジュール不可能としてマークするには、次のコマンドを実行します。

$ kubectl cordon minikube

node/minikube cordoned

ノードをスケジュール可能としてマークするには、実行してください。

$ kubectl uncordon minikube

node/minikube uncordoned

リソース使用状況の指標を表示するには、RAMやCPUなどを実行してください:

$ kubectl top node <node_name>

ノードまたは複数のノードを削除するには、次のコマンドを実行します。

$ kubectl delete node <node_name>

クラスタ管理とコンテキスト

Kubernetesクラスタは、コンテナ化されたアプリケーションを実行するノードまたはサーバーのグループです。ノードは1つまたは複数のポッドを実行でき、ポッドには1つ以上の実行中のコンテナが含まれます。

マスターに関する情報を一覧表示すること。

$ kubectl cluster-info

kubectl のバージョンを確認するため。

$ kubectl version --short

Kubernetesクラスタの設定を表示するために。

$ kubectl config view

コンテキストを表示するために。

$ kubectl config get-contexts

利用可能なAPIリソースを一覧表示する。

$ kubectl api-resources

利用可能なAPIバージョンを一覧表示する。

$ kubectl api-versions

Kubernetesポッド

Kubernetes において、ポッドはクラスタ内で作成および管理できる最小のデプロイ可能ユニットです。ポッドには、共有ボリュームとネットワークリソースを持つコンテナのグループが含まれ、アプリケーションを実行する方法に関する指示が含まれています。

ポッドは一時的で使い捨てであるため、短命であり、したがって長期間にわたって持続することはありません。そのため、ポッドを展開する最良の方法は、YAMLファイルを使用した宣言的構成を利用することです。

これは再利用可能で、より再現性が高く便利です。さらに、YAMLファイルに定義されたリソースが常にKubernetesによって監視され、指定された通りに実行されることが保証されます。

ポッドのリスト/削除

クラスタ内の実行中のポッドのリストを取得するには、次のコマンドを実行します:

$ kubectl get pods

ラベルと一緒にポッドを表示するには、次のコマンドを実行します:

$ kubectl get pods --show-labels

すべての名前空間のポッドを一覧表示するには、次のコマンドを実行します:

$ kubectl get pods --all-namespaces

現在の名前空間でポッドをリストし、より詳細を表示するためには、-o wide パラメータを追加します。

$ kubectl get pods -o wide

特定のポッドの詳細な状態を表示するには、次のコマンドを実行します:

$ kubectl describe pod <pod-name>

ポッドにラベルを追加するには、次のコマンドを実行します:

$ kubectl label pods my-pod new-label=awesome

ラベルを削除するには、次のように実行します。

$ kubectl label pods my-pod new-label-

コンテナポッドでインタラクティブシェルを取得するには、次のコマンドを実行します:

$ kubectl exec -it <pod_name> /bin/sh

特定のポッドを削除するには、以下のコマンドを実行してください:

$ kubectl delete pod <pod name>

クラスター内のレプリカセット

レプリカセット (RS) は、常に特定の数のポッドが実行されている状態を維持します。これは、YAML マニフェストファイルで定義された特定の数のポッドの可用性を保証します。

クラスター内のReplicaSetsの数を取得するには、次のコマンドを実行してください:

$ kubectl get replicasets

特定のレプリカセットに関する詳細情報を取得するには、次のコマンドを実行します:

$ kubectl describe replicasets <replicasetname>

ポッド内のサービス

サービスはポッド上のネットワーク抽象化です。サービスはポッド間の発見とルーティングを提供します。例えば、サービスはアプリケーションのフロントエンドをバックエンドに接続できます。それぞれは別々のデプロイメントで実行されます。

実行中のサービスをリストするには:

$ kubectl get services

サービスの詳細を得るには、次のコマンドを実行してください:

$ kubectl describe services

ポッド内のサービスアカウント

サービスアカウントは、クラスター内のポッドがKubernetes APIサーバーにアクセスするために使用するオブジェクトです。

サービスアカウントを一覧表示するには、次のコマンドを実行してください:

$ kubectl get serviceaccounts

サービスアカウントに関する詳細情報を取得するには、次のコマンドを実行します:

$ kubectl describe serviceaccounts

サービスアカウントを削除するには、次の構文を使用します。

$ kubectl delete serviceaccounts <serviceaccount>

ネームスペース

ネームスペースは、単一のクラスターをさらに複数のサブクラスターに分割できる手段を提供するユニットであり、それらは個別に管理できます。

名前空間を一覧表示するには、次のコマンドを実行します:

$ kubectl get namespaces

名前空間の詳細情報を表示するには、次の構文を使用します:

$ kubectl describe namespace <namespace_name>

名前空間を作成するには、次のコマンドを実行します:

$ kubectl create namespace <namespace_name>

名前空間を編集または変更するには、次のコマンドを実行してください:

$ kubectl edit namespace <namespace_name>

名前空間のリソース使用状況を表示するには、次のコマンドを実行してください:

$ kubectl top namespace <namespace_name>

名前空間を削除するには、次のコマンドを実行します:

$ kubectl delete namespace <namespace_name>

Kubernetesシークレット

Kubernetes では、secrets はユーザー名やパスワードなどの機密で重要な情報を保持するオブジェクトです。

既存の秘密を一覧表示するには、次のコマンドを実行します:

$ kubectl get secret

既存のシークレットに関する詳細情報をリストするには、次のコマンドを実行します:

$ kubectl describe secrets

秘密を作成するには、実行してください

$ kubectl create secret [flags] [options]

秘密を削除するには、次のコマンドを実行してください:

$ kubectl delete secret <secret_name>

Kubernetes デプロイメント

デプロイメントは、アプリケーションの望ましい状態を宣言することを可能にするオブジェクトです。レプリカの数、ポッドのイメージ、ポッドの数、その他のリソースを定義できます。

デプロイの数を取得するには、次のコマンドを実行してください:

$ kubectl get deployment

特定の展開の詳細な状況を列挙してください。

$ kubectl describe deployment <deployment-name>

デプロイメントを削除するには、次のコマンドを実行してください:

$ kubectl delete deployment <deployment-name>

新しいデプロイメントを作成するには、次のコマンドを実行してください:

$ kubectl create deployment <deployment-name>

Kubernetes イベント

Kubernetesにおいて、イベントはポッド、コンテナ、ノードなどのリソースの状態の変更に応じて生成されるオブジェクトです。良い例は、ポッドの状態が保留から実行中に、または成功から失敗に変わることです。

すべてのイベントを一覧表示するには、次のコマンドを実行してください:

$ kubectl get events

イベントをリストするが、ポッドイベントを除外するには、次のコマンドを実行します:

$ kubectl get events --field-selector involvedObject.kind!=Pod

イベントを作成時刻に従って並べ、タイムスタンプと一緒にリストするには、次のように実行します:

$ kubectl get events --sort-by=.metadata.creationTimestamp

Kubernetesログ

ログは、クラスターイベントを記録し、障害のデバッグやトラブルシューティングに役立つ重要な役割を果たします。次のコマンドを使用して、ログの詳細度を見るか設定することができます:

特定のポッドのログを印刷するには:

$ kubectl logs <pod_name>

特定のポッドのリアルタイムログを印刷し、追跡するには、次のコマンドを実行します:

$ kubectl logs -f <pod_name>

特定のポッドのログを過去X時間、例えば3時間分印刷するには、次のコマンドを実行します:

$ kubectl logs --since=3h <pod_name>

ポッド内の特定のコンテナのログを出力するには、次のコマンドを実行します

$ kubectl logs -c <container_name> <pod_name>

最近の20行のログを生成します。

$ kubectl logs --tail=20 <pod_name>

ポッドのログを生成し、そのログをpod.logというログファイルに保存してください。

$ kubectl logs <pod_name> pod.log
結論

それは、Kubernetes クラスターを管理するための一般的に使用されるいくつかの kubectl コマンドの概要でした。

関連記事: