Kubernetes

Kind 搭建 K8S 应用本地开发调试环境

1. 1. Deploy local k8s cluster via kind (kubernetes in docker).

# 安装包允许 apt-get 通过 https 使用仓库
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 添加 GPG key
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 设置 docker 稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新 apt 源
sudo apt update

# 安装 Docker
sudo apt install -y docker.io

docker --version
  • Installation kind
# Way1:
sudo curl -OL https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-linux-amd64
# or
sudo curl -L -o /bin/kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
sudo chmod +x /bin/kind

# Way2:
git clone https://github.com/kubernetes-sigs/kind
cd kind && make

kind version
kind v0.11.1 go1.16.4 linux/amd64
  • Create local k8s cluster
cat > kind.yaml << EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "10.0.0.150" # TODO: setting your apiserver address
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["registry.aliyuncs.com/google_containers"]
EOF
kind create cluster --name kind-k8s-cluster1 --image docker.io/kindest/node:v1.21.1 --config kind.yaml

## If pulling the image is too slow, please try to manually pull or import.
#docker pull docker.io/kindest/node:v1.21.1

1.2 Configuration on remote management.

Allow to manage kind k8s cluster with remote.

  • Create apiserver pod forward tunnel. (on kind k8s cluster node)
kubectl port-forward pods/kube-apiserver-kind-k8s-cluster1-control-plane --address=0.0.0.0 8443:8443 -n kube-system
  • Copy kind kubeconfig to remote manage PC node.
# backup old local kubeconfig
mv $HOME/.kube/ $HOME/.kube.bak
scp -r root@10.0.0.150:/root/.kube/ .
  • Testing remote manage for k8s cluster.
kubectl get po -A

NAMESPACE            NAME                                                    READY   STATUS    RESTARTS   AGE
kube-system          coredns-558bd4d5db-bblzl                                1/1     Running   0          7m33s
kube-system          coredns-558bd4d5db-nw6dw                                1/1     Running   0          7m33s
kube-system          etcd-kind-k8s-cluster1-control-plane                      1/1     Running   0          7m43s
kube-system          kindnet-rhr28                                           1/1     Running   0          7m34s
kube-system          kube-apiserver-kind-k8s-cluster1-control-plane            1/1     Running   0          7m43s
kube-system          kube-controller-manager-kind-k8s-cluster1-control-plane   1/1     Running   0          7m43s
kube-system          kube-proxy-9kfll                                        1/1     Running   0          7m34s
kube-system          kube-scheduler-kind-k8s-cluster1-control-plane            1/1     Running   0          7m43s
local-path-storage   local-path-provisioner-85494db59d-5sjzt                 1/1     Running   0          7m33s

1.3 Debugging for etcd

# enter kind etcd pod.
kubectl exec -ti -n kube-system etcd-kind-k8s-cluster1-control-plane -- sh

# example get etcd data for /.
export ETCDCTL_API=3
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get / --prefix --keys-only

# example get pods.
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get /registry/pods --prefix

2. FAQ

2.1 Can't find the containers of the pods started by kind use docker ps ?

  • 执行kind create cluster 创建的集群是基于 docker ,可使用ps -ef | grep -E 'containerd$来验证,会输出2个不同的进程,其中进程号等于systemctl status containerd则就是您在宿主机上安装的,另外 kind 是在伪节点容器(kind-k8s-cluster1-control-plane)内嵌启动的 containerd 进程,这点与 minikube 类似(当--driver=docker时是基于内嵌启动的 dockerd)。

  • 解决方案: 执行 docker exec kind-k8s-cluster1-control-plane crictl ps ,即可查看到 kind 运行的容器列表。

2.2 How to configure command line short aliases?

  • curl -L -o /etc/profile.d/profile-aliases-k8s.sh 'https://gitee.com/wl4g/xcloud-blogs/raw/master/articles/kubernetes/k8s-app-local-devel-by-kind/script/profile-aliases-k8s.sh' && . /etc/profile

留言

您的电子邮箱地址不会被公开。