windows安装minikube的正确姿势

image

🎓 你将学到什么?

  • Windows 下安装 minikube 的详细步骤
  • 在安装过程中可能遇到的问题及其解决方案

来,今天我们来折腾一下在 Windows 操作系统安装 minikube

🙋 蛋尼尔:minikuke是什么东西?

先来看下官方是怎么介绍的:

Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a Virtual Machine (VM) on your laptop for users looking to try out Kubernetes or develop with it day-to-day.

简单讲就是一个工具,这个工具让你可以在本地(一般是出于学习或实验的目的)跑一个只有单节点(node)的 k8s 集群

🙋 蛋尼尔:那 k8s 又是什么?

Oh my god!也许这篇文章并不适合你。

丢个链接自己先去了解下吧:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/


在 windows 上,建议的安装方式是:在虚拟机上跑一个 Linux(如 CentOS),然后在 Linux 上安装 minikube。

🙋 蛋尼尔:这是为什么呢?

第一,这种方式可以导出虚拟机,就可以方便地共享你的成果了。

第二,用这种隔离的方式,就不会“污染”到操作系统了。

注意:需要满足以下前提条件,如果不满足就放弃挣扎吧:

  • Windows 8 或以上版本
  • 支持虚拟化

🙋 蛋尼尔:如何知道我的机器是否支持虚拟化呢?

打开命令行,运行 systeminfo,输出以下这样的就OK:

# 英文版本:
Hyper-V Requirements:     VM Monitor Mode Extensions: Yes
                          Virtualization Enabled In Firmware: Yes
                          Second Level Address Translation: Yes
                          Data Execution Prevention Available: Yes

# 中文版本:
Hyper-V 要求:     虚拟机监视器模式扩展: 是
                  固件中已启用虚拟化: 是
                  二级地址转换: 是
                  数据执行保护可用: 是

OK,让我们愉快地开始吧。

1. 在虚拟机上安装 CentOS

VirtualBox下载地址:https://www.virtualbox.org/wiki/Downloads

CentOS下载地址:https://www.centos.org/download/

以下演示安装的是 CentOS 7.6 版本。这是为什么呢?因为我本机已经下载了这个版本了啊

1.1 创建虚拟机

  • 选择 Type:Linux 和 Version:Red Hat (64-bit)
image
  • 接下来设置内存,硬盘大小

默认选项即可,不用修改。硬盘给个15G或以上吧,不要太吝啬啦。

1.2 装盘,设置网络,调整CPU数量

  • 将你下载的 CentOS ISO 文件装盘
image
  • 设置虚拟机的网络为 Brided Adapter
image

🙋 蛋尼尔:这是为什么呢?为什么不选默认的NAT

这个问题问得好。简单看下 NATBridged Adapter 的区别

  • NAT:虚拟机没有独立IP,所以虚拟机可以访问主机,但主机无法访问虚拟机
  • Bridged Adapter:虚拟机有独立IP,就像同处局域网中的其它计算机一样,主机和虚拟机之间可以互相访问

我们的场景就是希望可以在主机可以访问虚拟机中的服务,比如 k8s dashboard,所以选择 Bridged Adapter

  • 将CPU数量设置为2个或以上
image

🙋 蛋尼尔:1个不行吗?

别急,待会在适当的时间会解释滴。

1.3 安装 CentOS

点击 Start 启动虚拟机。

基本按照界面的指示一步一步操作即可。以下就一些需要进行稍微设置的步骤进行说明。

当你看到以下界面,稍等片刻,每一项自动检查完毕后就会变成正常的黑色。

image

重点注意其中两项。其它项则无须进行设置,保持默认即可。

  • 项一:INSTALLATION DESTINATION

点击进去选择安装的硬盘即可

image
  • 项二:NETWORK & HOST NAME

点击进去启用网络连接即可

image

搞定后如下图就可以下一步了

image

点击 ROOT PASSWORD 设置密码后,这个时候你可以去冲一杯咖啡。

image

经过漫长的等待,终于迎来了这个界面了,oh yeah!

image

点击 Reboot 重启

2. 启动 sshd 服务

🙋 蛋尼尔:不是可以在虚拟机上操作吗?要启用这个服务干嘛呢?

你是指这个吗?可以自己试一下,就知道有多么难用了。鼠标要切来切去,不能复制粘贴,不能开多个终端等等。

image

执行以下一句命令搞定

# systemctl start sshd

现在你可以用自己喜欢的终端工具,比如 putty 来登录 CentOS 进行操作了。

🙋 蛋尼尔:等等,IP是多少来着?

这个简单啊,用 ifconfig 命令即可查看。啊啊啊~~~

image

不会吧,连这个命令都木有。

那好吧,这里就顺便介绍下在 CentOS 一般怎么使用 yum 来安装软件包

第一步:先检查下命令所属的包:

# yum provides ifconfig
image

第二步:安装指定的包

# yum install net-tools

OK,安装完成后你就可以通过 ifconfig 去查看你虚拟机的IP了

3. 安装 Docker

因为我们将采取直接在主机(这里指 CentOS)而非虚拟机上运行 k8s 组件的形式(即 --vm-driver=none 的参数启动 minikube),所以需要安装 Docker

那之所以这样做,是因为虚拟机中再跑个虚拟机实在有难度。

这里提到 --vm-driver=none,还记得上面将CPU设置为2个的步骤吗?原因就是以这个参数启动 minikube 至少需要双核。

来,我们通过以下命令即可安装和启动 docker 服务

# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh
# systemctl start docker
# systemctl enable docker

再来,验证一下:

# docker version

此时安装的 docker 版本号是:19.03.5

4. 安装 kubectl

kubectl 是 k8s 的命令行工具,通过它可操作 k8s 集群。安装过程如下:

# curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
# chmod +x ./kubectl
# mv ./kubectl /usr/local/bin/kubectl

来,验证一下:

# kubectl version --client

此时安装的 kubectl 版本号是:v1.17.3

5. 安装和启动 minikube

接下来终于到主角的安装。执行以下命令就搞定了。

# curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube
# mkdir -p /usr/local/bin/
# install minikube /usr/local/bin/

验证一下吧

# minikube version

此时安装的 minikube 版本号是:v1.7.2

接着启动:

# minikube start --vm-driver=none

🙋 蛋尼尔:启动等了好久了也没提示成功,看到:VM is unable to access k8s.gcr.io, you may need to configure a proxy or set --image-repository 昨办?

OK,根据提示信息,应该是国内网络的问题。我们再加个参数重新启动:

# minikube start --vm-driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

没什么意外的话就成功启动了,我们来验证一下:

# minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

6. 启动 k8s dashboard

接下来启用 dashboard 服务,这将让我们可以方便地通过界面管理 k8s 集群:

# minikube dashboard

🙋 蛋尼尔:哎呀,不太顺利啊,又没成功启动,报错:/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ is not accessible: Temporary Error: unexpected response code: 503

OK。那我们来尝试通过查看日志来找蛛丝马迹吧。

先查看下 pods 的运行状态

# kubectl get pods -A
image

发现 kubernetes-dashboard 的 pod 状态不正常,那我们接着查看该 pod 的运行日志

# kubectl logs kubernetes-dashboard-79d9cd965-kj5ln -n kubernetes-dashboard

🙋 蛋尼尔:发现错误信息了:connect: no route to host

恩,本地路由问题。通过不懈努力地google和尝试,最终的解决方法就是 flush iptables,命令如下:

# systemctl stop kubelet
# systemctl stop docker
# iptables --flush
# iptables -tnat --flush
# systemctl start kubelet
# systemctl start docker

重新运行 minikube dashboard 尝试启动。

🙋 蛋尼尔:启动成功啦。但在 Windows 主机怎么访问 dashboard 呢?

先停掉 minikube dashboard 命令,我们改成 kubectl proxy 来启动代理服务,使得外面可通过 IP 来访问 k8s dashboard

// 其中 --address 是你虚拟机的IP,可通过 ifconfig 获得
# kubectl proxy --port=8001 --accept-hosts='^.*' --address='192.168.31.136'

访问地址:http://192.168.31.136:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/overview?namespace=default

如果你仍然在 Windows 主机的浏览器中无法访问 dashboard,有可能是 CentOS 端口的暴露问题,通过以下增加防火墙规则即可

# firewall-cmd --zone=public --add-port=8001/tcp --permanent
success
# firewall-cmd --reload
success

7. 自启动

最终还是没能通过 /etc/rc.d/rc.local 增加执行脚本的方式自启动,总是会出现各种问题,所以最后写了一个启动脚本 start-k8s.sh,内容如下:

iptables --flush
iptables -tnat --flush

systemctl start docker
minikube start --vm-driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

sleep 10
kubectl proxy --port=8001 --accept-hosts='^.*' --address='192.168.31.136'

每次启动 CentOS 后,再手动执行这个脚本即可:sh start-k8s.sh

OK,搞定,可以重启试一下了。

这里没再花时间去折腾,可以优化的空间还是挺大的,有能搞定系统启动时自启动 minikube 的同学,欢迎把解决方案告诉我哈

8. 导出虚拟机

最后,可以导出你的成果分享给你的朋友们了。选中虚拟机,点击右键菜单中的 Export to OCI... 菜单,一路默认即可完成导出。

image

终于,写完了。觉得有点用的,点个赞哈。拜拜!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容