如何在Docker for windows上安装kubernetes?

Dockers这些年是越来越火,微软家的Windows也不干寂寞,在Windows 10 pro以及Windows 2016以上的版本添加了对docker的支持。这下子Windows环境的开发人员一下子方便多了,再也不需要额外的Linux服务器或者虚拟机了(好吧,本质还是虚拟机hyper-v)。更NICE的是从Docker for Windows 18.02 EDGE开始,增加了kubernetes的支持,并且kubectl也被加入到本地path里并设置好了context(如果里用kubectl操作其他contexts,记得切换)。这下更酷了,容器编排以及本地集群部署问题统统都给你解决了。

那么问题来了,我们如何安装docker for Windows呢?官方的安装文档比较啰嗦,这里划下重点。

系统需求:

PS:如果系统版本不够,无法使用hyper-v,可以考虑将系统升级到Windows 10 pro,譬如我的工作电脑原本是Windows 10 Home版,换个pro的key顺利升级为专业版。如果不具备升级条件,那么就考虑virtual box吧。

PS: 官方提供的Docker 兼容列表

安装Docker Desktop for Windows

安装还是超级简单的,下载最新的Docker Desktop Installer.exe,然后照着安装向导完成安装吧。

启动Docker Desktop for Windows

点击开始,找到刚刚安装的Docker Desktop,屏幕右下角的状态栏里就会有docker的鲸鱼图标出现了。

Docker Desktop status bar

为了方便,可以将开始菜单的Docker Desktop固定在开始屏幕上。刚安装完成,会有以下的弹出窗提示你登陆你的docker账号,没有就注册一个吧。

Docker Desktop for Windows

安装kubernetes

1.我能轻松翻墙:

安装kubernetes前,请务必先准备翻墙的梯子,最好是路由器级(也就是全局的,我用Windows本地的ss翻墙代理失败,后来使用家里路由器里的ss一次性成功,仅供参考)。

准备好梯子后,安装方法就很简单了,打开docker的settings界面,找到kubernetes的选项卡,分别勾选以下三项:

然后点击Apply按钮开始安装,翻墙顺利的话,大约十来分钟(看网速)就可以看到安装成功的提示了。安装完成后kubernetes会自动进入运行状态,如下图所示:

docker-kubernetes

安装的过程会比较慢,有时候网络不好的话,可能会好久都没反应,这时我们可以打开cmd通过docker和kubectl的命令查看基本的进度。

可以先用docker images查看当前已经拉下来的镜像,反复刷,直到下图中的相关镜像都下载下来。

中间可以穿插kubectl get pod --all-namespaces,查看当前k8s中运行的pod以及状态,如果发现状态出错的,就可能要回撤。

PS: 安装过程中出错最简单的就是在docker desktop中直接恢复出厂设置,然后全部重来。

docker-k8s-status

2.我不会翻墙:

如果没有全局翻墙条件,也可以手工将相关镜像拉到本地然后部署的方式。主要是使用docker在阿里云上的镜像,将相关文件拉到本地,请务必注意相关镜像的版本号。如果不清楚自己的docker desktop对应的版本号,可以打开about界面查看,如下图所示:

docker-about

参考一键部署脚本(使用前可根据自己的实际情况修改版本号):

#节点组件:每个node里的container都在一个私有网络中,kube-proxy的作用就是做一个反向代理,让访问者访问这个node的时候,可以转发到内部对应的container。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.11
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.11 k8s.gcr.io/kube-proxy-amd64:v1.10.11
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.10.11

#Master组件:k8s调度器,容器的启动、迁移、扩容缩减时候,选择哪个node,就看它了。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.10.11
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.10.11 k8s.gcr.io/kube-scheduler-amd64:v1.10.11
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.10.11

#Master组件:k8s对node的控制行为,比如怎么去调用node启动一个容器。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.10.11
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.10.11 k8s.gcr.io/kube-controller-manager-amd64:v1.10.11
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.10.11

#Master组件:API服务器,对外暴露了Kubernetes的API,是Kubernetes的前端控制层。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.10.11
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.10.11 k8s.gcr.io/kube-apiserver-amd64:v1.10.11
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.10.11

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1

#Master组件:etcd作为kubernetes的后端存储,存储了k8s自身的信息、以及各种业务容器信息等。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.1.12
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.1.12

#Master组件:DNS为Kubernetes服务提供DNS记录,是k8s的必需组件。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar-amd64:1.14.8
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-sidecar-amd64:1.14.8

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns-amd64:1.14.8
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-kube-dns-amd64:1.14.8

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8

#Master组件:dashboard提供了集群状态的只读概述。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1

pause

将上面的脚本copy下来保存为k8s-images.bat,然后双击运行即可。如果不用cmd使用其他bash命令的话,去掉最后的pause小尾巴。

该命令执行成功后,再用docker images查看相关镜像是否都已成功拉下来,如果都OK的话,再在docker desktop上勾选安装kubernetes即可。

安装kubernetes dashboard(可选)

默认情况下,安装完kubernetes后是不会有dashboard的,所以还需要额外安装一下dashboard,方便监控与管理(如果你更习惯使用命令,可以不必安装dashboard)。如果照着kubernetes官方的文档去安装dashboard,那你可能要跟我一样踩不少坑,为了方便,建议使用官方的非安全版本,如下:

C:\> kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.0/src/deploy/alternative/kubernetes-dashboard.yaml

另外为了方便监控性能,还可以加上一些图表组件:

C:\> kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml
C:\> kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml
C:\> kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml

都安装完毕后,通过命令kubectl proxy启动dashboard服务,然后在浏览器输入http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy


[返回首页]