たねやつの木

Photographs, Keyboards and Programming

【Kubernetesを学ぶ:3日目】kubectlコマンドでKubernetesクラスタを操作する

こんにちは、たねやつです。

前回、Minikubeを使ってローカルにKubernetesクラスタを構築しました。しかし、今のままではクラスタはただ動いているだけの箱にすぎません。 今回は、この箱の中身を覗いたり、情報を取得したりするための必須ツール、kubectl(キューブコントロール)の基本的な使い方を学びます。

前の記事

www.taneyats.com

この記事でできること

  • kubectlコマンドの基本的な構文を理解できる。
  • クラスタやノードの状態を確認できるようになる。
  • Kubernetes上で実行されているリソース(Podなど)の一覧表示や詳細確認ができるようになる。

kubectlとは?

kubectlは、Kubernetesクラスタと対話するためのコマンドラインインターフェース(CLI)です。 開発者や使用者は、このkubectlを通じてコントロールプレーンのAPIサーバーにリクエストを送り、アプリケーションのデプロイやクラスタのリソース管理など、あらゆる操作を行います。

基本的なコマンドの構文は以下のようになっています。 kubectl [コマンド] [リソースタイプ] [リソース名] [オプション]

  • コマンド: get, describe, deleteなど、リソースに対して何を行いたいかを示す動詞。
  • リソースタイプ: nodes, pods, servicesなど、操作対象のリソースの種類。
  • リソース名: 特定のリソースを指定する場合の名前。省略すると、指定したタイプの全リソースが対象になります。

クラスタの状態を確認するコマンド

まずは、クラスタ全体の情報を取得するコマンドを見ていきましょう。

コマンド 説明
kubectl cluster-info コントロールプレーンと各種サービスのURLなど、クラスタの基本情報を表示します。
kubectl get nodes クラスタを構成する全ワーカーノードのリストと、それぞれのステータス(Readyかどうか)を表示します。
kubectl get componentstatuses (or cs) コントロールプレーンの主要コンポーネント(scheduler, etcdなど)が正常に動作しているかを確認します。

リソースを操作する基本コマンド

次に、クラスタ上で動いているアプリケーションの実体である「リソース」を操作するための、最もよく使うコマンドを学びます。

一覧表示 (get)

指定したリソースの一覧を表示します。最も使用頻度の高いコマンドです。

# すべてのPodをデフォルトの名前空間で表示
kubectl get pods

# すべてのServiceを表示
kubectl get services

# すべての名前空間の、すべてのリソースを表示 (-A は --all-namespaces の略)
kubectl get all -A

-o wideオプションを付けると、IPアドレスや稼働ノードなど、より詳細な情報が表示されます。 kubectl get pods -o wide

詳細表示 (describe)

リソースのさらに詳細な情報(設定、現在の状態、関連するイベントなど)を表示します。問題のトラブルシューティングで非常に役立ちます。

# "my-pod"という名前のPodの詳細情報を表示
kubectl describe pod my-pod

# "my-node"という名前のNodeの詳細情報を表示
kubectl describe node my-node

describeを実行すると、一番下にEventsというセクションが表示されます。Podの起動に失敗した場合など、何が起きたのかを知るための重要な手がかりがここに記録されています。

ログ表示 (logs)

コンテナの標準出力を表示します。Dockerのdocker logsと非常によく似ています。

# "my-pod"という名前のPodのログを表示
kubectl logs my-pod

# -f オプションでログをリアルタイムに追跡
kubectl logs -f my-pod

名前空間 (Namespace)

kubectl get all -Aを実行した際に、NAMESPACEという列があったことにお気付きでしょうか? Kubernetesでは、単一のクラスタを複数の仮想的なクラスタに分割して利用できます。この仮想的なグループを名前空間 (Namespace) と呼びます。

  • default: 特に指定しない場合に使われる、デフォルトの名前空間。
  • kube-system: Kubernetes自身のシステムコンポーネントが動いている名前空間。私たちが直接操作することはあまりありません。
  • kube-public: 全ユーザーから参照可能なリソースを配置するための名前空間。

リソースを作成する際に名前空間を指定しないと、すべてdefault名前空間に作成されます。 特定の名前空間のリソースを操作したい場合は、-n (または --namespace) オプションを使います。 kubectl get pods -n kube-system

最後に

今回は、kubectlを使ってクラスタの状態を確認するための基本的なコマンドを学びました。 特にgetdescribeは、これから毎日のように使うことになる重要なコマンドです。まずはこの2つを使いこなし、クラスタの中で何が起きているのかを自由に把握できるようになることを目指しましょう。

次回は、いよいよアプリケーションをKubernetesにデプロイするための設計図、「マニフェストファイル」の書き方を学びます。

次の記事

www.taneyats.com