kind 是基于 docker 的,那么我们再来看下 docker 资源,来验证一下是否真的是基于 docker 的?
# 本机执行,就会提示有个docker容器正在运行,可以看到 docker 里有一个 container,而 kind 创建的集群就是基于这个 container 的,如果你直接删掉了这个 container,通过 kind 创建的 k8s 集群也会有问题 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2e0a5e15a4a0 kindest/node:v1.18.2 "/usr/local/bin/entr…" 14 minutes ago Up 14 minutes 45319/tcp, 127.0.0.1:45319->6443/tcp test-control-plane再来看一下 network,运行 docker network ls,可以看到有一个名称为 kind 的 network。
docker network ls NETWORK ID NAME DRIVER SCOPE 94de31154cb7 bridge bridge local 0c31de104d44 host host local a667b873436d kind bridge local 6083dbc308a4 none null local我们可以进一步探究 kind-control-plane(就是上面的 docker container)
通过 docker exec kind-control-plane crictl ps 获取这个容器内部的运行容器列表,这个容器内部通过 crictl 来操作容器,可以参考 https://github.com/kubernetes-sigs/cri-tools,crtctl 主要用来管理容器,命令使用和docker命令是一样,可以通过 docker exec kind-control-plane crictl help 帮助查看命令使用方法。
# master 节点 docker exec kind-ha-control-plane crictl ps CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID 4b62cd954c86a ace0a8c17ba90 18 minutes ago Running kube-controller-manager 3 8f000bb1c20f3 90552a29c50d9 db10073a6f829 19 minutes ago Running local-path-provisioner 8 7e648bc7297b1 268f41443c426 a3099161e1375 19 minutes ago Running kube-scheduler 4 a64377f98d627 aa3fea2edc80d 67da37a9a360e 3 hours ago Running coredns 0 719884414c5f4 04c58978f5395 67da37a9a360e 3 hours ago Running coredns 0 da6e08629ac71 110429a5a873b 2186a1a396deb 3 hours ago Running kindnet-cni 0 5359903320ef9 1c125b02f6300 0d40868643c69 3 hours ago Running kube-proxy 0 9ba4d0a1fdd3d 0301cd4d26d9c 6ed75ad404bdd 3 hours ago Running kube-apiserver 0 4905e2b2a8a1a 435ee12a45bff 303ce5db0e90d 3 hours ago Running etcd 0 96f4e9190bede # worker节点 docker exec kind-ha-worker crictl ps CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID 5e82bf4756b6f bfba26ca350c1 21 minutes ago Running nginx 0 78d1324b8b1a1 ea02b20040341 0d40868643c69 3 hours ago Running kube-proxy 0 de6a57d0b7381 c2aa986df532f 2186a1a396deb 3 hours ago Running kindnet-cni 1 ebea7a329cfe0获取 k8s 集群所有资源示例
kubectl get all --all-namespaces获取集群外部的config配置配置文件
kind get kubeconfig --name kind-ha获取集群内部的config配置配置文件(一般获取外部就够用了)
kind get kubeconfig --internal --name kind-ha删除集群(清理很方便)
kind delete cluster --name test挂载文件
nodes: - role: control-plane extraMounts: - containerPath: /etc/docker/daemon.json hostPath: /etc/docker/daemon.json readOnly: true暴露端口方法1
nodes: - role: control-plane extraPortMappings: - containerPort: 30080 hostPort: 30080有时候我们想暴露svc的端口给外部访问,因为kubernetes的节点是在docker容器中,所以还需要容器暴露svc的端口,外部才能通过宿主机访问。
暴露端口方法2
# 使用端口转发的方式 kubectl port-forward --address 0.0.0.0 pod/nginx 8080:80