Kubernetes

初心者向けKubernetesデプロイ手順:ローカルで学ぶハンズオン

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

導入:対象読者とこの記事で得られること

Kubernetes初心者がローカル環境で実務に近いデプロイ手順を短時間で試せるよう整理します。minikube/kind/Docker Desktop を想定し、Deployment と Service/Ingress、HPA、更新・ロールバックまでを順を追って説明します。Kubernetes初心者がまず実行すべきコマンドとファイル構成をすぐに使える形で提示します。

最短でこれだけやれば動く(最短手順)

まずは最小限で動作確認したい方向けに、必要な手順を短く示します。環境差分は本文で詳述するため、まずは下記を順に実行してください。各コマンドは実行する端末のシェルや OS に合わせてください。

  • クラスタ起動(例: minikube を使用する場合)

  • イメージをビルドしてクラスタへ反映(環境により方法が異なります)

  • マニフェスト適用と動作確認

共通フロー:イメージ作成から公開までの基本

ここではローカルで共通して使えるフローを示します。イメージの作成とクラスタへの配布、Deployment/Service/Ingress の最低限の構成を押さえてください。

イメージの作成とローカルクラスタへの配布

イメージはまずローカルでビルドします。ローカルクラスタへ反映する方法は環境によって異なるため、ここでまとめて参照できるようにします。

  • ローカルでビルド:

  • minikube へ反映(選択肢):
  • 直接ロード:

  • minikube の Docker 環境でビルド(Unix系シェル):

  • PowerShell の例:

  • kind へ反映:

  • Docker Desktop:
  • Kubernetes を有効にした場合、ホストの Docker デーモンとイメージを共有できます。
  • imagePullPolicy の扱いに注意してください(ローカルイメージを使うなら IfNotPresent/ Never を検討)。

  • プライベートレジストリ利用時:

イメージの配布手順はここに一本化してください。環境ごとの差分は次章で簡潔にまとめます。

Deployment / Service / Ingress の最小構成

まず動く最小構成を用意し、その後にプローブやリソース制限を追加します。Ingress は必ず Ingress Controller と合わせて使ってください。

  • k8s/deployment.yaml(最小例)

  • k8s/service.yaml(NodePort の例)

  • k8s/ingress.yaml(Ingress Controller に依存する最小例)

Ingress の追加設定(rewrite など)はコントローラ依存です。詳しくは「Ingress Controller ごとの違い」の節を参照してください。

環境別の差分と注意点(minikube / kind / Docker Desktop)

ローカル環境ごとに挙動や運用上の注意が異なります。共通フローは同じですが、イメージの反映や LoadBalancer/Ingress の扱いが変わるためここで整理します。

minikube 固有の注意点

minikube は学習や検証向けに多くのアドオンが用意されています。LoadBalancer 検証や Ingress の有効化が比較的簡単です。

  • 起動例:

  • metrics-server はアドオンで有効化可能:

  • イメージ反映の例: minikube image load か docker-env を利用
  • Bash/zsh: eval $(minikube -p minikube docker-env)
  • PowerShell: minikube -p minikube docker-env --shell powershell | Invoke-Expression

  • LoadBalancer 検証: minikube tunnel を使いますが、実行には管理者権限が必要な場合があります。別ターミナルで実行し続ける必要があります。

  • hostPath やローカルディレクトリを使う場合: minikube mount を使うとホストのディレクトリをノード内にマウントできます。

注意: minikube が VM ベースの場合、hostPath は VM 側のパスを参照します。直接ホストのパスを期待しないでください。

kind 固有の注意点

kind はコンテナ内にノードを立ち上げるため CI 向けや高速検証に向きますが、containerd を使うためイメージの取り扱いに差分があります。

  • クラスタ作成とイメージロード:

  • Ingress/LoadBalancer は別途導入が必要です。代表例:
  • ingress-nginx の kind 向けマニフェスト(公式リリースを指定して適用)
  • MetalLB を導入して LoadBalancer をエミュレート

公式マニフェストはリリースタグを明示して取得してください(stable ブランチ直叩きは避ける)。

Docker Desktop 固有の注意点

Docker Desktop は手軽ですが、リソース配分やライセンスに注意が必要です。

  • Kubernetes を Settings で有効化して利用
  • WSL2 と統合している場合、WSL 側のビルドがそのまま使えるケースがあります
  • LoadBalancer のサポートは限定的で、NodePort や port-forward を使うことが多い
  • 商用利用や企業での導入は Docker のライセンス変更に注意し、最新の利用規約を確認してください

Ingress Controller ごとの違いと実務上の注意

Ingress リソースの振る舞いは Ingress Controller(nginx、traefik、クラウドコントローラ等)に依存します。必ず使用するコントローラのドキュメントを参照してください。

nginx-ingress の注意点

nginx コントローラは注釈(annotations)で細かい挙動を制御できます。例えばパス書き換えは nginx 固有の注釈を使います。

  • 例(nginx 固有):

  • IngressClass または ingressClassName を明示してコントローラを指定してください。

Traefik や他のコントローラ

Traefik や各クラウドのコントローラでは設定方法や注釈が異なります。ルーティングやミドルウェア設定の記法が変わるため、同じ Ingress 定義でも期待する挙動が変わる点に注意してください。

クラウドプロバイダの LoadBalancer(GCE/ALB など)

クラウド環境では Service type: LoadBalancer によってクラウドの LB が作られます。注釈やサービス設定はプロバイダ依存です。ローカルで検証する際は minikube tunnel や MetalLB で動作を再現してください。

HPA と metrics-server の導入と hpa.yaml の例

自動スケールを使うにはメトリクス基盤が必要です。ローカル環境では metrics-server の導入・設定が HPA が動作するための主な前提です。

metrics-server をローカル環境で動かす

metrics-server は公式リポジトリの release を使って導入し、マニフェストはリリースタグを固定して取得してください。例として最新版を直接使うのではなく、GitHub のリリースページからタグを指定して適用します。ローカルの kubelet が自己署名証明書を使っている場合、metrics-server に --kubelet-insecure-tls を追加する必要があることがあります。

  • minikube ではアドオンを使うことも可能:

  • マニフェストを手動で適用する場合は、公式リリースの components.yaml をダウンロードしてから適用し、必要に応じて Deployment の args に --kubelet-insecure-tls を追加してください。

編集例(簡易):

hpa.yaml(サンプル)

以下は k8s/hpa.yaml の例です。クラスタの API バージョンに合わせて autoscaling バージョンを調整してください。

古いクラスターでは autoscaling/v1 の targetCPUUtilizationPercentage を使う必要があります。用途に合わせて選択してください。

HPA のトラブルシュート(簡潔)

  • metrics-server が正しく動作しているか確認: kubectl -n kube-system get pods | grep metrics-server
  • メトリクス取得確認: kubectl top nodes / kubectl top pods
  • HPA の状態確認: kubectl get hpa -o wide
  • kubelet の TLS エラーがあれば metrics-server の --kubelet-insecure-tls を検討

永続化・OS依存・hosts ファイルの扱い

開発用のホストボリュームや hosts 編集などは OS による差分が重要です。特に Windows/WSL2 や VM ベースの minikube では挙動が異なります。

hostPath と WSL2/Windows の注意

hostPath は Pod のノード側ファイルシステムを直接参照します。ノードが VM やコンテナで動いている場合、期待したホストのパスが参照されないことがあります。開発では local-path-provisioner や minikube mount、あるいは Docker Desktop/WSL2 の共有機能を利用してください。

  • Windows の場合:
  • Docker Desktop(WSL2 統合)ではパスの扱いに注意が必要です。C:\ のパスをそのまま hostPath に書いてもノードにマウントされない場合があります。
  • minikube を Windows 上で利用する場合は minikube mount を使うか、ホスト側の共有方法を確認してください。

開発用の PV/PVC 例は hostPath を使えますが、本番ではクラウドの永続ストレージか CSI プロビジョナーを利用してください。

hosts ファイルの編集(OS別)

ローカルで Ingress のホスト名を割り当てるときは hosts を編集します。編集は管理者権限が必要です。

  • Linux / macOS:

  • ファイル: /etc/hosts

  • 編集: sudo vi /etc/hosts

  • Windows:

  • ファイル: C:\Windows\System32\drivers\etc\hosts

  • 管理者権限でエディタを起動して編集

minikube を使う場合は minikube service myapp --url や minikube ip を確認して該当の IP を hosts に追加してください。

セキュリティ:Secret 管理と RBAC の実務的運用

開発と本番で Secret を扱う方法は異なります。リポジトリに平文で置かないことは必須です。

Secret 管理(sealed-secrets / SOPS / External Secrets)

  • Sealed Secrets(Bitnami)
  • 公開鍵でシークレットを暗号化し、Git にコミット可能にするツール。復号はクラスタ内のコントローラが担当します。
  • SOPS(Mozilla)
  • GPG/Cloud KMS などでファイルを暗号化して Git 管理する方法。CI で復号して適用します。
  • External Secrets
  • AWS Secrets Manager、HashiCorp Vault、GCP Secret Manager 等と連携して Kubernetes Secret を同期する実装があります。

用途に応じて上記から選び、機密情報は必ず暗号化して管理してください。

RBAC と最小権限

ServiceAccount と Role/RoleBinding を用いて最小権限を設定してください。管理用途で cluster-admin を安易に付与しないことが重要です。たとえば、namespace 内で ConfigMap を読むだけの Role を作成して ServiceAccount に付与する例を本文中に示しました。

GitOps(Argo CD)導入の注意点(ローカル検証)

Argo CD 等の GitOps ツールをローカルで試す場合は、マニフェストの取得元(リリースタグ)を固定してください。stable ブランチ直叩きは将来的な変更リスクがあるため推奨しません。

  • インストール(例、タグを指定):

  • 初期管理者パスワード取得(表示はしないが取得コマンド例):

ローカル検証の後は SSO や外部認証の導入を検討し、デフォルトの資格情報は速やかに変更してください。公式ドキュメントのリリースノートを参照して、使用するバージョンを固定する運用を推奨します。

トラブルシューティング:代表的な問題と対処

ここではよくあるトラブルと簡潔な切り分け手順を示します。まずは該当するコマンドで情報を取得してください。

CrashLoopBackOff

  • 確認コマンド:

  • 主な原因と対処:
  • エントリポイントや引数の誤りを確認する
  • 環境変数やマウントの不備をチェック
  • プローブや初期遅延が短すぎる場合は initialDelaySeconds を増やす

ImagePullBackOff

  • 確認コマンド:

  • 対処:
  • イメージ名・タグの確認
  • imagePullSecrets の設定確認
  • ローカルクラスタは image load を検討(kind/minikube)

Pending(スケジューリング不可)

  • 確認コマンド:

  • 対処:
  • Insufficient cpu/memory の場合はリソース要求を見直す
  • taint/toleration、nodeSelector の不整合を確認する

Ingress が効かない

  • 確認:
  • Ingress Controller の Pod が動作しているか: kubectl get pods -n
  • Ingress のイベント: kubectl describe ingress
  • hosts の設定や IngressClass が正しいか確認

HPA がスケールしない

  • 確認:
  • kubectl top pods/nodes がデータを返すか
  • metrics-server Pod のログを確認
  • metrics-server の kubelet TLS エラーを疑う(--kubelet-insecure-tls)

主要コマンド一覧(参考)

以下は日常的に使うコマンドの一覧です。必要に応じて適切な引数を追加してください。

まとめ

ローカル環境での Kubernetes デプロイ手順は、「共通フロー(イメージ→デプロイ→公開)」を押さえ、環境別の差分(minikube/kind/Docker Desktop)を理解することが近道です。Ingress コントローラや metrics-server、Secret 管理はコントローラや環境によって挙動が変わるため、公式ドキュメントからリリースタグを固定して導入する運用を推奨します。まずは最短手順を実行して動作を確認し、その後プローブ・リソース・セキュリティ周りを強化してください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Kubernetes