Kubernetes は、実稼働環境でコンテナ化されたワークロードを実行する最も一般的な方法の 1 つになりました。これにより、サービスを実行するコンテナーのデプロイ、スケーリング、保守が簡素化されます。
Kubernetes は、ローカル開発の分野ではおそらくそれほど影響力がありません。開発者がプレーンな Docker コンテナを使用して新しいサービスを構築およびテストするのが一般的であり、おそらく Docker Compose で スタックに配置されます。ローカル Kubernetes クラスターの実行は、多くの場合、複雑さとオーバーヘッドの追加レイヤーとして見なされます。
この記事では、ステージング環境や運用環境だけでなく、ローカル開発にも Kubernetes を使用する必要がある理由をいくつか説明します。また、ローカルの Kubernetes 開発ワークフローを実装するために使用できるツールのいくつかについても説明します。
優れた開発環境とは何でしょうか?
効果的なローカル開発環境は、実稼働インフラストラクチャを厳密に模倣しながら、迅速な反復を可能にする緊密なフィードバック ループを提供する必要があります。これら 2 つの目的はスペクトルの対極にあります。最大のスループットを達成するには、バランスを取る必要があります。
一方で、運用環境のレプリケーションを最大化するように最適化すると、環境固有のバグを排除できる可能性が最も高くなります。ただし、実際の運用環境に似たインフラストラクチャへのデプロイは、CI パイプラインの実行と新しいクラウド リソースのプロビジョニングを必要とする、時間のかかるプロセスになる可能性があります。変更を加えるたびにこれらの手順が完了するのを待っていると、開発が遅くなります。
逆に、反復速度のみに焦点を当てると、開発が本番の仕組みから逸脱する可能性があります。これにより、エンジニアリング チームでは決して遭遇しない問題がユーザーに発生する可能性があります。
開発 Kubernetes クラスターがどのように役立つか
コンテナ化はすでに、実稼働環境の類似性と反復の容易さのバランスをとるための強力なテクノロジーです。開発と運用の両方でコンテナーを実行すると、アプリケーション環境とそのファイルシステムがデプロイされるたびに一貫性があることが保証されます。
本番環境で Kubernetes を使用すると、スタックに新しいテクノロジーが追加されます。独自の概念、ベスト プラクティス、および潜在的な非互換性をもたらします。個々のコンテナーは同じですが、受信トラフィック、サービス間のネットワーク、構成やストレージなどの周辺事項を処理する追加のレイヤーがあります。
Kubernetes で開発環境を実行すると、ソリューションを構築するときにこれらの違いを再現できます。ローカル マシン上で実行されているクラスターは、運用インフラストラクチャを正確に複製していない可能性がありますが、より近いものになります。これにより、テストがより現実的になり、盲点の数が減ります。
フィードバックサイクルの短縮
開発中の Kubernetes は、反復フィードバック サイクルを短縮します。これは、上で説明した優れた開発エクスペリエンスの側面の 1 つです。
テスト環境で運用環境と同じテクノロジを実行すると、ユーザーの問題レポートをより適切に複製できるようになります。つまり、変更を加えるたびに実際の環境にデプロイすることなく、実験、反復、デバッグができるということです。
各リビジョンの影響はローカル Kubernetes クラスターですぐに確認できるため、スループットが向上します。開発者は、問題がサービス間の接続など Kubernetes に固有のものにある場合でも、理論を迅速にテストし、新しいソリューションを評価できます。 Kubernetes が実稼働用に予約されている場合、これは不可能です。
運用とのギャップを縮める
Kubernetes を開発ツールとして使用すると、エンジニアリングと運用の間のギャップが狭まります。開発者は、運用チームが運用ワークロードを維持するために使用するツールと概念を直接体験できます。
全体像を認識することは、開発者が本番環境での問題を事前に回避するのに役立ちます。また、サービスの運用に関連する課題についても理解できるようになります。オペレーターが不完全または取得が難しいログやメトリクスに悩まされている場合、開発者も自身の作業の一環として問題に遭遇することになります。
ローカル Kubernetes 環境のセットアップ
開発用に Kubernetes クラスターをセットアップするには、いくつかのオプションがあります。 1 つのアプローチは、既存のクラウド環境に新しいクラスターを作成することです。これにより、運用インフラストラクチャとの最良の一貫性が実現されます。ただし、開発操作はリモート環境に対して実行されるため、効率が低下する可能性があります。
開発者は多くの場合、使いやすさを高めるために独自のクラスターをローカルで実行することを好みます。 Minikube や などのプロジェクトを使用すると、独自のハードウェアへの Kubernetes クラスターのデプロイが簡素化されます。たとえば、次の 1 つのコマンドを実行して、Snap パッケージから MicroK8s クラスターを起動できます。
$ sudo snap install microk8s --classic
MicroK8s が起動したら、バンドルされたバージョンの を使用してクラスターと対話できるようになります。
$ sudo microk8s kubectl apply -f my-pod.yaml
Kubernetes はコンテナ化プラットフォーム内ですでに利用可能であることに気づくかもしれません。 Windows および Mac 用の Docker Desktop には、アプリケーションの設定内でアクティブ化できる 組み込みの Kubernetes クラスターが含まれています 。 Rancher Desktop は 、プレーンなコンテナ管理と統合された Kubernetes クラスタを組み合わせたもう 1 つのユーティリティです。
どのソリューションを使用する場合でも、運用環境にできる限り一致するようにクラスターを構成する必要があります。予期しない非互換性や API バージョンの不一致を避けるために、一貫して同じ Kubernetes リリースを使用します。
限界
開発環境は常に、何らかの点で本番とは異なります。矛盾が認められ、理解されている限りは問題ありません。
すべての環境で Kubernetes を実行している場合、次の制限に遭遇する可能性が高くなります。
- 限られたリソース – ほとんどの開発クラスターは単一マシン上でローカルに実行されます。実稼働クラスターは数十のノードにまたがり、数百または数千のポッドをサポートできます。これにより、アプリケーションがどの程度拡張できるかを正確に測定することが困難になる可能性があります。
- 構成の不一致 – 各開発者が独自のクラスターをプロビジョニングする場合、他の環境とは異なる動作をする設定を変更する可能性があります。これらの問題を回避するには、単一のディストリビューション (Minikube や MicroK8s など) と特定の Kubernetes リリースを標準化することが重要です。
- ベンダーの違い – Minikube や MicroK8s などのローカル Kubernetes デプロイメントには、Amazon EKS、Azure AKS、Google GKE などのベンダーからデプロイされたクラウド クラスターと比較して、いくつかの固有の違いがあります。ストレージとネットワークの統合はプロバイダーごとに動作が異なるため、非互換性が発生する可能性がまだあります。
- 複雑さと学習曲線 – 開発で Kubernetes を使用すると、避けられない複雑さが加わります。このアプローチの利点を示してきましたが、開発者、特にチームの新参者が Kubernetes を学習し、定期的なリリース リズムを常に最新の状態に保つ必要がある場合、その負担がかかることを認識することも重要です。
上記の問題のほとんどは、DevOps 管理者によって集中管理される内部開発クラスターを提供することで解決できます。 Kubernetes 名前空間と RBAC コントロールを使用して、各開発者が作業するための分離領域を 設定できます。これにより、Kubernetes のディストリビューション、バージョン、およびリソースの可用性の標準化が保証されますが、開発者がクラスターを所有しなくなるため、開発者の自主性が低下する可能性があります。また、多くのエンジニアが共有クラスター内に新しい変更がデプロイされるのを待っているときにボトルネックが発生する可能性もあります。
結論
開発で Kubernetes を使用すると、ステージング環境や運用環境と同等の環境でソフトウェアをテストできます。これにより、ユーザーに発見される前に問題を早期に発見することができます。 Kubernetes を開発ツールとして採用すると、エンジニアはアプリケーションが運用環境にどのようにデプロイされるかに慣れることができます。
Kubernetes への切り替えは困難に思えるかもしれません。コンテナの基礎をよく理解すると、Kubernetes が追加するものと 。現在、開発ワークステーションにローカル Kubernetes クラスターをデプロイするための優れたオプションがいくつかあります。この種のソリューションを使用すると、テスト展開がリモート インフラストラクチャにロールアウトされるまで待つ必要がなくなります。
ソフトウェア開発プロセス全体の一貫性を向上させるツールは、関係者全員に利益をもたらします。これは、コンテナーの動きと Docker の広範な採用の基礎においてすでに見られています。ローカル Kubernetes クラスターを実行すると、運用環境に近い開発が可能になり、フィードバック サイクルが短縮され、チーム間のコラボレーションが向上します。





