Fork me on GitHub

在Ubuntu上部署Minikube

[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在不同操作系统上支持不同的虚拟驱动:

本篇在Ubuntu部署VirtualBox虚拟驱动。

1
2
3
# wget https://download.virtualbox.org/virtualbox/5.1.38/virtualbox-5.1_5.1.38-122592~Ubuntu~xenial_i386.deb

#dpkg -i virtualbox-5.1_5.1.38-122592~Ubuntu~xenial_i386.deb

第二部分 安装minikube

从阿里云下载最新版本的minikube:

最新版本在这个网址获取:https://github.com/AliyunContainerService/minikube

1
2
3
4
# 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/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 40.8M 100 40.8M 0 0 4671k 0 0:00:08 0:00:08 --:--:-- 7574k

第三部分 安装Kubectl

kubectl即kubernetes的客户端,通过他可以进行类似docker run等容器管理操作 。

下载:

1
2
3
4
5
6
7
# 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
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 52.5M 100 52.5M 0 0 6654k 0 0:00:08 0:00:08 --:--:-- 10.3M

# chmod +x kubectl
# mv kubectl /usr/local/bin/

第四部分 启集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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"
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
153.08 MB / 153.08 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

为了访问海外的资源,阿里云提供了一系列基础设施,请按照如下参数进行配置。其中常见参数

  • --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
2
3
4
5
6
7
8
9
10
11
12
root@deeplearning:~# minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$
# 通过exit退出集群
$ exit
logout

虚拟机地址:

1
2
# minikube ip
192.168.99.100

启停集群:

1
# minikube start/stop

获取集群信息:

1
2
3
root@deeplearning:/home/rongxiang# kubectl get node 
NAME STATUS ROLES AGE VERSION
minikube Ready master 7h v1.10.0

删除集群:

1
2
3
# minikube delete  
# rm -rf ~/.minikube
# kubeadm reset

第五部分 心酸踩坑

如果在启集群时遇到下面类似的错误,不要慌。国内环境99%的原因是GFW的原因,集群在抓取Google站点docker镜像时候被墙咔嚓了,然后time out。

WTF!我开始不知道呀。网上的部署指引都那么轻松!!然后重复删除集群,重新装,配参数,给docker配代理。尼玛,最后代理都被咔嚓了。终于撞了南墙,去阿里云拉取镜像,几秒钟搞定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
E0626 12:57:46.868961 26526 start.go:299] Error restarting cluster: restarting kube-proxy: waiting for kube-proxy to be up for configmap update: timed out waiting for the condition
================================================================================
An error has occurred. Would you like to opt in to sending anonymized crash
information to minikube to help prevent future errors?
To opt out of these messages, run the command:
minikube config set WantReportErrorPrompt false
================================================================================
Please enter your response [Y/n]:

第六部分 远程访问 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
2
# minikube dashboard --url
http://192.168.99.102:30000

6.2 新版本dashboard 2.0

在新版本中,dashboard 2.0 默认会启用 https 的认证,具体认证方式有:TLStokenusername/passwd

首先地址映射:

1
2
root@deeplearning:~# kubectl proxy &
Starting to serve on 127.0.0.1:8001

然后生成token:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@deeplearning:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

root@deeplearning:~# kubectl create serviceaccount dashboard-admin -n kube-system
#创建用于登录dashborad的serviceaccount账号
serviceaccount "dashboard-admin" created

root@deeplearning:~# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-cluster-admin created
#创建一个clusterrolebingding,将名称为cluster-admin的clusterrole绑定到我们刚刚从的serviceaccount上,名称空间和sa使用:作为间隔

root@deeplearning:~# kubectl get secret -n kube-system
#创建完成后系统会自动创建一个secret,名称以serviceaccount名称开头
NAME TYPE DATA AGE
......
dashboard-admin-token-twwfl kubernetes.io/service-account-token 3 46s
.....

#使用describe查看该secret的详细信息,主要是token一段
root@deeplearning:~# kubectl describe secret dashboard-admin-token-twwfl -n kube-system
Name: dashboard-admin-token-twwfl
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: ae20b337-3729-4c97-9852-19e160b37427

Type: kubernetes.io/service-account-token

Data
====
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjZGSnZhZ2FiTUhlMTBoN1dYWFB6cmwzSkphNWVNQ0ZLWGZ0NEhOOUZST1UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tdHd3ZmwiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYWUyMGIzMzctMzcyOS00Yzk3LTk4NTItMTllMTYwYjM3NDI3Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.lOL6l1uWwEBfw4bbsdRyhvRnLzeOakz-kf38rc2RXPzBgMHqeLgsLw2o7TwRRp84XVNPoDaIa6HwW_6StxYZG5dfiCdUlClWHgepl-z3dq9r49IPqh-ZJLA56D1BZP-iRptmFjJHy5uAXPOyRRg-a43FwM0VZa4aaSe-NKdh7eceJxig0t_mJJbSYdIG_PqZS-JiBsJPb8KYl_GEWSNB4jzQ0SA8CZrB9Yl_ifhTL3vAie6FgLawPXENjz1puufene2Kymo-fVEmGK6KedRdIm4gCpg5NGmuEdJB3ikEzObN_Mv5JbK9wTmGW0s1-6m5ogdshpvKmSBQZ9Vuik_Qfw
ca.crt: 1066 bytes
namespace: 11 bytes

打开下面url,使用token方式登录:

http://127.0.0.1:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login

6.3 新版本dashboard 2.0

也可以使用下面命名启动:

1
minikube dashboard &

注意:需要后台启动,否则代理启动在前台,shell断开就链接失败了。

附录 补充VBoxManage管理

查询虚拟机:

1
2
3
# VBoxManage list vms
"<inaccessible>" {4a3cefe1-11d1-45d2-91c5-1e39fccb6a8d}
"minikube" {dfcd1bdf-afc1-49e6-a270-9d8ff14bf167}

删除虚拟机:

1
# VBoxManage unregistervm --delete 4a3cefe1-11d1-45d2-91c5-1e39fccb6a8d

参考文献及材料

1、Minitube项目地址:https://github.com/kubernetes/minikube

2、kubernetes学习笔记之十一:kubernetes dashboard认证及分级授权

本文标题:在Ubuntu上部署Minikube

文章作者:rong xiang

发布时间:2018年06月25日 - 19:06

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/a63b7206/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%