💻

基本的な kubectl コマンド

2023/12/31に公開

はじめに

kubernetes へリソースの確認やデプロイなどを行う時の基本的な概念と、コマンドをまとめました。
普段、AWS EKS を使った kubernetes で構築されたアプリケーションの開発・運用を行なっており、そこでよく使うコマンドや、基本的な考え方をご紹介します。

この記事でわかること

  • 基本的な kubectl コマンドの使い方分かる
  • よく使うコマンドを紹介

前提

  • サーバーに kubernetes 環境が構築されている
  • kubectl コマンドを使用するためのクラスター接続が済んでいる

kubectl コマンド

kubectl コマンドとは、kubernetes クラスターと通信するためのコマンドラインツールです。
アプリケーションのデプロイや、削除、そのほか様々な kubernetes の操作が可能になります。
使用するためには、ローカルにインストールして使用します。
導入の詳細は公式ドキュメントやインストールの方法を紹介している記事などを参考してください。

https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

基本的な概念

kubectl コマンドの具体的な使用例としては、リソースの取得、kubernetes 上へのデプロイ、ログの確認などがよく使われます。
以下の構成でコマンドを実行すると、任意の操作を行うことができます。

kubectl [command] [TYPE] [NAME] [flags]
  • command
    • リソースに対して実行するオペレーション
    • get, describe, apply, delete など
  • TYPE
    • リソースを指定
    • command が どんな 操作を指定するとして、TYPE は 何を にあたるか、と考えると理解しやすいです
    • pod, deployment, secret, node など
  • NAME
    • リソース名を指定(省略可, その場合全て取得される)
  • flags
    • オプション的に使うフラグを指定
    • -n: namespace, -l: リソースのラベル指定など

よく使うコマンド

現場によって様々あると思いますが、私がよく使う実際のコマンドをざっくりまとめます。
やりたいコマンドを組み立てる参考にしていただけると嬉しいです。

リソース取得系

クラスタ内の全ての Pod を取得

kubectl get pod -A

ネームスペースを絞って Cronjob を取得

kubectl get cronjob -n [namespace]

deployment リソースを yaml 形式で取得

kubectl get deployment -n [namespace] [name] -o yaml

Pod の詳細を取得

kubectl describe pod -n [namespace] [name]

grep コマンドを組み合わせて欲しい情報だけを取得

kubectl describe deamonset kube-proxy -n kube-system | grep Image

ワーカーノードがゾーンごとに分かれているか (カスタムカラムを作成して出力)

kubectl get nodes \
-o=custom-columns=NAME:.metadata.name,ZONE:metadata.labels."topology\.kubernetes\.io/zone" \
--sort-by metadata.labels."topology\.kubernetes\.io/zone"

デプロイ系

マニフェストファイルをクラスタにデプロイ

kubectl apply -f deployment.yaml

kustomize を使用したデプロイ

kustomize build ./overlays/staging/ | kubectl apply -f -

リソースの編集

kubectl edit deployment -n [namespace] [name]

namespace の作成

kubectl create namespace [namespace]

node のスケジュール停止

kubectl cordon [node name]

リソースの削除 (Pod 再起動)

kubectl delete pod -n [namespace] [name]

監視系

ポートフォワード

kubectl port-forward svc/[service name] -n [namespace] 3000:80

ログの出力

kubectl logs -f -n [namespace] [pod name]

補足・参考

オペレーション一覧

https://kubernetes.io/ja/docs/reference/kubectl/#操作

まとめ

私がプロジェクトでよく使うコマンドなどを殴り書きではありましたが、まとめてみました。(見にくくなってたらすみません)
毎回調べながら行なっているので、覚えなくても問題ないです。
こんなことができるんだ〜程度で頭の片隅に置いていただけると幸いです。

私もまだ知らないことも多いので、これからも kubernetes とうまく付き合っていきたいと思います。

Discussion