Kubernetes チートシート
ハンズオンラボと実世界のシナリオを通じて、Kubernetes コンテナオーケストレーションを学びましょう。LabEx は、必須の kubectl コマンド、Pod 管理、デプロイメント、サービス、ネットワーキング、クラスター管理を網羅した包括的な Kubernetes コースを提供します。コンテナオーケストレーションとクラウドネイティブアプリケーションのデプロイを習得します。
インストールとセットアップ
kubectl のインストール
Kubernetes コマンドラインツールをインストールします。
# macOS (Homebrew使用)
brew install kubectl
# Linux (公式バイナリ)
curl -LO "https://dl.k8s.io/release/$(curl -L -s
https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kube
ctl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# Windows (Chocolatey使用)
choco install kubernetes-cli
インストールの確認
kubectl のバージョンとクラスター接続を確認します。
# kubectlのバージョンを確認
kubectl version --client
# クライアントとサーバーの両方のバージョンを確認
kubectl version
# クラスター情報を取得
kubectl cluster-info
kubectl の設定
クラスターアクセスとコンテキストを設定します。
# 現在の設定を表示
kubectl config view
# すべてのコンテキストを一覧表示
kubectl config get-contexts
# コンテキストを切り替え
kubectl config use-context my-cluster
# デフォルトネームスペースを設定
kubectl config set-context --current --namespace=my-
namespace
Minikube のセットアップ
開発用のローカル Kubernetes クラスターを素早く立ち上げます。
# Minikubeを開始
minikube start
# ステータスを確認
minikube status
# ダッシュボードにアクセス
minikube dashboard
# クラスターを停止
minikube stop
基本コマンドとクラスター情報
クラスター情報:kubectl cluster-info
重要なクラスターの詳細とサービスのエンドポイントを表示します。
# クラスター情報を取得
kubectl cluster-info
# クラスター設定を取得
kubectl config view
# 利用可能なAPIリソースを確認
kubectl api-resources
# サポートされているAPIバージョンを表示
kubectl api-versions
ノード管理:kubectl get nodes
クラスターノードを表示および管理します。
# すべてのノードを一覧表示
kubectl get nodes
# 詳細なノード情報
kubectl get nodes -o wide
# 特定のノードを記述
kubectl describe node
# ノードのリソース使用量を取得
kubectl top nodes
ネームスペース操作:kubectl get namespaces
ネームスペースを使用してクラスターリソースを整理および分離します。
# すべてのネームスペースを一覧表示
kubectl get namespaces
# ネームスペースを作成
kubectl create namespace my-
namespace
# ネームスペースを削除
kubectl delete namespace my-
namespace
# 特定のネームスペースのリソースを取得
kubectl get all -n my-namespace
ログインしてこのクイズに回答し、学習の進捗を追跡できます
Pod の管理
Pod の作成と実行:kubectl run / kubectl create
コンテナを起動し、そのライフサイクルを管理します。
# シンプルなPodを実行
kubectl run nginx --image=nginx
# YAMLファイルからPodを作成
kubectl create -f pod.yaml
# コマンド付きでPodを実行
kubectl run busybox --image=busybox -- echo "Hello
World"
# ジョブを作成
kubectl create job hello --image=busybox:1.28 -- echo
"Hello World"
Pod 情報の表示:kubectl get pods
実行中の Pod を一覧表示し、検査します。
# デフォルトネームスペース内のすべてのPodを一覧表示
kubectl get pods
# より詳細なPodを一覧表示
kubectl get pods -o wide
# すべてのネームスペースのPodを一覧表示
kubectl get pods --all-namespaces
# Podの状態変更を監視
kubectl get pods --watch
ログインしてこのクイズに回答し、学習の進捗を追跡できます
kubectl get pods --all-namespacesは何をしますか?Pod の詳細:kubectl describe pod
特定の Pod に関する包括的な情報を取得します。
# 特定のPodを記述
kubectl describe pod
# 特定のネームスペースのPodを記述
kubectl describe pod -n
Pod 操作:kubectl exec / kubectl delete
Pod 内でコマンドを実行し、Pod のライフサイクルを管理します。
# Podのログを取得
kubectl logs
# リアルタイムでログをフォロー
kubectl logs -f
# Pod内でコマンドを実行
kubectl exec -it -- /bin/bash
# 特定のコンテナ内でコマンドを実行
kubectl exec -it -c -- sh
# Podを削除
kubectl delete pod
# Podを強制削除
kubectl delete pod --grace-period=0 --force
デプロイメントと ReplicaSet
デプロイメントの作成:kubectl create deployment
宣言的にアプリケーションのデプロイと管理を行います。
# デプロイメントを作成
kubectl create deployment nginx --image=nginx
# レプリカ数を持つデプロイメントを作成
kubectl create deployment webapp --image=nginx --
replicas=3
# YAMLファイルから作成
kubectl apply -f deployment.yaml
# サービスとしてデプロイメントを公開
kubectl expose deployment nginx --port=80 --
type=LoadBalancer
ログインしてこのクイズに回答し、学習の進捗を追跡できます
デプロイメントの管理:kubectl get deployments
デプロイメントのステータスと設定を表示および制御します。
# デプロイメントを一覧表示
kubectl get deployments
# デプロイメントを記述
kubectl describe deployment
# デプロイメントを編集
kubectl edit deployment
# デプロイメントを削除
kubectl delete deployment
スケーリング:kubectl scale
実行中のレプリカ数を調整します。
# デプロイメントをスケーリング
kubectl scale deployment nginx --replicas=5
# ReplicaSetをスケーリング
kubectl scale rs --replicas=3
# デプロイメントを自動スケーリング
kubectl autoscale deployment nginx --min=2 --max=10 --
cpu-percent=80
ログインしてこのクイズに回答し、学習の進捗を追跡できます
kubectl scale deployment nginx --replicas=5は何をしますか?ローリングアップデート:kubectl rollout
デプロイメントの更新とロールバックを管理します。
# デプロイメントのロールアウトステータスを確認
kubectl rollout status deployment/nginx
# ロールアウト履歴を表示
kubectl rollout history deployment/nginx
# 以前のバージョンにロールバック
kubectl rollout undo deployment/nginx
# 特定のリビジョンにロールバック
kubectl rollout undo deployment/nginx --to-revision=2
サービスとネットワーキング
サービスの公開:kubectl expose
ネットワークサービスを介してアプリケーションへのアクセスを可能にします。
# デプロイメントをClusterIPサービスとして公開
kubectl expose deployment nginx --port=80
# NodePortサービスとして公開
kubectl expose deployment nginx --port=80 --
type=NodePort
# LoadBalancerとして公開
kubectl expose deployment nginx --port=80 --
type=LoadBalancer
# YAMLからサービスを作成
kubectl apply -f service.yaml
ログインしてこのクイズに回答し、学習の進捗を追跡できます
kubectl exposeを使用した場合のデフォルトのサービスタイプは何ですか?サービスディスカバリ:kubectl get services
クラスター内のサービスを一覧表示し、検査します。
# すべてのサービスを一覧表示
kubectl get services
# より詳細なサービスを一覧表示
kubectl get svc -o wide
# 特定のサービスを記述
kubectl describe service
# サービスのENDPOINTを取得
kubectl get endpoints
ポートフォワーディング:kubectl port-forward
テストおよびデバッグのためにローカルマシンからアプリケーションにアクセスします。
# Podポートをローカルマシンにフォワード
kubectl port-forward pod/ 8080:80
# サービスポートをフォワード
kubectl port-forward svc/ 8080:80
# デプロイメントポートをフォワード
kubectl port-forward deployment/ 8080:80
# 複数のポートをフォワード
kubectl port-forward pod/ 8080:80 8443:443
Ingress の管理
HTTP/HTTPSルートを介したサービスへの外部アクセスを管理します。
# Ingressリソースを一覧表示
kubectl get ingress
# Ingressを記述
kubectl describe ingress
# YAMLからIngressを作成
kubectl apply -f ingress.yaml
ConfigMap と Secret
ConfigMap: kubectl create configmap
機密性のない設定データをキーと値のペアで保存します。
# リテラルからConfigMapを作成
kubectl create configmap app-config --from-
literal=database_url=localhost --from-literal=debug=true
# ファイルから作成
kubectl create configmap app-config --from-
file=app.properties
# ディレクトリから作成
kubectl create configmap app-config --from-file=config/
ConfigMap の使用
Pod 内で環境変数またはボリュームとして ConfigMap を使用します。
# ConfigMapを表示
kubectl get configmaps
kubectl describe configmap app-config
# ConfigMapのYAMLを取得
kubectl get configmap app-config -o yaml
# ConfigMapを編集
kubectl edit configmap app-config
# ConfigMapを削除
kubectl delete configmap app-config
Secret: kubectl create secret
パスワードや API キーなどの機密情報を保存および管理します。
# ジェネリックシークレットを作成
kubectl create secret generic db-secret --from-
literal=username=admin --from-
literal=password=secret123
# ファイルからシークレットを作成
kubectl create secret generic ssl-certs --from-file=tls.crt --
from-file=tls.key
# Dockerレジストリシークレットを作成
kubectl create secret docker-registry my-registry --
docker-server=myregistry.com --docker-username=user -
-docker-password=pass
Secret の管理
シークレットを安全に表示および管理します。
# シークレットを一覧表示
kubectl get secrets
# シークレットを記述(値は隠されている)
kubectl describe secret db-secret
# シークレットの値をデコード
kubectl get secret db-secret -o
jsonpath='{.data.password}' | base64 -d
# シークレットを削除
kubectl delete secret db-secret
ストレージとボリューム
Persistent Volume: kubectl get pv
クラスター全体のストレージリソースを管理します。
# Persistent Volumeを一覧表示
kubectl get pv
# Persistent Volumeを記述
kubectl describe pv
# YAMLからPVを作成
kubectl apply -f persistent-volume.yaml
# Persistent Volumeを削除
kubectl delete pv
Persistent Volume Claim: kubectl get pvc
Pod 用のストレージリソースを要求します。
# PVCを一覧表示
kubectl get pvc
# PVCを記述
kubectl describe pvc
# YAMLからPVCを作成
kubectl apply -f pvc.yaml
# PVCを削除
kubectl delete pvc
StorageClass: kubectl get storageclass
さまざまなプロパティを持つストレージタイプを定義します。
# StorageClassを一覧表示
kubectl get storageclass
# StorageClassを記述
kubectl describe storageclass
# デフォルトのStorageClassを設定
kubectl patch storageclass -p '{"metadata":
{"annotations":{"storageclass.kubernetes.io/is-default-
class":"true"}}}'
ボリューム操作
Pod 内でさまざまなボリュームタイプを操作します。
# Pod内のボリュームマウントを確認
kubectl describe pod | grep -A5 "Mounts:"
# Pod内のボリュームを一覧表示
kubectl get pod -o yaml | grep -A10 "volumes:"
トラブルシューティングとデバッグ
ログとイベント:kubectl logs / kubectl get events
デバッグのためにアプリケーションログとクラスターイベントを調べます。
# Podのログを表示
kubectl logs
# リアルタイムでログをフォロー
kubectl logs -f
# 前回のコンテナのログを表示
kubectl logs --previous
# 特定のコンテナのログを表示
kubectl logs -c
# クラスターイベントを表示
kubectl get events --sort-
by=.metadata.creationTimestamp
リソースの検査:kubectl describe
任意の Kubernetes リソースに関する詳細情報を取得します。
# Podを記述
kubectl describe pod
# デプロイメントを記述
kubectl describe deployment
# サービスを記述
kubectl describe service
# ノードを記述
kubectl describe node
リソース使用率:kubectl top
クラスター全体の Pod とノードのリソース消費量を監視します。
# ノードのリソース使用量を確認
kubectl top nodes
# Podのリソース使用量を確認
kubectl top pods
# ネームスペース内のPodのリソース使用量を確認
kubectl top pods -n
# CPU使用率でPodをソート
kubectl top pods --sort-by=cpu
対話型デバッグ:kubectl exec / kubectl debug
実行中のコンテナにアクセスして、ハンズオンでのトラブルシューティングを行います。
# 対話型シェルを実行
kubectl exec -it -- /bin/bash
# エフェメラルコンテナでデバッグ (K8s 1.23以降)
kubectl debug -it --image=busybox
# Podからファイルをコピー
kubectl cp :/path/to/file ./local-file
# Podにファイルをコピー
kubectl cp ./local-file :/path/to/destination
リソース管理
リソースの適用:kubectl apply
宣言的な設定ファイルを使用してリソースを作成または更新します。
# 単一ファイルを適用
kubectl apply -f deployment.yaml
# 複数ファイルを適用
kubectl apply -f deployment.yaml -f service.yaml
# ディレクトリ全体を適用
kubectl apply -f ./k8s-configs/
# URLから適用
kubectl apply -f https://example.com/manifest.yaml
# 適用内容を表示(ドライラン)
kubectl apply -f deployment.yaml --dry-run=client -o yaml
リソース操作:kubectl get / kubectl delete
Kubernetes リソースを一覧表示、検査、および削除します。
# ネームスペース内のすべてのリソースを取得
kubectl get all
# カスタム列でリソースを取得
kubectl get pods -o custom-
columns=NAME:.metadata.name,STATUS:.status.phase
# リソースをJSON/YAMLとして取得
kubectl get deployment nginx -o yaml
kubectl get pod -o json
# リソースを削除
kubectl delete -f deployment.yaml
kubectl delete pod,service -l app=nginx
リソースの編集:kubectl edit / kubectl patch
既存のリソースを直接変更します。
# リソースを対話形式で編集
kubectl edit deployment
# 戦略的マージでリソースをパッチ
kubectl patch deployment nginx -p '{"spec":
{"replicas":3}}'
# JSONマージでパッチ
kubectl patch pod --type='json' -p='[{"op": "replace",
"path": "/metadata/labels/env", "value": "prod"}]'
# リソース全体を置き換え
kubectl replace -f updated-deployment.yaml
リソースの検証:kubectl diff / kubectl explain
設定を比較し、リソーススキーマを理解します。
# 適用前の差分を表示
kubectl diff -f deployment.yaml
# リソース構造を説明
kubectl explain pod.spec.containers
# 例付きで説明
kubectl explain deployment --recursive
# 適用せずにリソースを検証
kubectl apply -f deployment.yaml --dry-run=client --
validate=true
高度な操作
ノード管理:kubectl cordon / kubectl drain
メンテナンスと更新のためにノードの可用性を管理します。
# ノードをスケジューリング不可としてマーク
kubectl cordon
# ノードをスケジューリング可能としてマーク
kubectl uncordon
# メンテナンスのためにノードをドレイン
kubectl drain --ignore-daemonsets --delete-emptydir-
data
# ノードにテイントを追加
kubectl taint nodes key=value:NoSchedule
# ノードからテイントを削除
kubectl taint nodes key:NoSchedule-
ラベル付けとアノテーション:kubectl label / kubectl annotate
リソースにメタデータを追加して整理し、選択できるようにします。
# リソースにラベルを追加
kubectl label pod environment=production
# リソースからラベルを削除
kubectl label pod environment-
# リソースにアノテーションを追加
kubectl annotate pod description="Frontend web
server"
# ラベルでリソースを選択
kubectl get pods -l environment=production
kubectl get pods -l 'environment in (production,staging)'
プロキシと認証:kubectl proxy / kubectl auth
クラスターAPI へのアクセスと認証の管理を行います。
# Kubernetes APIへのプロキシを開始
kubectl proxy --port=8080
# ユーザーがアクションを実行できるか確認
kubectl auth can-i create pods
kubectl auth can-i '*' '*' --
as=system:serviceaccount:default:my-sa
# ユーザーをなりすまし
kubectl get pods --as=system:serviceaccount:default:my-
sa
# ユーザー認証情報を表示
kubectl config view --raw -o jsonpath='{.users[*].name}'
ユーティリティコマンド
Kubernetes 操作に役立つ追加のコマンド。
# 条件を待機
kubectl wait --for=condition=Ready pod/ --timeout=300s
# テスト用に一時的なPodを実行
kubectl run tmp-pod --rm -i --tty --image=busybox --
/bin/sh
# 作成せずにリソースYAMLを生成
kubectl create deployment nginx --image=nginx --dry-
run=client -o yaml
# 作成タイムスタンプでリソースをソート
kubectl get pods --sort-by=.metadata.creationTimestamp
パフォーマンスと監視
リソースメトリック:kubectl top
クラスター全体のリアルタイムのリソース使用状況を表示します。
# ノードのリソース使用量
kubectl top nodes --sort-by=cpu
kubectl top nodes --sort-by=memory
# Podのリソース使用量
kubectl top pods --sort-by=cpu
kubectl top pods --sort-by=memory -A
# コンテナのリソース使用量
kubectl top pods --containers=true
# 履歴のリソース使用量 (metrics-serverが必要)
kubectl top pods --previous
ヘルスチェックとステータス
アプリケーションとクラスターのヘルスを監視します。
# デプロイメントのロールアウトステータスを確認
kubectl rollout status deployment/
# Podの準備完了状態を確認
kubectl get pods --field-selector=status.phase=Running
# リソースクォータを監視
kubectl get resourcequota
kubectl describe resourcequota
# クラスターコンポーネントのステータスを確認
kubectl get componentstatuses
パフォーマンス最適化
クラスターのパフォーマンス最適化に役立つコマンド。
# リソースのリクエストと制限を表示
kubectl describe node | grep -A5 "Allocated resources:"
# Pod Disruption Budgetを確認
kubectl get pdb
# Horizontal Pod Autoscalerを確認
kubectl get hpa
# ネットワークポリシーを確認
kubectl get networkpolicy
バックアップとリカバリ
クラスターのバックアップと災害復旧のための必須コマンド。
# ネームスペース内のすべてのリソースをバックアップ
kubectl get all -o yaml -n > backup.yaml
# 特定のリソースをエクスポート
kubectl get deployment -o yaml > deployment-
backup.yaml
# バックアップ用のすべてのリソース名を一覧表示
kubectl api-resources --verbs=list --namespaced -o name
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n
設定とコンテキスト管理
コンテキスト管理
異なる Kubernetes クラスターとユーザーを切り替えます。
# 現在のコンテキストを表示
kubectl config current-context
# すべてのコンテキストを一覧表示
kubectl config get-contexts
# コンテキストを切り替え
kubectl config use-context
# 新しいコンテキストを作成
kubectl config set-context dev-
context --cluster=dev-cluster --
user=dev-user --
namespace=development
Kubeconfig 管理
複数のクラスターで kubectl が動作するように設定します。
# マージされたkubeconfigを表示
kubectl config view
# クラスター情報を設定
kubectl config set-cluster --
server=https://cluster-api-url --
certificate-
authority=/path/to/ca.crt
# ユーザー認証情報を設定
kubectl config set-credentials --
client-
certificate=/path/to/client.crt --
client-key=/path/to/client.key
# kubeconfigファイルをマージ
KUBECONFIG=~/.kube/config:~/.
kube/config2 kubectl config
view --merge --flatten >
~/.kube/merged-config
デフォルト設定
kubectl 操作のデフォルトのネームスペースと環境設定を行います。
# 現在のコンテキストのデフォルトネームスペースを設定
kubectl config set-context --
current --namespace=
# デフォルトの出力形式を設定
kubectl config set-context --
current --output=yaml
# 設定の詳細を表示
kubectl config view -o
jsonpath='{.users[*].name}'
kubectl config view --raw
ベストプラクティスとヒント
コマンド効率化
日々の操作を高速化するためのショートカットとエイリアス。
# 一般的なkubectlエイリアス
alias k=kubectl
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgd='kubectl get deployments'
# リソースの短縮名を使用
kubectl get po # pods
kubectl get svc # services
kubectl get deploy # deployments
kubectl get ns # namespaces
kubectl get no # nodes
# 変更を監視
kubectl get pods --watch
kubectl get events --watch
リソース選択
リソースを選択しフィルタリングするための効率的な方法。
# ラベルで選択
kubectl get pods -l app=nginx
kubectl get pods -l 'environment in (prod,staging)'
kubectl get pods -l app=nginx,version!=v1.0
# フィールドで選択
kubectl get pods --field-selector=status.phase=Running
kubectl get pods --field-
selector=spec.nodeName=worker-node-1
# セレクターの組み合わせ
kubectl get pods -l app=nginx --field-
selector=status.phase=Running
出力形式
読みやすさや処理のためにコマンド出力をカスタマイズします。
# 異なる出力形式
kubectl get pods -o wide
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o name
# カスタム列
kubectl get pods -o custom-
columns=NAME:.metadata.name,STATUS:.status.phase,N
ODE:.spec.nodeName
# JSONPathクエリ
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get pods -o
jsonpath='{.items[*].spec.containers[*].image}'
安全性と検証
安全な操作と設定の検証のためのコマンド。
# 変更をプレビューするためのドライラン
kubectl apply -f deployment.yaml --dry-run=client -o yaml
# 設定の検証
kubectl apply -f deployment.yaml --validate=true --dry-
run=client
# 適用前の差分を表示
kubectl diff -f deployment.yaml
# グレース期間を指定して強制削除
kubectl delete pod --grace-period=0 --force