8.6 KiB
Enable Kubernetes on Docker Desktop for Mac/Windows in China
中文 | English
NOTE:
- The master branch is tested with Docker Desktop for Mac/Windows version 4.33.0 (with Docker 27.1.1 and Kubernetes v1.30.2).
- If you want to use with other version, pls check version of Kubernetes,Docker -> About Docker Desktop
- For Kubernetes v1.30.2, please use the v1.30.2 branch
git checkout v1.30.2
- For Kubernetes v1.29.2, please use the v1.29.2 branch
git checkout v1.29.2
- For Kubernetes v1.29.1, please use the v1.29.1 branch
git checkout v1.29.1
- For Kubernetes v1.28.2, please use the v1.28.2 branch
git checkout v1.28.2
- For Kubernetes v1.27.2, please use the v1.27.2 branch
git checkout v1.27.2
- For Kubernetes v1.25.9, please use the v1.25.9 branch
git checkout v1.25.9
- For Kubernetes v1.25.4, please use the v1.25.4 branch
git checkout v1.25.4
- For Kubernetes v1.25.2, please use the v1.25.2 branch
git checkout v1.25.2
- For Kubernetes v1.25.0, please use the v1.25.0 branch
git checkout v1.25.0
- For Kubernetes v1.24.2, please use the v1.24.2 branch
git checkout v1.24.2
- For Kubernetes v1.30.2, please use the v1.30.2 branch
Enable Kubernetes on Docker Desktop
Config the CPU and memory for Kubernetes, 4GB RAM or more is suggested.
Preload Kubernetes images form Alibaba Cloud Registry Service, NOTE: you can modify the images.properties
for your own images
On Mac, execute the following scripts
./load_images.sh
Or on Windows, execute the following scripts in PowerShell
.\load_images.ps1
NOTE: if you failed to start PowerShell scripts for security policy, please execute Set-ExecutionPolicy RemoteSigned
command in PowerShell with "Run as administrator" option.
Enable Kubernetes, and wait a while for Kubernetes is running
TIPS:
On Mac:
If facing problems when deploy Kubernetes, you can check ocker desktop application's log to get realtime log:
pred='process matches ".*(ocker|vpnkit).*"
|| (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"
On Windows:
If facing problems when deploy Kubernetes, you can check docker log in C:\ProgramData\DockerDesktop\service.txt, check Kuberneteslog in C:\Users\yourUserName\AppData\Local\Docker\log.txt
problem diagnosis:
If you see Kubernetes stuck in Starting, please refer:
- Issue 3769(comment) or Issue 3649(comment)
- On MacOS, execute
rm -fr '~/Library/Group\ Containers/group.com.docker/pki'
- On Windows, delete folders 'C:\ProgramData\DockerDesktop\pki' and 'C:\Users\yourUserName\AppData\Local\Docker\pki'
- On MacOS, execute
- Issue 1962(comment)
Config Kubernetes
Optional: switch the context to docker-desktop
(In the former version, the context is docker-for-desktop
)
kubectl config use-context docker-desktop
Verify Kubernetes installation
kubectl cluster-info
kubectl get nodes
Deploy Kubernetes dashboard
Install Kubernetes dashboard
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
or
kubectl apply -f kubernetes-dashboard.yaml
Check Kubernetes Dashboard status
kubectl get pod -n kubernetes-dashboard
Start proxy for API server
kubectl proxy
Access Kubernetes dashboard
Config Token for dashboard
Authorize kube-system
default service account
kubectl apply -f kube-system-default.yaml
For Mac
TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
For Windows
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
Login dashboard
Choose Token, and input the output from above result
Or, choose Kubeconfig, select file from below path:
Win: %UserProfile%\.kube\config
Mac: $HOME/.kube/config
Click login, go to Kubernetes Dashboard
Config Ingress
Note: If you are testing Istio, donot need to install Ingress
Install Ingress
- If the installation script cannot be installed, you can jump to this address to view the latest operations
Install
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
Or
kubectl apply -f ingress-nginx-controller.yaml
Check
kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx
Test the sample app
Deploy the test application, see Community Article for details
kubectl create -f sample/apple.yaml
kubectl create -f sample/banana.yaml
kubectl create -f sample/ingress.yaml
Test the sample app
$ curl -kL http://localhost/apple
apple
$ curl -kL http://localhost/banana
banana
Remove the sample app
kubectl delete -f sample/apple.yaml
kubectl delete -f sample/banana.yaml
kubectl delete -f sample/ingress.yaml
Delete Ingress
kubectl delete -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
Or
kubectl delete -f ingress-nginx-controller.yaml
Install Helm
Install helm following the instruction on https://helm.sh/docs/intro/install/
For Mac OS
# Use homebrew on Mac
brew install helm
# add helm repo
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
# update charts repo
helm repo update
For Windows
# Use Chocolatey on Windows
# NOTE: please ensure you can access googleapis
choco install kubernetes-helm
# add helm repo
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
# update charts repo
helm repo update
Setup Istio
More details can be found in https://istio.io/docs/setup/getting-started/
Download Istio 1.5.0 and install CLI
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.0 sh -
cd istio-1.5.0/
export PATH=$PWD/bin:$PATH
In Windows, you can download the Istio manually, or copy getLatestIstio.ps1
to your Istio directory, and execute the script.
NOTE: It refer the scripts from community.
.\getLatestIstio.ps1
Install Istio
istioctl manifest apply --set profile=demo
Check status of istio release
kubectl get pods -n istio-system
Enable automatic sidecar injection for default
namespace
kubectl label namespace default istio-injection=enabled
kubectl get namespace -L istio-injection
Install Book Info sample
Please refer https://istio.io/docs/examples/bookinfo/
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Check the resources of sample application
kubectl get svc,pod
Confirm the application is running
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
Create Ingress Gateway
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Check Gateway status
kubectl get gateway
Confirm the application is accessible
export GATEWAY_URL=localhost:80
curl -s http://${GATEWAY_URL}/productpage | grep -o "<title>.*</title>"
Open with browser http://localhost/productpage
Confirm application is running
export GATEWAY_URL=localhost:80
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Cleanup sample application
samples/bookinfo/platform/kube/cleanup.sh
Delete Istio
istioctl manifest generate --set profile=demo | kubectl delete -f -