Ubuntu上基于minikube的k8s环境搭建

573 阅读4分钟

系统环境

首选ubuntu,当然其他linux发行版都可以,安装Desktop或者Server版本的也都可以。minikube自带一个dashboard,可在系统的浏览器中检测k8s的运行情况,在学习的环境中建议使用Desktop版本的Ubuntu。由于Ubuntu18是目前适配最完整的,因此Ubuntu版本选择18。

minikube的安装

Docker安装

minikube的原理由上图,它是在一个虚拟机中运行了一个单机的k8s集群,而要安装的Docker就是为minikube提供这个虚拟机。如果是在物理机上安装的Ubuntu,则虚拟机可以选择virtualbox,但如果是在虚拟机中安装的Ubuntu,则不再可以使用virtualbox作为虚拟机了。

Docker的安装在Ubuntu上使用apt软件包管理工具。安装好Ubuntu系统后,先用

sudo apt-get update
sudo apt-get upgrade

先把apt的所有源和已安装包更新一下,然后再用sudo apt-get install docker.io -y安装Docker。Docker安装好后可以用命令docker version检测一下是否安装成功,或者用网上现成的镜像部署一下也能进行测试。由于某些原因,很多镜像或资源都访问不到或者下载龟速,因此可以使用阿里云的Docker镜像。使用使用方式是:在阿里云上找到自己的镜像url,然后写到/etc/docker/daemon.json文件中

{
    "registry-mirrors":["https://xxx"]
}

配置好daemon.json文件后还需要重启一下docker

sudo systemctl daemon-reload    
sudo systemctl restart docker

Minikube下载与安装

使用curl从minikuber的官方链接下载,注意版本号,不要用最新的,最好就用1.24.0这个版本,这个版本的minikube是受阿里云镜像的原生支持的,也就是说这个版本的minikube源码中就已经内嵌了阿里云镜像,只需要在启动minikube的时候指定区域就能直接使用阿里云镜像了。

sudo curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.24.0/minikube-linux-amd64
sudo chmod +x minikube
sudo cp minikube /usr/local/bin/

上面的shell第一行是将minikube下载到本地,第二行是给minikube文件可执行的权限,第三行是将minikube可执行文件copy到/usr/local/bin目录下,这样就可以在任意路径下使用shell执行minikube程序了。

到这里minikube实际上就已经安装好了,然而要使用minikube还需要创建集群,minikube官网推荐使用默认启动命令minikube start,但是由于国内的网络环境,我们还是需要通过一些代理和镜像来安装minikube的初始化。最后我们需要执行的命令为:

minikube start --image-mirror-country='cn' --registry-mirror=https://xxx

不出意外的话上面的命令执行后马上就要报错,说无权限连接docker,这是因为minikube没有在docker的用户组里。在报错的解释说明中已经给出了解决方案:

sudo usermod -aG docker $USER && newgrp docker

执行上面的shell后再次把上面的minikube start执行一次就能成功地初始化minikube,然后用minikube status命令查看一下minikube的运行状态,如果其是running状态,就表明minikube已经正确运行起来了。前面说到minikube自带了web端的k8s监控程序,只需要使用命令minikube dashboard就可用系统默认的浏览器打开k8s的监控网页系统。

kubectl的安装

由于apt默认没有kubectl的源,因此要使用apt安装kubectl还需要手动添加kubectl的源。然而Ubuntu18自带另一个包管理工具snap,这个snap是自带有kubectl的源的,因此用snap安装kubectl更简单快捷,只需要一行命令

sudo snap install kubectl --classic

部署第一个服务

这里选择部署一个tomcat的web服务

首先创建一个部署,将其部署到8080端口,注意这里不是我们能访问到的端口,而只是这个tomcat在pod中用的端口

kubectl create deployment tomcat8 --image=tomcat:8.0 --port=8080

创建好部署后,k8s会为这个部署新建pod

kubectl get pods

将能看到tomcat8的pod,刚部署完看到tomcat8的pod还在创建容器的状态,稍等一会将会变成running状态。但此时tomcat8实际上是被部署在虚拟机中的,外部网络实际上是访问不到的,因此我们还需要将tomcat的端口向外暴露并创建一个服务

kubectl expose deployment tomcat8 --type=NodePort

通过k8s的expose命令,我们给tomcat8这个deployment创建了服务并以NodePort的方式暴露网络端口,我们也可以指定port,用--port参数,如果未指定,将随机使用一个端口。

此时实际上我们就已经通过http协议可以访问到tomcat8的web服务了,但此时实际上我们还不知道ip:port,可以使用 sudo minikube service tomcat8 --url命令查看tomcat8的url访问方式,这个命令的返回值是tomcat8这个service的http url,我们在Ubuntu中就可以用浏览器访问到tomcat的首页了。并且我们能够发现,实际上访问tomcat8的ip就是运行k8s的虚拟机的ip