使用minikube在Ubuntu上搭建一个单机版的k8s

  为了方便在本地进行k8s的学习,我尝试在Ubuntu虚拟机中用minikube搭建了一个单机版的k8s,踩了一些坑才更加领悟到官方文档的重要性,下面就来梳理一下部署流程,以及一些踩坑经验。(注:图片均来自我的微信公众号)

环境介绍:

        Ubuntu 17.10

        kubectl v1.15.0

        minikube v1.2.0

        docker 18.09.7

      (注:在minikube启动过程中会自动安装k8s)

   任务描述:在Ubuntu虚拟机上,不使用virtualbox,通过minikube搭建一个单机版的k8s。

    成功标志:实现github上给出的minikube的quick start(如下图) 

根据官方文档:

我们可以看到,在安装minikube之前,首先需要安装kubectl,那我们就来装一下:

    在terminal中依次输入:

    1.首先下载最新版本的kubectl二进制文件:

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

    2.然后让kubectl的二进制文件可执行:

chmod +x ./kubectl

    3.将kubectl的可执行文件放到/usr/local/bin(这个路径专门用来存储用户自己的可执行文件):


sudo mv ./kubectl /usr/local/bin/kubectl

    4.查看kubectl版本,检查是否安装成功:

kubectl version -o json

    kubectl的安装结果:

(注:这个结果是minikube跑起来后的,在minikube跑起来前如果查看kubectl版本,可能会出现:The connection to the server <server-name:port> was refused - did you specify the right host or port?这样的报错,这个我们不需要管,因为官方文档上给出了明确的提示:

    ok,现在kubectl已经安装完成,下面开始安装minikube:

    起初,我是安装官网给的url下载minikube的,但是在运行minikube的时候,卡在了这里:

    报错信息告诉我们,发生了下载错误,显然,下载的地址被墙了......,我们有两个选择,第一个就是“科学上网”,第二个是直接用阿里云提供的修改版的minikube,这个修改版会从国内获取镜像。

    我们直接来用这个修改版,在terminal中依次输入:

    1.首先,先将之前crash的minikube删掉:

minikube delete

    2.下载minikube的修改版的二进制:

curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.2.0/minikube-linux-amd64

    3.让minikube的二进制可执行:

chmod +x minikube

    4.将minikube的可执行文件放到/usr/local/bin/,类似于之前的kubectl

sudo mv minikube /usr/local/bin/

   现在,我们的kubectl和minikube都已经安装好了,下面,直接运行mininkube,来创建一个单机版的k8s:

    在terminal中输入:

minikube start --registry-mirror=https://registry.docker-cn.com --vm-driver=none

    (其中的--registry-mirror=https://registry.docker-cn.com指定了镜像仓库的位置,--vm-driver=none指定了以none模式安装)

    安装过程如下:

    我们可以看到,这个minikube做了这么几件事:

    1.使用指定的镜像仓库;

    2.创建一个虚拟机(由于我选的是none模式,所以直接用的宿主机);

    3.检查本机的docker环境,进行相应的环境配置(我的理解是:为本机的docker版本,选择对应版本的k8s、kubeadm、kubelet);

    4.拉取基本镜像,我们不妨来看一下,minikube启动成功后,本地多了什么镜像:

    可见,这几个镜像都是搭建k8s所必须的镜像,而minikube则是封装了获取这些镜像,并启动对应容器的操作。

    5.启动k8s,检查并配置本地环境;

    6.校对apiserver、proxy、etcd、scheduler、controller、dns;

    现在,我们来测试一下minikube在github上给出的quick start:

    1.启动dashboard:


minikube dashboard

    可以成功在浏览器打开minikube给出的地址

    2.启动一个server(这里我用的镜像是Tomcat):

kubectl run hello-minikube --image=tomcat:8.0 --port=8080

    创建成功

    3.发布这个服务:

kubectl expose deployment hello-minikube --type=NodePort

    服务发布成功

    查看dashboard:

    可以发现,已经启动了一个pod,并且,服务对外暴露的端口为32199,我们试着在虚拟机外的宿主机对这个ip和端口进行访问:

    可以看到汤姆猫成功的出现,ok,这个Tomcat服务成功的在minikube部署的k8s上对外发布成功,任务完成!

    补充一下,在用minikube搭建的过程中,遇到了一些坑,下面说一下解决方法:

    1.在minikube start --registry-mirror=https://registry.docker-cn.com --vm-driver=none的时候,报错:

    这个问题我在https://github.com/kubernetes/minikube/issues/4287这里找到了解决方法,即在terminal中输入:

minikube config set embed-certs true

    修改后,我们可以通过:minikube config view检查“embed-certs”的状态是否被修改为true

   2.同样是在在minikube start --registry-mirror=https://registry.docker-cn.com --vm-driver=none的时候,报错:

 https://github.com/kubernetes/minikube/blob/master/docs/vmdriver-none.md(我在这里得到了解决方法)

    在terminal中输入:

export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
export KUBECONFIG=$HOME/.kube/config

mkdir -p $HOME/.kube $HOME/.minikube
touch $KUBECONFIG

    然后再启动minikube即可。

发布了28 篇原创文章 · 获赞 6 · 访问量 2467

猜你喜欢

转载自blog.csdn.net/Kobe_1314/article/details/97124856