Skip to content

Latest commit

 

History

History
388 lines (260 loc) · 10.6 KB

README_en.md

File metadata and controls

388 lines (260 loc) · 10.6 KB

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.27.0 (with Docker 25.0.1 and Kubernetes v1.29.1).
  • If you want to use with other version, pls check version of Kubernetes,Docker -> About Docker Desktop about
    • 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.24.0, please use the v1.24.0 branch git checkout v1.24.0
    • For Kubernetes v1.23.4, please use the v1.23.4 branch git checkout v1.23.4
    • For Kubernetes v1.22.5, please use the v1.22.5 branch git checkout v1.22.5
    • For Kubernetes v1.22.4, please use the v1.22.4 branch git checkout v1.22.4
    • For Kubernetes v1.21.4, please use the v1.21.1 branch git checkout v1.21.5
    • For Kubernetes v1.21.4, please use the v1.21.1 branch git checkout v1.21.4
    • For Kubernetes v1.21.3, please use the v1.21.1 branch git checkout v1.21.3
    • For Kubernetes v1.21.2, please use the v1.21.1 branch git checkout v1.21.2
    • For Kubernetes v1.21.1, please use the v1.21.1 branch git checkout v1.21.1
    • For Kubernetes v1.19.3, please use the v1.19.3 branch git checkout v1.19.3
    • For Kubernetes v1.19.2, please use the v1.19.2 branch git checkout v1.19.2
    • For Kubernetes v1.18.8, please use the v1.18.8 branch git checkout v1.18.8
    • For Kubernetes v1.18.6, please use the v1.18.6 branch git checkout v1.18.6
    • For Kubernetes v1.18.3, please use the v1.18.3 branch git checkout v1.18.3
    • For Kubernetes v1.16.5, please use the v1.16.5 branch git checkout v1.16.5
    • For Kubernetes v1.15.5, please use the v1.15.5 branch git checkout v1.15.5
    • For Kubernetes v1.15.4, please use the v1.15.4 branch git checkout v1.15.4
    • For Kubernetes v1.14.8, please use the v1.14.8 branch git checkout v1.14.8
    • For Kubernetes v1.14.7, please use the v1.14.7 branch git checkout v1.14.7
    • For Kubernetes v1.14.6, please use the v1.14.6 branch git checkout v1.14.6
    • For Kubernetes v1.14.3, please use the v1.14.3 branch git checkout v1.14.3
    • For Kubernetes v1.14.1, please use the v1.14.1 branch git checkout v1.14.1
    • For Kubernetes v1.13.0, please use the v1.13.0 branch git checkout v1.13.0
    • For Kubernetes v1.10.11, please use the v1.10.11 branch git checkout v1.10.11

Enable Kubernetes on Docker Desktop

Config registry mirror for Docker daemon with https://docker.mirrors.ustc.edu.cn only if in China

mirror

Optional: config the CPU and memory for Kubernetes, 4GB RAM or more is suggested.

resource

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

k8s

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:

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

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

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

resource

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

Installation Notes

- 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 -