k8s开发(一) k8s本地环境搭建-minikube

723 阅读2分钟

一, 按照官方文档说明安装minikube

image.png

二, 启动minikube

minikube start

实际上大部分国内直接启动会失败或者很慢,因为minikube默认拉取的是国外镜像仓库,实际上minikube也是支持使用阿里镜像仓库的

执行

minikube start --help|grep image-mirror-country -A 2

image.png 可以看到minikube要求我们将值设置为cn,如果去看minikube的代码,设置为cn的时候会走阿里云镜像库

接着执行

minikube start --image-mirror-country=cn

启动过程中,大概率会卡启动过程中

image.png

打开另外一个终端,然后执行

minikube status

image.png

发现apiserver是没有启动起来的

进入minikube查看下日志

//进入minikube容器环境
minikube ssh

//查看kubelet
sudo journalctl -xeu kubelet 

image.png

按官网journalctl命令,得到大量的node not found的日志,让人摸不着头脑

重新查看日志

//排除掉上面的日志的干扰,观察新增日志
sudo journalctl -exu kubelet -f |grep -v 'Error getting node'

image.png

首先会发现很多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

image.png

从status看出,所有组件都运行成功了,但是kubectl的上下文不对,可能导致执行kubectl无法操作集群

更新kubectl上下文,并测试获取pod

//更新上下文
minikube update-context

//重新检查minikube状态
minikube status

//获取集群所有pod
kubectl get pod --all-namespaces

image.png