最近在参与社区flink-operator的开发,开发的过程中经常使用到minikube来本地验证这篇文章记录下相关使用

安装

https://minikube.sigs.k8s.io/docs/start/ 需要先安装docker环境

登录节点

  1. minikube ssh

调整资源

启动pod超时
Warning FailedScheduling 23s (x2 over 91s) default-scheduler 0/1 nodes are available: 1 Insufficient memory.

直接命令行设置资源

  1. minikube start --cpus 4 --memory 8G
  1. minikube config set cpus N
  2. minikube config set memory N

要先删除,否则重启后node还是不变,调整资源后可能需要相应的docker容器也进行调整
https://github.com/eclipse/che/issues/14067

  1. minikube delete
  2. minikube stop
  3. minikube start --cpus 4 --memory 8G
  4. kubectl describe node minikube

拷贝文件

https://minikube.sigs.k8s.io/docs/commands/cp/
本机和minikube node以及node之间都可以拷贝文件

  1. minikube cp ~/TopSpeedWindowing.jar minikube:/tmp/flink/userlib/TopSpeedWindowing.jar

加载镜像

load之前要先把使用镜像的pod停止,否则镜像还在被使用

  1. minikube image load aitozi/flink-java-operator:latest

可以minikube ssh之后查看镜像id和本地是否一致,这样可以加快debug流程.

使用问题

删除crd失败

第一步首先要删除所有相关的cr,删除cr也卡住
Minikube使用文档 - 图1
通过将finalizer置空删除

  1. kubectl get flinkdep basic-checkpoint-ha-example -o=json | \
  2. jq '.metadata.finalizers = null' | kubectl apply -f -

这样apply之后就能删除了, cr和crd也可以正常删除了

load 镜像不生效

在使用过程中遇到如果minikube 节点的node本地磁盘打满了,此时load镜像不会报错,但是load镜像是不生效的,应该算是个bug吧,需要load完镜像检查一下

Mac无法访问minikube ip

默认使用的是docker driver,但是Mac docker desktop不会创建docker0网桥,所以无法ping通minikube node ip。可以使用vm的方式启动minikube
https://github.com/kubernetes/minikube/issues/11193
https://stackoverflow.com/questions/63600378/cant-access-minikube-service-using-nodeport-from-host-on-mac
https://docs.docker.com/desktop/mac/networking/#known-limitations-use-cases-and-workarounds

测试不同域名的k8s集群访问情况

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: busybox-sleep
  5. spec:
  6. containers:
  7. - name: busybox
  8. image: busybox
  9. args:
  10. - sleep
  11. - "1000000"
  12. - name: hello-minikubi
  13. image: k8s.gcr.io/echoserver:1.4
  1. minikube ssh
  2. docker ps
  3. docker exec -it 92de341e7767 /bin/sh

测试LoadBalancer和NodePort

  1. kubectl expose deployment hello-minikube --type=LoadBalancer --port=8080
  2. kubectl expose deployment hello-minikube --type=ClusterIP --cluster-ip='None' --port=8080