Kubernetes是Google基于内部Borg开源的容器调度系统,被称为OpenStack拥抱容器的实质性一步的Magnum项目就是使用Kubernetes来调度的。对OpenStacker而言,学习Kubernetes有助于更好的了解容器技术,我们将推出Kubernetes系列,让开发者对这个系统有更好的认识。Kubernetes简介Kubernetes是Google开源的容器调度系统,众所周知Google十几年前已经在生产环境使用容器技术,并且向Linux社区贡献出Cgroups、Namespaces这样的容器核心代码。经过这些年的实践,加上近年来Docker的迅速推广,Google启动了新项目来重写内部容器调度系统Borg,这就是Kubernetes。目前Kubernetes的最新版本为0.19.3,很快会Release 1.0版本,这势必引起更多开发者的关注。我们将推出Kubernetes系列文章,让开发者对这个系统有更好的认识,本教程引导大家搭建单机Kubernetes开发环境。项目开源地址https://github.com/googlecloudplatform/kubernetes准备Ubuntu环境Kubernetes是Golang实现,可以运行在各种平台上,官方比较推荐在Ubuntu上搭建Kubernetes开发环境。为了初始化干净的Ubuntu环境,我们将在UnitedStack提供公有云环境演示教程,任何人都可以轻易在UOS上搭建单机的Kubernetes开发测试环境。首先我们在UOS“创建云主机”,建议选用“Ubuntu 14.04 64bit”镜像,为什么不选用最新的15.04镜像呢?原因是Ubuntu 15.04使用Systemd作为Init系统,以前版本使用的是Upstart,两者配置文件有差异,而目前Kubernetes官方提供的安装脚本对Systemd支持不太好,感兴趣可以围观下我们提的Issue https://github.com/GoogleCloudPlatform/kubernetes/issues/8798选择合适的CPU和内存后,我们还需要申请公网IP并绑定到这台云主机上。完成后,我们就初始化了一台干净的Ubuntu虚拟机,接着可以直接安装单机版Kubernetes做实验了。单机版Kubernetes顾名思义,单机版Kubernetes也就是讲所有Kubernetes组件安装在一台服务器上。目前运行Kubernetes的组件包括etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kube-proxy、kubelet等,这些组件要求系统提前安装Docker(1.3及以上版本)、Etcd以及Go(1.3及以上版本)。由于Ubuntu 14.04默认的Docker源和Go源比较老,通过apt-get安装的版本不符合要求,我们建议通过命令”add-apt-repository ppa:docker-maint/testing”和“add-apt-repository ppa:evarlast/golang1.4″来更新软件源,注意还必须执行命令”apt-get update“哦。更新源后通过”apt-get install golang”和”apt-get install docker”即可安装较新版本的Go和Docker。Etcd的安装也很容易,在它的Github页面 https://github.com/coreos/etcd/releases 下载最新的etcd-v2.0.11-linux-amd64.tar.gz,解压后将二进制文件etcd放到$PATH的任意目录如/usr/local/bin/。安装好所有依赖应该得到类似下面的运行结果,注意安装Go后我们最好在.bashrc文件添加GOPATH的设置。安装好所有依赖后,直接下载Kubernetes的源代码,进入kubernetes目录,执行hack/local-up-cluster.sh即可,运行截图如下。测试Kubernetes服务为了测试Kubernetes服务是否正常启动,可以使用Curl直接调用其Master提供的接口。然后也可以使用简单的kubectl命令测试Kubernetes,如下图所示。最后我们将部署一个真正的Pod,部署过程很简单,但由于国内特殊的网络环境,使用Kubernetes部署Pod时会从Google container registry下载基础的Pause镜像,而导致用户的容器无法部署成功。通过以下两个命令可以绕开这个问题,实际上在UOS提供的首个Atomic镜像已经在内部为用户解决了这个问题。 最后我们在 https://github.com/tobegit3hub/kubernetes_docker/blob/master/nginx_pod.json 下载Nginx Pod的定义,通过Kubernetes部署到本地。我们也可以手动启动Kubernetes的Web UI,运行命令cluster/kubectl.sh proxy –www=$PWD/www,打开对应的服务器地址即可看到这样的界面http://$host:8001/static/app/#/dashboard/ 总结Kubernetes服务得益于Go语言的设计,在几乎所有平台我们都可以启动单机版的Kubernetes,这极大降低了我们对Kubernetes的学习、开发以及测试成本。总体而言,Kubernetes是Docker生态中优秀的容器调度框架,相信在1.0版本发布会会有越来越多的人愿意尝试将它部署到生产环境。这是我们将推出Kubernetes系列的第一篇。此外,我们建立了一个容器服务交流QQ群(群号:462294386),每天发布有关容器的最新资讯,方便大家交流。关于作者:陈迪豪,UnitedStack有云的基础架构工程师,目前专注于Docker、OpenStack社区。Docker监控管理工具Seagull项目作者,开源电子书《理解Linux进程》作者。