DockerデスクトップでKubernetesクラスターを設定する方法

Kubernetes は、マシンのクラスター間でコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースプラットフォームです。 これは、本番環境でコンテナをオーケストレーションするための頼りになるソリューションとなっています。 しかし、ローカルで開発またはテストを行っている場合、完全なKubernetesクラスターのセットアップは複雑になる可能性があります。 そこで登場するのが Docker Desktop で、ローカルマシン上で直接Kubernetesを実行できるため、リモートクラスタを必要とせずに、マイクロサービス、CI/CDパイプライン、コンテナ化されたアプリケーションを簡単にテストできます。

Kubernetesを稼働させることは、特にローカル環境で働く開発者にとっては、大変な作業のように感じるかもしれません。 しかし、Docker Desktopを使用すると、完全に機能するKubernetesクラスターをこれまで以上に簡単にスピンアップできます。 Kubernetes を初めて使用する場合でも、コンテナ化されたアプリケーションをローカルで簡単にテストする方法が必要な場合でも、Docker Desktop は合理化されたソリューションを提供します。 このガイドでは、Docker Desktop で Kubernetes クラスターを開始する手順を説明し、スムーズなエクスペリエンスを確保するためのトラブルシューティングのヒントを提供します。 

手記: Docker Desktop の Kubernetes クラスターは、ローカル開発とテスト用に特別に設計されています。本番環境での使用はできません。 

2400x1260 コンテナドッカー

Docker Desktop で Kubernetes を実行する利点 

この設定には、次のような利点があります。 

  • 簡単なローカルKubernetesクラスター: 完全に機能するKubernetesクラスターは、最小限のセットアップでローカルマシン上で実行され、ホストとKubernetes間のネットワークアクセスとストレージ管理を処理します。 
  • より簡単な学習パスと開発者の利便性: Docker には詳しいが Kubernetes に慣れていない開発者にとって、Kubernetes を Docker Desktop に組み込むことで、手間の省けない学習パスが得られます。 
  • Kubernetes ベースのアプリケーションをローカルでテストする: Docker Desktop は、サービス、ポッド、ConfigMaps、シークレットなどの Kubernetes 機能を必要とする Kubernetes ベースのマイクロサービス アプリケーションを、リモート クラスターへのアクセスを必要とせずにテストするためのローカル環境を開発者に提供します。 また、開発者がCI/CDパイプラインをローカルでテストするのにも役立ちます。 

Docker DesktopでKubernetesクラスタを3つのステップで起動する方法

  1. 最新の Docker Desktop リリースをダウンロードします。
  2. 選択したオペレーティングシステムにDockerDesktopをインストールします。 現在、サポートされているオペレーティング システムは macOS、Linuxおよび Windows です。
  3. [設定] メニューで [Kubernetes] を選択し、[Kubernetes>有効にする] を選択し、次に [適用して再起動] を選択して 1 ノードの Kubernetes クラスターを開始します (図 1)。通常、Kubernetes クラスターのセットアップにかかる時間は、必要なイメージをプルするためのインターネットの速度によって異なります。
左側でKubernetesを選択し、[Kubernetesを有効にする]オプションが選択された[設定]メニューのスクリーンショット。
図 1: Kubernetes を起動します。

Kubernetes クラスターが正常に起動すると、Docker Desktop ダッシュボードまたはコマンド ラインからステータスを確認できます。

ダッシュボードから (図 2) :

Docker Desktop ダッシュボードのスクリーンショットで、Kubernetes が実行中であることの横に緑色の点が表示されています。
図 2: ダッシュボードからのステータス。

コマンドラインのステータス:

$ 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 ドキュメントなど、いくつかの方法でサポートを受けることができます。 

問題が発生した場合の対処方法 

診断ファイルを生成する

トラブルシューティングを行う前に、端末を使用して診断ファイルを生成してください。

ターミナルからの診断については、ドキュメントを参照してください。たとえば、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> 画像が利用できない場合は、次の手順に従ってください。

  1. Kubernetes クラスターを正常に起動したマシンの docker image save を使用して、tar ファイル ( docker save registry.k8s.io/coredns:v<VERSION> > <Name of the file>.tar) として保存します。
  2. <Name of the file>.tarを手動で転送する あなたのマシンに。
  3. docker image load を使用して、イメージをマシンに読み込みます (docker image load < <Name of the file>.tar)。
  4. 画像に「 docker image tag registry.k8s.io/coredns:v<VERSION> <Name of the file>.tar」のタグを付けます。
  5. Docker Desktop の設定から Kubernetes を再度有効にします。
  6. 診断ログの他のログを確認します。

診断ログで確認する内容

診断ログで、 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統合で何を実現できるか試してみてください。

さらに詳しく