You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
k8s-for-docker-desktop/README_en.md

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 KubernetesDocker -> About Docker Desktop about
    • 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

Enable Kubernetes on Docker Desktop

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 -