k8s初游: minikube启动docker镜像

minikube搭建集群

minikube是k8s新推出的快速搭建单节点的工具,详细介绍见github地址。 对于我初想尝试k8s的人来说,这个minikube搭建非常简单。

curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.7.1/minikube-linux-amd64&&chmod +x minikube&&sudo mv minikube /usr/local/bin/

Linux下通过上述就可以安装好minikube工具。启动集群则使用minkube start.

生成kubectl程序

而kubectl,我是直接编译k8s源码生成的。

1.下载最新源码 git clone https://github.com/kubernetes/kubernetes.git

2.执行make

3. 在生成的_output目录中就能找到kubectl程序

创建pod资源

1.编写一个private-image-test-1.yaml文件,

k8s初游: minikube启动docker镜像_第1张图片

2.执行kubectl create -f private-image-test-1.yaml

  k8s将会创建一个pod,该pod中存在一个使用了busybox:latest镜像的容器。

问题

 然而并没有这么的顺利。创建后查看Pod的状态,会发现pod一直处于ContainerCreating状态,容器无法正常启动。

 1. 一开始我还以为是因为k8s不会自动从docker hub上拉取busybox镜像,直接在host上拉取了最新的busybox镜像。尝试后失败。

 2. 查阅了资料后,发现minikube实际上利用virtual box启动了一个虚拟机,遂产生怀疑是不是因为虚拟机没有拉取busybox镜像,通过

minikube ssh 连接进虚拟机中,拉取了最新的镜像。尝试后仍然失败。

3. 找到问题原因:  最终通过kubectl describe pods test,会发现以下的错误提示:

  因为GFW的问题,拉取gcr.io/google_containers/pause-amd64:3.0镜像失败导致的。可以查看以下在github上的讨论

                       https://github.com/kubernetes/kubernetes/issues/7090

                       https://github.com/kubernetes/kubernetes/issues/6888

                       https://github.com/kubernetes/kubernetes/issues/26873

第三个讨论提到了一个解决方法是修改pod-infra-container-image参数,但是基于kubelet工具的,在minikube上并没有这个参数。

我向k8s minikube研发人员提出了这个疑问,按照他们的说法,目前版本的minikube确实不支持这个参数,这是minikube在后续版本里需要添加的新特性。

                     https://github.com/kubernetes/minikube/issues/473

临时解决方法:

1. 想办法在一台机器上拉取gcr.io/google_containers/pause-amd64:3.0

2. 拉取成功后在通过打tag推送到私有仓库中

3. minikube ssh登录到minikube节点中

4. docker login , docker pull镜像后,重新tag成gcr.io/google_containers/pause-amd64:3.0

之后就能正常启动这个test pod了。

你可能感兴趣的:(k8s初游: minikube启动docker镜像)