一, 按照官方文档说明安装minikube
二, 启动minikube
minikube start
实际上大部分国内直接启动会失败或者很慢,因为minikube默认拉取的是国外镜像仓库,实际上minikube也是支持使用阿里镜像仓库的
执行
minikube start --help|grep image-mirror-country -A 2
可以看到minikube要求我们将值设置为cn,如果去看minikube的代码,设置为
cn的时候会走阿里云镜像库
接着执行
minikube start --image-mirror-country=cn
启动过程中,大概率会卡启动过程中
打开另外一个终端,然后执行
minikube status
发现apiserver是没有启动起来的
进入minikube查看下日志
//进入minikube容器环境
minikube ssh
//查看kubelet
sudo journalctl -xeu kubelet
按官网journalctl命令,得到大量的node not found的日志,让人摸不着头脑
重新查看日志
//排除掉上面的日志的干扰,观察新增日志
sudo journalctl -exu kubelet -f |grep -v 'Error getting node'
首先会发现很多kubelet请求apiserverd的错误日志,这种日志也不是我们排查的重点,因为apiserver没有启动成功导致的,我们重心应该放在分析apiserver启动失败的原因上
发现pause这个镜像没有拉下来,如果对pause作用很熟悉,便可知道pause镜像启动不成功,pod是不可能启动的,那我们极大理由相信正是pause镜像导致了apiserver启动失败的
为什么minikube设置了阿里镜像仓库,但是pause还是拉取不到?
由于minikube是在主机的启动的kicbase的容器中再起k8s的,虽然minikube start的过程中指定了镜像仓库是阿里,但是这样只能让主机的kicbase镜像是从阿里云中拉取
但是kicbase容器中的pause还是从国外仓库拉取k8s的镜像
相对取巧的办法
//重新进入minikube运行环境
minikube ssh
//拉取阿里镜像
docker pull registry.aliyuncs.com/google_containers/pause:3.6
//重新打tag
docker tag registry.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
//退出minikube环境
exit
//重新查看minikube状态
minikube status
从status看出,所有组件都运行成功了,但是kubectl的上下文不对,可能导致执行kubectl无法操作集群
更新kubectl上下文,并测试获取pod
//更新上下文
minikube update-context
//重新检查minikube状态
minikube status
//获取集群所有pod
kubectl get pod --all-namespaces