以下に示すヒントのほとんどは、Kubernetes クラスターに対してコマンドを実行できる強力なコマンドライン ツールである kubectl を使用しています。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
これらのヒントに入る前に、Kubernetes についての基礎知識が必要な場合は、次のリソースを参照してください。
名前空間(Dev1、Dev2、QA1、QA2など)を使用することで、Kubernetesクラスターを複数の環境に分割し、各環境を異なるユーザーが管理できます。kubectlコマンドを記述するたびに不便さの1つは、コマンドを記述するたびに末尾に--namespace
オプションが必要なことです。多くの人はこれを忘れて、間違った名前空間にオブジェクト (Pod、サービス、デプロイメント) を作成してしまうことがあります。
この方法を使用すると、kubectl コマンドを実行する前に名前空間の設定を行うことができます。kubectlコマンドを実行する前に次のコマンドを実行すると、現在のコンテキストの後続のすべてのkubectlコマンドの名前空間が保存されます。
kubectl config set-context $(kubectl config current-context) --namespace=mynamespace
以下に、名前空間を使用した最も一般的で便利なコマンドをいくつか示します。
Kubernetes コマンドは非常に長くなる可能性があるため、kubectl を実行するためのエイリアスをいくつか設定すると便利です。コマンド全体を何度も記述する必要がなくなり、1つのセッションで複数のKubernetesコマンドを実行したい場合に作業がはるかに簡単になります。
以下に、よく使用されるコマンドのエイリアスをいくつか示します。kubectlコマンドを実行する前にこれらを実行することで、時間を節約できます。例:kubectl:を入力する代わりに、 K を入力するだけで済みます。
YAML ファイルを記述するために使用できるさまざまなエディターが多数ありますが、ターミナルで作業しているときに、生成された YAML をすばやく調整する必要がある場合がよくあります。これは、もともと Unix オペレーティング システム用に作成されたテキスト エディターである、信頼できる vi を使用するのに最適な場所です。
Viエディターは十分に文書化されており、活気あるオープンソース・コミュニティーからサポートを受けています。しかし、YAMLファイルを作成する際のviエディターの問題の1つはスペースの問題です。これには、タブでインデントし、スペースで揃える方法が必要です。空白文字としてタブとスペースを使用すると、YAML ファイルの記述時に常に構文の問題が発生していました (キャリッジ リターンを押すと 2 つのスペースを含む YAML がデフォルトとして取得されるなど)。
解決策としては、これらの行で~/.vimrc ファイルを作成してからvi エディタで 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 コマンドを使用して、インターネットから直接取得することです。
ヒント 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 に移動します。
インストールが完了したら、kubens を使用して名前空間を一覧表示し、名前空間を切り替えることができます。
複数のクラスターで作業する場合、kubectxを使用するとコンテキストを簡単に切り替えることができます。
kubectlがBashとZSHに自動補完を提供していることをご存知ですか。これはオプションの構成です。
Kubernetesの概念を理解していて、kubectlを使った経験はあるものの、コマンドを覚えるのはあまり得意ではない場合は、まず、bash-completionをインストールし、それからkubectl 自動補完を有効にします。詳細については、ご使用の環境の「kubectl のインストールとセットアップ」のドキュメンテーション ページをご覧ください。
以下は、自動補完の主要な機能の設定オプションです。
タブはもう不要です。
top コマンドは、おそらく、プロセスとシステムリソースを監視するための最も一般的なツールの 1 つです。これは、シンプルな文字ベースのインターフェースを提供し、重要な情報に素早くアクセスできます。
ノードごとのリソースの使用率を確認できます。
Podあたりのリソース使用率:
また、便利な watch コマンドを使用すると、コマンドを何度も実行しなくても、必要な間隔でコマンドを表示できます。次の例では、5 秒ごとに実行されます (デフォルトは 2 秒)。
watch kubectl top node -n 5
注:watchコマンドは、お使いの環境に合わせてダウンロードする必要があります。
top コマンドが動作するには、Kubernetes クラスターでも heapster を実行している必要があります。そうしないと、「サーバーからのエラー (NotFound): サーバーは要求されたリソースを見つけることができませんでした (get services http: heapster:)」というエラーが表示されます。
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)'
上記のコマンドの簡単な説明を以下に示します。
kubectl get --raw=/apis/apps/v1/deployments | jq .
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チュートリアルを提供する新しいインタラクティブプラットフォームで、費用や設定は不要です。
Red Hat OpenShift on IBM Cloudは、フルマネージド型のOpenShift Container Platform(OCP)です。
コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントを活用して、コンテナ化されたワークロードを実行およびスケールアップします。
IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。