@dujun
2015-01-09T14:08:21.000000Z
字数 4022
阅读 3163
Kubernetes写书
本文将介绍如何在一台ubuntu系统的虚拟机上运行kubernetes服务,master节点和minion节点都运行在同一台机器上。
安装分为以下三个步骤:
安装docker环境是运行kubernetes的基础,因为kubernetes本身就是基于docker的一套系统。这里假定读者已经安装了docker,故不再赘述。
有两种途径可以获取kubernetes各组件的二进制可执行文件:下载已经编译好的二进制可执行文件包和下载源码并从源码编译。使用前者的好处是可以任意挑选官方的release版本,同时省去编译的时间(编译 release的过程会启动docker容器并下载包括go语言在内的依赖包,根据网速耗费半小时到几个小时不等);如果希望对Kubernetes进行二次开发,推荐使用后者安装Kubernetes。
从GitHub上的Kubernetes仓库的release页面可以看到所有可用的二进制可执行文件压缩包。
挑选你需要的版本,例如v0.7.2,下载:
wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.7.2/kubernetes.tar.gz
解压并进入生成的kubernetes/
目录:
tar -xzvf kubernetes.tar.gz
cd kubernetes/
我们关心的server端二进制可执行文件压缩包在server/bin/
目录下:
root@ubuntu:~/kubernetes_binary/kubernetes# ls server
kubernetes-salt.tar.gz kubernetes-server-linux-amd64.tar.gz
root@ubuntu:~/kubernetes_binary/kubernetes/server# tar -tzvf kubernetes-server-linux-amd64.tar.gz
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/server/
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/server/bin/
-rwxr-xr-x root/wheel 16141712 2014-12-30 03:11 kubernetes/server/bin/kube-apiserver
-rwxr-xr-x root/wheel 12965312 2014-12-30 03:11 kubernetes/server/bin/kube-controller-manager
-rwxr-xr-x root/wheel 9769408 2014-12-30 03:11 kubernetes/server/bin/kube-proxy
-rwxr-xr-x root/wheel 9386640 2014-12-30 03:11 kubernetes/server/bin/kube-scheduler
-rwxr-xr-x root/wheel 11086824 2014-12-30 03:11 kubernetes/server/bin/kubecfg
-rwxr-xr-x root/wheel 11451632 2014-12-30 03:11 kubernetes/server/bin/kubectl
-rwxr-xr-x root/wheel 14973728 2014-12-30 03:11 kubernetes/server/bin/kubelet
-rwxr-xr-x root/wheel 16888056 2014-12-30 03:11 kubernetes/server/bin/kubernetes
而client端命令行工具的二进制可执行文件根据不同的操作系统归类被放在platforms/
目录下:
root@ubuntu:~/kubernetes_binary/kubernetes# ls platforms/
darwin linux windows
以linux为例,又根据不同的硬件架构分类:
root@ubuntu:~/kubernetes_binary/kubernetes/platforms# ls linux/
386 amd64 arm
Kubernetes client端二进制可执行文件一共三个:kubecfg
,kubectl
和kubernetes
,其中kubecfg
是较老版本的命令行工具,用于使用Kubernetes提供的API,现已经被kubectl
代替,而kubernetes
则用于访问kubelet
的API?。
Kubernetes源代码放在Github上托管。
git clone https://github.com/GoogleCloudPlatform/kubernetes.git
cd kubernetes/build
./release
最后会生成编译好的二进制文件包以及中间过程产生的与docker相关的docker image和dockerfile等,放在kubernetes/_output
目录下,
root@ubuntu:~/kubernetes_sources/kubernetes/_output# ls
dockerized images release-stage release-tars
root@ubuntu:~/kubernetes_sources/kubernetes/_output/release-stage# ls
client full salt server test
我们关心的编译结果是release-stage和release-tars
这两个目录。release-stage
目录下存放的则是支持linux-amd64架构的包含server端二进制可执行文件(放在server子目录下)和支持不同平台的client端的二进制可执行文件(放在client子目录下),与从官方网站下载的完全一样。而release-tars
则存放的是release-stage
目录下各级子目录的压缩包。
制作release的过程其实发生了不少有意思的事情,包括启动docker容器用来安装go语言环境、etcd等,读者有兴趣可以查看release
脚本。
运行ubuntu/util.sh
脚本会将Kubernetes server端的进程和etcd进程做成ubuntu upstart,即能够用service start|stop|restart/force-reload
等方式操作这些服务进程。
$ cd kubernetes/cluster/ubuntu
$ sudo ./util.sh
脚本执行过后,Kubernetes server端进程和etcd进程已经启动了。
kubernetes默认其服务端程序放在/opt/bin
目录下,当然,你也可以根据自己的需要,将它们放到其它目录下,但是如果这样做的话,就需要修改/etc/default/kube*
文件并重启相应的服务进程。以etcd
为例:
$ sudo cat /etc/default/etcd
1. # Etcd Upstart and SysVinit configuration file
2.
3. # Customize etcd location
4. # ETCD="/opt/bin/etcd"
5.
6. # Use ETCD_OPTS to modify the start/restart options
7. ETCD_OPTS="-listen-client-urls=http://127.0.0.1:4001"
如果将etcd
的二进制文件放在除/opt/bin/
以外的的目录下,就应该修改第4行的ETCD=
字段为相应的实际目录。另外,还可以修改etcd
的启动/重启选项ETCD_OPTS
,这里服务端默认监听本地(127.0.0.1
)的4001
端口。
由于我们已经编译得到kubernetes客户端程序的二进制可执行文件,因为,只要将这些二进制文件拷贝到客户机的环境变量PATH
能够搜索到的目录下即可(比如/usr/local/bin
)。检查安装是否完成:
root@ubuntu:~# kubectl version
Client Version: version.Info{Major:"0", Minor:"7+", GitVersion:"v0.7.0-276-gd098456b6d36f7-dirty", GitCommit:"d098456b6d36f751efbf4c92690a51c0ac7e6176", GitTreeState:"dirty"}
Server Version: &version.Info{Major:"0", Minor:"7+", GitVersion:"v0.7.0-276-gd098456b6d36f7-dirty", GitCommit:"d098456b6d36f751efbf4c92690a51c0ac7e6176", GitTreeState:"dirty"}
这时我们就可以使用Kubernetes的命令行工具kubectl
来启动和调度docker容器了。