Kubernetesの8つのヒントとコツ

自宅オフィスで仕事をする男性プログラマー

この記事では、Kubernetes の操作を容易にするためのヒントとコツをいくつか紹介します。

以下に示すヒントのほとんどは、Kubernetes クラスターに対してコマンドを実行できる強力なコマンドライン ツールである kubectl を使用しています。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

Kubernetesのバックグラウンド

1. デフォルトの名前空間の設定

名前空間(Dev1、Dev2、QA1、QA2など)を使用することで、Kubernetesクラスターを複数の環境に分割し、各環境を異なるユーザーが管理できます。kubectlコマンドを記述するたびに不便さの1つは、コマンドを記述するたびに末尾に--namespace オプションが必要なことです。多くの人はこれを忘れて、間違った名前空間にオブジェクト (Pod、サービス、デプロイメント) を作成してしまうことがあります。

この方法を使用すると、kubectl コマンドを実行する前に名前空間の設定を行うことができます。kubectlコマンドを実行する前に次のコマンドを実行すると、現在のコンテキストの後続のすべてのkubectlコマンドの名前空間が保存されます。

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

以下に、名前空間を使用した最も一般的で便利なコマンドをいくつか示します。

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (すべての名前空間からのステータスを持つすべての Pod を一覧表示します。)
  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (このコマンドは各名前空間内のPodを識別します)
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (このコマンドを使用すると、現在のコンテキストに合わせて名前空間を正しく設定できます。)
IBM Cloud

Red Hat OpenShift AI on IBM Cloud:AIワークロードの導入

Red Hat OpenShift on IBM CloudでAI機能を活用できます。このビデオでは、スケーラブルな機械学習運用プラットフォームを使用して、AIワークロードを効率的に構築、導入、管理する方法について説明します。

2. 時間を節約する便利なエイリアス

Kubernetes コマンドは非常に長くなる可能性があるため、kubectl を実行するためのエイリアスをいくつか設定すると便利です。コマンド全体を何度も記述する必要がなくなり、1つのセッションで複数のKubernetesコマンドを実行したい場合に作業がはるかに簡単になります。

以下に、よく使用されるコマンドのエイリアスをいくつか示します。kubectlコマンドを実行する前にこれらを実行することで、時間を節約できます。例:kubectl:を入力する代わりに、 K を入力するだけで済みます。

  • alias k='kubectl'
  • alias kc='k config view --minify | grep name'
  • alias kdp='kubectl describe pod'
  • alias krh='kubectl run --help | more'
  • alias ugh='kubectl get --help | more'
  • alias c='clear'
  • alias kd='kubectl describe pod'
  • alias ke='kubectl explain'
  • alias kf='kubectl create -f'
  • alias kg='kubectl get pods --show-labels'
  • alias kr='kubectl replace -f'
  • alias kh='kubectl --help | more'
  • alias krh='kubectl run --help | more'
  • alias ks='kubectl get namespaces'
  • alias l='ls -lrt'
  • alias ll='vi ls -rt | tail -1'
  • alias kga='k get pod --all-namespaces'
  • alias kgaa='kubectl get all --show-labels'

 

3。vi を使用した YAML 編集

YAML ファイルを記述するために使用できるさまざまなエディターが多数ありますが、ターミナルで作業しているときに、生成された YAML をすばやく調整する必要がある場合がよくあります。これは、もともと Unix オペレーティング システム用に作成されたテキスト エディターである、信頼できる vi を使用するのに最適な場所です。

Viエディターは十分に文書化されており、活気あるオープンソース・コミュニティーからサポートを受けています。しかし、YAMLファイルを作成する際のviエディターの問題の1つはスペースの問題です。これには、タブでインデントし、スペースで揃える方法が必要です。空白文字としてタブとスペースを使用すると、YAML ファイルの記述時に常に構文の問題が発生していました (キャリッジ リターンを押すと 2 つのスペースを含む YAML がデフォルトとして取得されるなど)。

解決策としては、これらの行で~/.vimrc ファイルを作成してからvi エディタで YAML ファイルを作成することで、編集が容易になります。

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4. kubectlコマンドからYAMLを作成する

kubectl コマンドを使用して、コマンドラインから複雑な YAML ファイルを作成できます。

ほとんどの人は、YAML ファイルの操作は楽しくなく、Kubernetes YAML ファイルは非常に冗長で、ゼロから作成するのが難しいことに同意するでしょう。エディターを使用して空白ページから YAML ファイルを作成するよりも、kubectl コマンドから YAML ファイルを作成する方がはるかに簡単です。

次のコマンドは、yamlfile という名前のYAMLファイルを作成します。これらの kubectl コマンドから YAML ファイルを作成したら、要件に応じて変更し、最初から作成する代わりにそれを使用できます。

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --
    restart=Never > yamlfile.yaml
    
    kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date>yamlfile.yaml
    
  • kubectl get -o yaml deploy/nginx > 1.yaml (nginxという名前の
    デプロイメントがあることを確認してください)
    
  • kubectl run busybox --image=busybox --dry-run=client -o yaml 
    --restart=Never -- /bin/sh -c "while true; do echo hello; echo 
    hello again;done" > yamlfile.yaml
    
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 -
    -restart=Never -o yaml
    
  • kubectl run test --image=busybox --restart=Never --dry -
    run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > 
    yamlfile.yaml(「--bin」が最後に来ていることに注目。これで yaml ファイルが作成されます。)
    

(注意すべき点は、--bin が末尾に来ることです。これで yaml ファイルが作成されます。)

YAMLファイルを作成するもう1つの良いアイデアは、wget コマンドを使用して、インターネットから直接取得することです。

5. Kubernetesの名前空間の間での切り替え

ヒント 1 では、Kubernetes 名前空間を使用して保存し、すべてのコマンドに追加する必要がないようにするための便利なコマンドをいくつか学習しました。さらに、名前空間と kubectl コンテキスト間の切り替えを容易にしましょう。

役立つツールはいくつかありますが、コンテキストと名前空間の管理にはそれぞれ kubectx と kubens が適しています。kubectxとkubensの詳細については、こちらをご覧ください。

kubectx および kubens ユーティリティーのLinuxバイナリをダウンロードする方法は次のとおりです。

  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • wget https://github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz
    

次に、以下のコマンドでそれらを抽出します。

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
    
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz
    

最後に、それらを PATH に移動します。

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

インストールが完了したら、kubens を使用して名前空間を一覧表示し、名前空間を切り替えることができます。

インストールが完了したら、kubens を使用して名前空間を一覧表示し、名前空間を切り替えることができます。

複数のクラスターで作業する場合、kubectxを使用するとコンテキストを簡単に切り替えることができます。

複数のクラスターで作業する場合、kubectxを使用するとコンテキスト間の切り替えが簡単になります

6. シェル自動補完

kubectlがBashとZSHに自動補完を提供していることをご存知ですか。これはオプションの構成です。

Kubernetesの概念を理解していて、kubectlを使った経験はあるものの、コマンドを覚えるのはあまり得意ではない場合は、まず、bash-completionをインストールし、それからkubectl 自動補完を有効にします。詳細については、ご使用の環境の「kubectl のインストールとセットアップのドキュメンテーション ページをご覧ください。

以下は、自動補完の主要な機能の設定オプションです。

以下は、自動補完の主要な機能の設定オプションです。

タブはもう不要です。

7. リソース使用率の表示

top コマンドは、おそらく、プロセスとシステムリソースを監視するための最も一般的なツールの 1 つです。これは、シンプルな文字ベースのインターフェースを提供し、重要な情報に素早くアクセスできます。

ノードごとのリソースの使用率を確認できます。

ノードごとのリソースの使用率を確認できます。

Podあたりのリソース使用率:

Podあたりのリソース使用率:

また、便利な watch コマンドを使用すると、コマンドを何度も実行しなくても、必要な間隔でコマンドを表示できます。次の例では、5 秒ごとに実行されます (デフォルトは 2 秒)。

watch kubectl top node -n 5

:watchコマンドは、お使いの環境に合わせてダウンロードする必要があります。

top コマンドが動作するには、Kubernetes クラスターでも heapster を実行している必要があります。そうしないと、「サーバーからのエラー (NotFound): サーバーは要求されたリソースを見つけることができませんでした (get services http: heapster:)」というエラーが表示されます。

8. kubectlを拡張し、生の出力を使用して独自のコマンドを作成する

kubectlコマンドは、apiserverに保管されているリソースの概要を表示します。apiserverによって保管されている、ここには表示されていないフィールドが多数あります。kubectl getコマンドと生のリソースの出力を使用して、独自の視覚化とコマンドを作成することができます。

次のコマンドを使用して、JSON内の生のリソースを印刷できます。

kubectl get deployments -o json

また、API呼び出しを使用してリソースを直接呼び出すこともできます。

kubectl get --raw=/apis/apps/v1/deployments

さらに、jqのようなツールと出力を組み合わせて、さまざまな視覚化を提供したり、出力をフィルタリングしたり、出力を他のツールに提供してオートメーションを進めたりすることもできます。

たとえば、複数の名前空間とデプロイメントが存在するクラスターの問題を見つけるのは困難な場合がありますが、以下の例では、生のAPIを使用してクラスター内のすべてのデプロイメントをスキャンし、失敗したレプリカを含むデプロイメントのみをフィルタリングしています。

 

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] 
| {name: .metadata.name, replicas: .status.replicas, available:
 (.status.availableReplicas // 0), unavailable:
 (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

上記のコマンドの簡単な説明を以下に示します。

  • まず、Kubernetes APIを呼び出してすべてのデプロイメントを返します。デフォルトの出力はJSONであり、JSONドキュメントの構造を視覚化するのは困難ですが、以下の例のように、jqにパイプして、より明確なアイデアを得ることができます。

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • 応答ドキュメントには、デプロイメントごとに項目の配列が含まれていることに注意してください。最後に、この配列のステータスフィールドを最後まで検査したいと思います。以下のコマンドは、必要なデータのみを印刷し、フィールドが利用できない場合にデフォルト値 0 を出力する方法を示しています。

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] |
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)}'
    
  • パズルの最後のピースは、選択関数を使用して、利用できないレプリカがあるデプロイメントのみを表示することです。

     

    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | 
    {name: .metadata.name, replicas: .status.replicas, available:
     (.status.availableReplicas // 0), unavailable: 
    (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'
    

概要

Kubernetesを扱う上で、これらのヒントやコツが役立つことを願っています。お気に入りのヒントや共有したいヒントなどがありましたら、ぜひお知らせください。

IBM Cloud Kubernetes Serviceもぜひチェックし、これらのヒントやコツを活用してください。

Kubernetes を無料で実際に体験してみませんか。IBM CloudLabを活用しましょう。これは、認定付きのKubernetesチュートリアルを提供する新しいインタラクティブプラットフォームで、費用や設定は不要です。

著者

Ravi Saraswathi

IBM Chief Architect

IBM Blog

Marcelo Borges

Lead Cloud Solution Architect

関連ソリューション
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloudは、フルマネージド型のOpenShift Container Platform(OCP)です。

Red Hat OpenShiftの詳細はこちら
コンテナ・ソリューション

コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントを活用して、コンテナ化されたワークロードを実行およびスケールアップします。

コンテナの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

フルマネージドのRed Hat OpenShiftプラットフォームをぜひお試しいただくか、または、IBM Cloud Kubernetesエコシステムの柔軟性をご覧ください。ニーズに合わせたスケーラブルで安全なソリューションにより、開発とデプロイメントのプロセスを加速できます。

Red Hat OpenShiftの詳細はこちら Kubernetesはこちら