IBM Cloud Blog

8つのKubernetesヒントとコツ

記事をシェアする:

この投稿は、2020年6月29日に、米国 IBM Cloud Blog に掲載されたブログ(英語)の抄訳です。

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

 

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

 

Kubernetesの背景

これらのヒントに進む前に、Kubernetesに関する予備知識が必要な場合は、次のリソースをご覧ください。

 

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

名前空間(Dev1、Dev2、QA1、QA2など)を使用して、Kubernetesクラスターを複数の環境に分割でき、各環境を異なるユーザーが管理できます。kubectlコマンドを記述する際の不都合の1つは、コマンドを記述するたびに、最後に–namespaceオプションが必要になることです 。人々はしばしばこれを忘れて、誤った名前空間でオブジェクト(ポッド、サービス、デプロイメント)を作成することになります。

このコツを使用すると、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 (すべての名前空間のステータスを持つすべてのポッドを一覧表示します)。
  • kubectl get po -o wide -n -n -n (このコマンドは、各名前空間のポッドを識別します)
  • kubectl describe namespace
  • kubectl config view –minify | grep namespace (このコマンドにより、現在のコンテキストに名前空間が正しく設定されます。)

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がデフォルトとして取得されます)。

解決策は ? vi エディターを使用して YAML ファイルを作成し、編集する前に、以下の行を持つ ~/.vimrc ファイルを作成します。

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

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

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

ほとんどの人は、YAMLファイルでの作業は面白くないことに同意します。KubernetesYAMLファイルは非常に冗長で、最初から作成するのが難しい場合があります。エディターを使用して空白ページからではなく、kubectlコマンドからYAMLファイルを作成する方がはるかに簡単です。

次のコマンドは、という名前のYAMLファイルを作成します yamlfile。これらの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 (Ensure that you have a deployment named as 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 ファイルを作成します)

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を使用して名前空間をリストし、それらを切り替えることができます。

複数のクラスターを操作する場合、kubectxはコンテキスト間の切り替えを簡単にします。

6.シェルのオートコンプリート

kubectlがBASHとZSHのオートコンプリートを提供することをご存知ですか?これはオプションの構成です。

Kubernetesの概念を理解していて、kubectlの経験があるとしますが、コマンドを覚えるのはあまり得意ではないとします。まずbash-completionをインストールしてから、kubectl autocompletionを有効にします。すべての詳細は、ご使用の環境の「kubectlのインストールとセットアップ(IBM外のWebサイトへ)」ドキュメントページにあります。

以下は、オートコンプリート機能の構成オプションです。

さあ、タブを離してください!

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

topコマンドは、プロセスとシステムリソースを監視する最も一般的なツールの1つです。シンプルな文字ベースのインターフェースと重要な情報への迅速なアクセスを提供します。

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

ポッドあたりのリソース使用率:

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

watch kubectl top node -n 5

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

最上位のコマンドが機能するためには、Kubernetesクラスターもheapsterを実行している必要があります。そうしないと、次のエラーが発生します。「Error from server (NotFound): the server could not find the requested resource (get services http:heapster:) 」

heapsterアドオンを有効にする方法を学びます。(IBM外のWebサイトへ)

8. kubectlを拡張し、raw outputを使用して独自のコマンドを作成します

kubectlコマンドは、apiserverによって保存されたリソースの要約ビューを提供します。apiserverによって格納されている表示されていないフィールドがさらに多くあります。rawリソース出力を指定した kubectl get コマンドを使用して、独自の視覚化およびコマンドを作成することができます。

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

kubectl get deployments -o json

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

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

出力をjqなどのツールと組み合わせて、さまざまな視覚化を提供したり、出力をフィルター処理したり、高度な自動化のために出力を他のツールにフィードしたりすることもできます。

たとえば、複数の名前空間とデプロイメントがあるクラスタで問題を見つけるのは難しい場合がありますが、以下の例では、raw 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 Blog Japan 編集部

 

More IBM Cloud Blog stories

700社が効果を実感!コンテンツマネジメントシステム(CMS)を用いたWebサイト運用における課題への最適なアプローチ

IBM Cloud Blog, IBM Partner Ecosystem, デジタル変革(DX)

近年、PC、スマートフォン、タブレット、スマートウォッチなど、デバイスの多様化により、それぞれのデバイスに適した形で情報を配信することや、ユーザー毎に最適な情報を出し分けた配信というものが求められ、Webサイトの管理や更 ...続きを読む


IBM Cloud for VMware Solutionsの名称とライセンスに関する変更について

IBM Cloud Blog, IBM Cloud アップデート情報

変更の概要 Broadcom社から、VMware製品のCloud Service Provider向けのパートナーシップとライセンスに関する変更が発表されました。(詳細は下記等、Broadcom社の発表内容をご参照くださ ...続きを読む


IBM Cloud『医療機関向けクラウドサービス対応セキュリティリファレンス (2024年度)』公開のお知らせ

IBM Cloud Blog, IBM Cloud News

このたびIBM Cloudでは総務省ならびに経済産業省が提唱する医療業界におけるクラウドサービスの利活用に関するガイドラインに対応していることを確認し、整理したリファレンス『医療機関向けクラウドサービス対応セキュリティリ ...続きを読む