IBM Cloud Blog
8つのKubernetesヒントとコツ
2020年07月06日
カテゴリー IBM Cloud Blog | IBM Cloud チュートリアル
記事をシェアする:
この投稿は、2020年6月29日に、米国 IBM Cloud Blog に掲載されたブログ(英語)の抄訳です。
この記事では、Kubernetesを使いやすくするためのヒントとコツをいくつか紹介します。
以下に示すヒントのほとんどは、Kubernetesクラスタに対してコマンドを実行できる強力なコマンドラインツールであるkubectlを使用しています。
Kubernetesの背景
これらのヒントに進む前に、Kubernetesに関する予備知識が必要な場合は、次のリソースをご覧ください。
- Kubernetesとは何ですか?(英語)
- ビデオ–コンテナオーケストレーションの説明(英語)
- Kubernetesクラスタ:迅速で制御されたクラウドアプリ配信のためのアーキテクチャ(英語)
- Kubernetes Ingressとは何ですか?(英語)
- Kubernetesチュートリアル:迅速なビルドを実現する5つの方法(英語)
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 編集部
セキュリティー・ロードマップ
IBM Cloud Blog
統合脅威管理、耐量子暗号化、半導体イノベーションにより、分散されているマルチクラウド環境が保護されます。 2023 安全な基盤モデルを活用した統合脅威管理により、価値の高い資産を保護 2023年には、統合された脅威管理と ...続きを読む
量子ロードマップ
IBM Cloud Blog
コンピューティングの未来はクォンタム・セントリックです。 2023 量子コンピューティングの並列化を導入 2023年は、Qiskit Runtimeに並列化を導入し、量子ワークフローの速度が向上する年になります。 お客様 ...続きを読む
ハイブリッドクラウド・ロードマップ
IBM Cloud Blog
コンポーザブルなアプリケーション、サービス、インフラストラクチャーにより、企業は複数のクラウドにまたがるダイナミックで信頼性の高い仮想コンピューティング環境の作成が可能になり、開発と運用をシンプルに行えるようになります。 ...続きを読む