Docker Desktop から Kubernetes を起動しようとすると、ぐるぐるが終わらずにスタック状態となる場合があります。
PowerShell上から
Get-Content C:\Users\foo\appdata\local\Docker\log.txt -wait -tail 0
でログを観察してみると、
[12:48:25.326][GoBackendProcess ][Info ] external: POST /events 200 \”Go-http-client/1.1\” \”\
[12:48:26.340][ApiProxy ][Info ] cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: x509: certificate signed by unknown authority
のような感じで延々繰り返していることがわかります。
cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF
の場合もあります。
これを解決してみます。
手順
- Docker Desktop for Windows をアンインストール
- C:\Users\foo\.kube を削除
- Hyper-Vを無効化(OS再起動が要求されるので再起動します)
- C:\Windows\System32\drivers\etc\hosts に kubernetes.docker.internal を追加
127.0.0.1 kubernetes.docker.internal
- 管理者権限コマンドプロンプトにて
netsh int ipv4 add excludedportrange protocol=tcp startport=6443 numberofports=1
を行い、6443/tcpを予約 - Hyper-Vを有効化(OS再起動が要求されるので再起動します)
- 管理者権限コマンドプロンプトにて
netsh int ipv4 show excludedportrange protocol=tcp
を行い、6443/tcpが除外予約されていることを確認 - Docker Desktop for Windows をインストール
- Docker Desktop for Windows を起動し、必要な設定を行う
※この時点ではまだ Kubernetes を有効化しません - Proxy配下でない時は15.に
- Proxy配下の時は、GUI上にてProxy/noProxyとDNSを設定
- Docker Desktop for Windows を一旦終了
- Proxy配下の時は、C:\Users\foo\.docker\config.json にProxy/noProxyを設定
config.jsonの例
{ "auths": { "https://index.docker.io/v1/":{} }, "credsStore":"desktop", "proxies": { "default": { "httpProxy":"http://yourid%40yourdomain:yourpass@proxy-ip:proxy-port", "httpsProxy":"http://yourid%40yourdomain:yourpass@proxy-ip:proxy-port", "noProxy":"127.0.0.1,localhost,*.internal,*.local,your-docker-subnet/24" } }, "stackOrchestrator":"swarm" }
- Docker Desktop for Windows を起動
- ログの監視を開始
Get-Content C:\Users\foo\appdata\local\Docker\log.txt -wait -tail 0
- Kubernetes を有効化
- https://kubernetes.docker.internal:6443/api/v1/nodes:… が出続けますが、しばらくすると消えます
[10:12:29.091][GoBackendProcess ][Info ] adding tcp forward from 127.0.0.1:6443 to 127.0.0.1:6443 [10:12:29.098][LinuxWSL2Engine ][Info ] time="2020-07-31T01:12:29Z" level=info msg="adding tcp forward from 127.0.0.1:6443 to 127.0.0.1:6443" [10:12:29.098][GoBackendProcess ][Info ] external: POST /forwards/expose/port 200 \"Go-http-client/1.1\" \"\ [10:12:29.099][ApiProxy ][Info ] waiting for kube-system pods [10:12:29.100][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:12:29.100][ApiProxy ][Info ] waiting for node to be ready [10:12:29.100][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:12:30.129][ApiProxy ][Info ] cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF : : [10:13:56.923][ApiProxy ][Info ] Cluster is ready : : [10:13:56.924][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:13:56.924][ApiProxy ][Info ] waiting for system pods [10:13:56.924][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:13:59.945][ApiProxy ][Info ] 0/3 system pods running, found labels but still waiting for labels k8s-app=kube-dns, component=kube-controller-manager, component=kube-apiserver... : : [10:14:56.953][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:14:57.956][ApiProxy ][Info ] 3/3 system pods running [10:14:57.957][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:14:57.976][ApiProxy ][Info ] installing compose-on-kubernetes and storage-provisioner : : [10:15:00.870][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ [10:15:00.871][ApiProxy ][Info ] 0/2 system pods running, found labels but still waiting for labels component=storage-provisioner, component=vpnkit-controller... : : [10:15:12.064][GoBackendProcess ][Info ] internal: GET /forwards/list 200 \"Go-http-client/1.1\" \"\ [10:15:12.880][ApiProxy ][Info ] 2/2 system pods running [10:15:12.888][GoBackendProcess ][Info ] external: POST /events 200 \"Go-http-client/1.1\" \"\ : : [10:15:23.985][ApiProxy ][Info ] kubernetes is up and running
- GUI上の表示が ●Kubernetes running となったら、動作確認
C:\>kubectl get nodes NAME STATUS ROLES AGE VERSION docker-desktop Ready master 86m v1.16.6-beta.0
- \(^o^)/
以上です。