[TOC]
背景
Kubernetes是Google推出的容器编排工具,这是Google保密十几年的强大武器Borg的开源版本。Kubernetes这个名字源于古希腊,意思是舵手。既然docker被比喻成大海上驮着集装箱的鲸鱼,那么Kubernetes就是舵手,掌握鲸鱼的游弋方向,寓意深刻。
Kubernetes第一个正式版本于2015年7月发布。从Kubernetes 1.3开始提供了一个叫Minikube
的强大测试工具,可以在主流操作系统平台(win、os、linux)上运行单节点的小型集群,这个工具默认安装和配置了一个Linux VM,Docker和Kubernetes的相关组件,并且提供Dashboard。
本篇主要介绍Ubuntu平台上部署Minikube。Minikube利用本地虚拟机环境部署Kubernetes,其基本架构如下图所示。 Minitube项目地址:https://github.com/kubernetes/minikube
第一部分 准备
Minikube在OS X和Windows上部署需要安装虚拟机实现(用虚拟机来初始化Kubernetes环境),但是Linux例外可以使用自己的环境。参见:https://github.com/kubernetes/minikube#quickstart
1.1 准备工作
检查CPU是否支持虚拟化,即BIOS中参数(VT-x
/AMD-v
)设置为enable。
1.2 安装虚拟机
Minikube在不同操作系统上支持不同的虚拟驱动:
macOS
Linux
注意: Minikube 也支持
--vm-driver=none
选项来在本机运行 Kubernetes 组件,这时候需要本机安装了 Docker。
Windows
本篇在Ubuntu部署VirtualBox虚拟驱动。
1 | wget https://download.virtualbox.org/virtualbox/5.1.38/virtualbox-5.1_5.1.38-122592~Ubuntu~xenial_i386.deb |
第二部分 安装minikube
从阿里云下载最新版本的minikube:
最新版本在这个网址获取:https://github.com/AliyunContainerService/minikube
1 | curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.20.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ |
第三部分 安装Kubectl
kubectl即kubernetes的客户端,通过他可以进行类似docker run等容器管理操作 。
下载:
1 | curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl |
第四部分 启集群
1 | root@deeplearning:~# minikube start --vm-driver=virtualbox --registry-mirror=https://registry.docker-cn.com --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --force=true --kubernetes-version="v1.18.3" |
为了访问海外的资源,阿里云提供了一系列基础设施,请按照如下参数进行配置。其中常见参数
--driver=***
从1.5.0版本开始,Minikube缺省使用本地最好的驱动来创建Kubernetes本地环境,测试过的版本docker
,kvm
--image-mirror-country cn
将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库 (阿里云版本可选)--iso-url=***
利用阿里云的镜像地址下载相应的 .iso 文件 (阿里云版本可选)--registry-mirror=***
为了拉取Docker Hub镜像,需要为 Docker daemon 配置镜像加速,参考阿里云镜像服务--cpus=2
: 为minikube虚拟机分配CPU核数--memory=2048mb
: 为minikube虚拟机分配内存数--kubernetes-version=***
: minikube 虚拟机将使用的 kubernetes 版本
进入minikube虚拟机:
1 | root@deeplearning:~# minikube ssh |
虚拟机地址:
1 | minikube ip |
启停集群:
1 | minikube start/stop |
获取集群信息:
1 | root@deeplearning:/home/rongxiang# kubectl get node |
删除集群:
1 | minikube delete |
第五部分 心酸踩坑
如果在启集群时遇到下面类似的错误,不要慌。国内环境99%的原因是GFW的原因,集群在抓取Google站点docker镜像时候被墙咔嚓了,然后time out。
WTF!我开始不知道呀。网上的部署指引都那么轻松!!然后重复删除集群,重新装,配参数,给docker配代理。尼玛,最后代理都被咔嚓了。终于撞了南墙,去阿里云拉取镜像,几秒钟搞定。
1 | minikube start |
第六部分 远程访问 minikube dashboard
6.1旧版本dashboard 1.0
在虚拟机启动前,设置端口转发。注意这里使用tcp而不是http。
1 | VBoxManage modifyvm "minikube" --natpf1 "kubedashboard,tcp,,30000,,30000" |
然后启动虚拟机,这时候局域网上的其他服务器就可以通过宿主机的IP:30000访问web UI。或者:
1 | kubectl proxy --address='0.0.0.0' --disable-filter=true |
然后启动:
1 | minikube dashboard --url |
6.2 新版本dashboard 2.0
在新版本中,dashboard 2.0 默认会启用 https 的认证,具体认证方式有:TLS
、token
和 username/passwd
首先地址映射:
1 | root@deeplearning:~# kubectl proxy & |
然后生成token:
1 | root@deeplearning:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml |
打开下面url,使用token方式登录:
6.3 新版本dashboard 2.0
也可以使用下面命名启动:
1 | minikube dashboard |
注意:需要后台启动,否则代理启动在前台,shell断开就链接失败了。
附录 补充VBoxManage管理
查询虚拟机:
1 | VBoxManage list vms |
删除虚拟机:
1 | VBoxManage unregistervm --delete 4a3cefe1-11d1-45d2-91c5-1e39fccb6a8d |
参考文献及材料
1、Minitube项目地址:https://github.com/kubernetes/minikube