Skip to main content

Deploy/Develop with Kind

Kind is a convenient tool for quickly deploying kubernetes cluster locally. We can use kind to create an istio cluster and deploy kmesh.

Deploy Kmesh in Kind​

Let's start from setting up the required environment. You can follow the steps below:

Install kind​

Installing kind is very simple, because it's just a binary file. You can select the correct one according to the version and the architecture in the github releases page. Take linux + amd64 as example:

wget -O kind https://github.com/kubernetes-sigs/kind/releases/download/v0.23.0/kind-linux-amd64
chmod +x kind
mv kind /usr/bin/

Create Kubernetes cluster using kind​

You can take reference from the istio official document.

If you want to specified multiple workers or node image, you can:

kind create cluster --image=kindest/node:v1.30.0 --config=- <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ambient
nodes:
- role: control-plane
- role: worker
- role: worker
EOF

Install istioctl​

ISTIO_VERSION="1.24.0" # If you wish to use the Waypoint feature, the Istio version should be 1.23 ~ 1.25.

curl -L https://istio.io/downloadIstio | ISTIO_VERSION="${ISTIO_VERSION}" sh - && \
cd "istio-${ISTIO_VERSION}/bin" && \
chmod +x istioctl && \
mv istioctl /usr/bin/
note

If you want to use the Waypoint feature, the istio version should not be higher than 1.25

Install istio components using istioctl​

istioctl install

If you want to use Kmesh in Dual Engine Mode, you should deploy istio in ambient mode, by adding an extra flag:

istioctl install --set profile=ambient

Install kubectl​

Please follow the official guide: Install and Set Up kubectl on Linux.

Deploy Kmesh​

Now, you are ready to deploy Kmesh in your local cluster. Feel free to follow the Kmesh Quick Start.

Develop Kmesh in Kind​

You can follow the steps below to develop in kind:

Build your code and docker image locally​

make docker

This will start a docker container named kmesh-build to build your code. Then, it will build the corresponding docker image.

You can also do this separately:

Build your code locally​

make build

Build your docker image locally​

docker build --build-arg arch=amd64 -f build/docker/dockerfile -t $image_name .

You should specify the image_name.

Load the image to each cluster node​

kind load docker-image $image_name --name $cluster_name

You should specify the image_name and cluster_name.

Edit the Kmesh daemonset​

Kmesh daemons are run as kubernetes Daemonset. You should modify the config of the daemonset, triggering a re-deployment.

kubectl edit ds kmesh -n kmesh-system

This will open an editor, you can modify the image here.

You can check whether the Kmesh daemons are all running by:

kubectl get po -n kmesh-system -w

Check logs​

You can check the logs of a Kmesh daemon by:

kubectl logs $kmesh_pod_name -n kmesh-system

kmesh_pod_name is the name of a specified Kmesh pod.

You can change the logger level by:

kubectl exec -it $kmesh_pod_name -n kmesh-system -- kmesh-daemon log --set default:debug

Specially, for bpf logs:

kubectl exec -it $kmesh_pod_name -n kmesh-system -- kmesh-daemon log --set bpf:debug

You can use uname -r to check your kernel version. If it's higher than 5.13.0, the bpf logs will be pushed to the user space. We can check them in the log file (with subsys=ebpf). Otherwise, you should use bpftool to check them:

bpftool prog tracelog

Cleanup​

The build process will modify some config-related files, if you want to push your code to github, please use:

make clean

to cleanup these changes before you execute git add command.

Reference​