Kubernetes は、マシンのクラスター間でコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースプラットフォームです。 これは、本番環境でコンテナをオーケストレーションするための頼りになるソリューションとなっています。 しかし、ローカルで開発またはテストを行っている場合、完全なKubernetesクラスターのセットアップは複雑になる可能性があります。 そこで登場するのが Docker Desktop で、ローカルマシン上で直接Kubernetesを実行できるため、リモートクラスタを必要とせずに、マイクロサービス、CI/CDパイプライン、コンテナ化されたアプリケーションを簡単にテストできます。
Kubernetesを稼働させることは、特にローカル環境で働く開発者にとっては、大変な作業のように感じるかもしれません。 しかし、Docker Desktopを使用すると、完全に機能するKubernetesクラスターをこれまで以上に簡単にスピンアップできます。 Kubernetes を初めて使用する場合でも、コンテナ化されたアプリケーションをローカルで簡単にテストする方法が必要な場合でも、Docker Desktop は合理化されたソリューションを提供します。 このガイドでは、Docker Desktop で Kubernetes クラスターを開始する手順を説明し、スムーズなエクスペリエンスを確保するためのトラブルシューティングのヒントを提供します。
手記: Docker Desktop の Kubernetes クラスターは、ローカル開発とテスト用に特別に設計されています。本番環境での使用はできません。
![- 2400x1260 コンテナドッカー 2400x1260 コンテナドッカー](https://www.docker.com/ja-jp/app/uploads/2024/09/2400x1260_container-docker-1110x583.png)
Docker Desktop で Kubernetes を実行する利点
この設定には、次のような利点があります。
- 簡単なローカルKubernetesクラスター: 完全に機能するKubernetesクラスターは、最小限のセットアップでローカルマシン上で実行され、ホストとKubernetes間のネットワークアクセスとストレージ管理を処理します。
- より簡単な学習パスと開発者の利便性: Docker には詳しいが Kubernetes に慣れていない開発者にとって、Kubernetes を Docker Desktop に組み込むことで、手間の省けない学習パスが得られます。
- Kubernetes ベースのアプリケーションをローカルでテストする: Docker Desktop は、サービス、ポッド、ConfigMaps、シークレットなどの Kubernetes 機能を必要とする Kubernetes ベースのマイクロサービス アプリケーションを、リモート クラスターへのアクセスを必要とせずにテストするためのローカル環境を開発者に提供します。 また、開発者がCI/CDパイプラインをローカルでテストするのにも役立ちます。
Docker DesktopでKubernetesクラスタを3つのステップで起動する方法
- 最新の Docker Desktop リリースをダウンロードします。
- 選択したオペレーティングシステムにDockerDesktopをインストールします。 現在、サポートされているオペレーティング システムは macOS、Linux、および Windows です。
- [設定] メニューで [Kubernetes] を選択し、[Kubernetes>有効にする] を選択し、次に [適用して再起動] を選択して 1 ノードの Kubernetes クラスターを開始します (図 1)。通常、Kubernetes クラスターのセットアップにかかる時間は、必要なイメージをプルするためのインターネットの速度によって異なります。
![- F1 Kubernetesの起動 左側でKubernetesを選択し、[Kubernetesを有効にする]オプションが選択された[設定]メニューのスクリーンショット。](https://www.docker.com/ja-jp/app/uploads/2024/12/F1-starting-Kubernetes.png)
Kubernetes クラスターが正常に起動すると、Docker Desktop ダッシュボードまたはコマンド ラインからステータスを確認できます。
ダッシュボードから (図 2) :
![- F2 確認状況 Docker Desktop ダッシュボードのスクリーンショットで、Kubernetes が実行中であることの横に緑色の点が表示されています。](https://www.docker.com/ja-jp/app/uploads/2024/12/F2-checking-status.png)
コマンドラインのステータス:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 5d v1.30.2
Kubernetes のサポートを受ける
Docker は Kubernetes をバンドルしますが、 公式の Kubernetes サポートは提供していません。 ただし、Kubernetes で問題が発生した場合は、Docker コミュニティ、Docker ガイド、GitHub ドキュメントなど、いくつかの方法でサポートを受けることができます。
- Docker コミュニティ フォーラム
- Kubernetes へのデプロイ |Dockerのドキュメント
- ドッカードキュメント
- GitHub ドキュメント:
問題が発生した場合の対処方法
診断ファイルを生成する
トラブルシューティングを行う前に、端末を使用して診断ファイルを生成してください。
ターミナルからの診断については、ドキュメントを参照してください。たとえば、Mac を使用している場合は、次のコマンドを実行します。
/Applications/Docker.app/Contents/MacOS/com.docker.diagnose gather -upload
このコマンドにより、診断ファイルが保存されている場所が表示されます。
Gathering diagnostics for ID into /var/folders/50/<Random Character>/<Random Character>/<Machine unique ID>/<YYYYMMDDTTTT>.zip.
この場合、ファイルは /var/folders/50/<Random Characters>/<Random Characters>/<YYYMMDDTTTT>.zip
時に保存されます。 ファイルを解凍します(<YYYYMMDDTTTT>.zip
) Docker Desktop のログファイルはどこにありますか。
ログを確認する
問題を推測する代わりにログを確認することをお勧めします。 トラブルシューティングを開始する前に、利用可能な Kubernetesコンポーネント とその機能を理解することが不可欠です。 特定のコンポーネントログを見ることで、プロセスを絞り込むことができます。 ログでキーワード error
または fatal
を探します。
使用しているプラットフォームに応じて、1 つの方法は、 grep
コマンドを使用して、macOS ターミナル、WSL の Linux ディストリビューション、または解凍したファイルの Linux ターミナルでキーワードを検索することです2。
$ grep -Hrni "<keyword>" <The path of the unzipped file>
## For example, one of the error found related to Kubernetes in the "com.docker.backend.exe" logs:
$ grep -Hrni "error" *
[com.docker.backend.exe.log:[2022-12-05T05:24:39.377530700Z][com.docker.backend.exe][W] starting kubernetes: 1 error occurred:
com.docker.backend.exe.log: * starting kubernetes: pulling kubernetes images: pulling registry.k8s.io/coredns:v1.9.3: Error response from daemon: received unexpected HTTP status: 500 Internal Server Error
トラブルシューティングの例
クラスターの起動に問題があることに気付いたとします。 この問題は、Kubernetesクラスター内のコンテナ管理とオーケストレーションを支援するノードレベルのエージェントとして機能するKubeletプロセスに関連している可能性があります。 したがって、Kubeletログを確認する必要があります。
しかし、Kubeletのログはどこにあるのでしょうか? 診断ファイルで log/vm/kubelet.log
にあります。
関連する可能性のある問題の例については、 kubelet.log
を参照してください。 Kubernetesのセットアップに必要なイメージは、ネットワーク/インターネットの制限によりプルできません。 Kubernetes クラスターを設定するために必要な Kubernetes イメージのプルに失敗したことに関連するエラーが見つかる場合があります。
例えば:
starting kubernetes: pulling kubernetes images: pulling registry.k8s.io/coredns:v1.9.3: Error response from daemon: received unexpected HTTP status: 500 Internal Server Error
通常、クラスターを設定するには 10 イメージが必要です。 次の出力は、Docker Desktop バージョン 4を実行している macOS からのものです。33:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/desktop-kubernetes kubernetes-v1.30.2-cni-v1.4.0-critools-v1.29.0-cri-dockerd-v0.3.11-1-debian 5ef3082e902d 4 weeks ago 419MB
registry.k8s.io/kube-apiserver v1.30.2 84c601f3f72c 7 weeks ago 112MB
registry.k8s.io/kube-scheduler v1.30.2 c7dd04b1bafe 7 weeks ago 60.5MB
registry.k8s.io/kube-controller-manager v1.30.2 e1dcc3400d3e 7 weeks ago 107MB
registry.k8s.io/kube-proxy v1.30.2 66dbb96a9149 7 weeks ago 87.9MB
registry.k8s.io/etcd 3.5.12-0 014faa467e29 6 months ago 139MB
registry.k8s.io/coredns/coredns v1.11.1 2437cf762177 11 months ago 57.4MB
docker/desktop-vpnkit-controller dc331cb22850be0cdd97c84a9cfecaf44a1afb6e 3750dfec169f 14 months ago 35MB
registry.k8s.io/pause 3.9 829e9de338bd 22 months ago 514kB
docker/desktop-storage-provisioner v2.0 c027a58fa0bb 3 years ago 39.8MB
10イメージが正常にプルされたかどうかは、docker image ls
を実行して確認できます。イメージが見つからない場合の回避策は、Kubernetes クラスターを正常に起動するマシンの docker image save
を使用して、見つからないイメージを保存することです (両方が同じ Docker Desktop バージョンを実行している場合)。 その後、画像をマシンに転送し、 docker image load
を使用してイメージをマシンにロードし、タグを付けることができます。
たとえば、 registry.k8s.io/coredns:v<VERSION>
画像が利用できない場合は、次の手順に従ってください。
- Kubernetes クラスターを正常に起動したマシンの
docker image save
を使用して、tar ファイル (docker save registry.k8s.io/coredns:v<VERSION> > <Name of the file>.tar
) として保存します。 <Name of the file>.tar
を手動で転送する あなたのマシンに。docker image load
を使用して、イメージをマシンに読み込みます (docker image load <
<Name of the file>.tar
)。- 画像に「
docker image tag registry.k8s.io/coredns:v<VERSION> <Name of the file>.tar
」のタグを付けます。 - Docker Desktop の設定から Kubernetes を再度有効にします。
- 診断ログの他のログを確認します。
診断ログで確認する内容
診断ログで、 kube/
で始まるフォルダーを探します。 (なお、以下の <kube>
は、macOSとLinuxは kubectl
、Windowsは kubectl.exe.
です)
kube/get-namespaces.txt
: すべての名前空間を<kube> --context docker-desktop get namespaces
に等しい順にリストアップします。kube/describe-nodes.txt
: docker-desktop ノードを<kube> --context docker-desktop describe nodes
に等しい形で記述します。kube/describe-pods.txt
: Kubernetes クラスターで実行されているすべてのポッドの説明。kube/describe-services.txt
: 実行中のサービスの説明 (<kube> --context docker-desktop describe services --all-namespaces
に等しい)。- また、上記のフォルダには、他の有用なKubernetesログもあります。
既知の問題を検索する
上記の手順で見つかったエラーメッセージについては、 GitHubでKubernetes の既知の問題を検索して、回避策や将来の恒久的な修正が予定されているかどうかを確認できます。
リセットまたは再起動
前の手順で問題が解決しない場合は、再起動をお試しください。 また、前の手順で問題が解決しない場合は、再起動を試してください。 また、再起動しても問題が解決しない場合は、Kubernetesクラスタをリセットするのが最後の方法であり、これは多くの場合、問題の解決に役立ちます。
- リブート: 再起動するには、マシンを再起動します。 Kubernetesクラスター内のマシンを再起動すると、一時的な状態をクリアし、システムをクリーンな状態に復元することで、問題を解決できます。
- リセット: リセットするには、[ 設定 ] > [Kubernetes ] に移動し、[ Kubernetes クラスター>リセット] に移動します。 Kubernetesクラスターをリセットすると、基本的にクラスターをクリーンな状態に戻し、問題の原因となっている可能性のある設定ミス、破損したデータ、またはスタックしたリソースをクリアすることで、問題を解決できます。
Kubernetes をローカル開発環境に導入する
このガイドでは、Docker Desktop で Kubernetes クラスターを簡単に開始する方法を提供し、開発者が Kubernetes ベースのアプリケーションをローカルで簡単にテストできるようにします。 簡単なセットアップ、初心者向けのよりアクセスしやすい学習パス、リモートクラスターに依存せずにテストを実行する機能などの主要な利点について説明します。 また、一般的な問題を解決するためのトラブルシューティングのヒントとリソースも提供しています。
始めたばかりの場合でも、ローカルのKubernetesワークフローを改善したい場合でも、Docker DesktopのKubernetes統合で何を実現できるか試してみてください。
さらに詳しく
- Docker Newsletter を購読してください。
- Docker デスクトップの最新リリースを入手します。
- オンデマンド トレーニング: Container Orchestration 101
- Docker と Kubernetes
- Docker コミュニティ フォーラム
- Kubernetes へのデプロイ |Dockerのドキュメント
- ドッカードキュメント
- GitHub ドキュメント
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。