etcd是Kubernetes依赖的一个非常重要的组件,ectd ABC一文介绍了在三台机器上搭建etcd cluster的过程,本文介绍在这三台机器上搭建Kubernetes cluster。
三台机器的网络配置如下:
HOSTNAME |
ADDRESS |
anakin |
10.0.63.202/172.0.63.202 |
boba |
10.0.63.203/172.0.63.203 |
c3po |
10.0.63.204/172.0.63.204 |
下载Kubernetes Release包(v1.3.5)
如果网络性能不好,下载过程可能会中断,则建议使用迅雷将包下载后拷贝到集群中的每一台机器,解压缩并拷贝到系统可执行目录/usr/bin
下:
Kubernetes Master
第一台机器anakin作为Kubernetes Master,其上运行如下组件:
- Kubernetes API Server
- Kubernetes Controller Manager
- Kubernetes Scheduler
- Kubernetes Proxy
Kubernetes API Server
由于环境中的etcd集群已经搭建好,指定–etcd-servers为本机IP:2379即可。–insecure-bind-address设置为0.0.0.0意味着在所有网卡接口都提供服务。
--allow-privileged=true
启动参数用于DaemonSet
类型的组件。
Kubernetes Controller Manager
上述的apiserver.key
由apiserver启动时创建的,除key之外,还有一个apiserver.crt
证书文件。
Kubernetes Schedule
Kubernetes Proxy
Node需要同Master的8080端口进行socket通信,使用如下命令将anakin的8080端口打开:
使用firewall-cmd --zone=dmz --list-ports
命令查看打开的端口。
Kubernetes Node
boba和c3po作为Kubernetes的Node,其上需要运行:
- Docker
- Kubelet
- Kubernetes Proxy
根据Docker官方安装文档安装Docker。
Kubelet
--cluster-dns
和--cluster-domain
需要在创建DNS扩展插件之后添加上重启。
Kubernetes Proxy
在Master节点上也可以运行上述命令,让Master节点也作为运行Pod的计算资源。但这是否是一种好的方式还有待调研。
查询Kubernetes的健康状态
Kubernetes覆盖网络
Kubernetes的网络模型要求每一个Pod都拥有一个扁平化共享网络命名空间的IP,称为PodIP,Pod能够通过PodIP跨网络与其他物理机和Pod进行通信。要实现Kubernetes的网络模型,需要在Kubernetes集群中创建一个覆盖网络(Overlay Network),联通各个节点,如Flannel和Open vSwitch。本文对Flannel进行部署及验证。
flanneld作为一个中间层,对不同Host上的虚拟地址网段进行监控管理转发,图中绿色的线是包转发的路径。Flannel支持不同的模式,如udp、vxlan、host-gw、aws-vpc,本文配置为udp模式。
Flannel同样需要etcd作为共享配置的数据仓库,由于三台机器上都运行etcd监听服务,因此Flannel的配置变得非常简单:
在任意一台机器上运行:
在各机器上分别进行如下操作:
安装并运行flanneld:
编辑/lib/systemd/system/docker.service,编辑ExecStart开头的行:
ExecStart=/usr/bin/dockerd --bip=10.0.7.1/24 --mtu=1472
重启docker:
另外,由于重启docker,造成了etcd容器的stop,因此需要将停止的etcd容器重新启动,由于集群中有三台etcd节点,因此这个过程不会影响etcd的健康状态。
在三台机器上分别进行如上操作之后,flannel的网络模型如下图所示(用ip a | grep flannel
查看flanneld网络):
在各机器上可以查看docker的子网详情:
Flannel验证
服务的验证比较简单,在某一个Host上运行一个容器,然后在容器中ping另一台Host的IP及虚拟的docker子网网关,如果能通则说明网络正确,具体操作如下:
c3po
从结果可以看出,flanneld的扁平网络可正常工作。
另外,CentOS自身的源已经包含Kubernetes包,并且应该是经过大量测试的,因此推荐使用yum直接进行安装,并使用systemd进行启动。
推荐两篇部署文档: