Energy and Persistence conquers

CentOS 7上Kubernetes集群的安装与配置

2016-01-14

Kubernetes是一个Master/Slave(Minion)架构的容器管理平台。

基础环境

Master

Minion #1

Minion #2

准备工作

关闭防火墙

为了避免和Docker的iptables产生冲突,我们需要关闭Minion上的防火墙:

1
2
$ systemctl stop firewalld
$ systemctl disable firewalld

安装NTP

为了让各个服务器的时间保持一致,还需要为所有的服务器安装NTP:

1
2
3
$ yum -y install ntp
$ systemctl start ntpd
$ systemctl enable ntpd

部署Master

安装etcd和kubernetes

1
$ yum -y install etcd kubernetes

配置etcd

修改etcd的配置文件/etc/etcd/etcd.conf

1
2
3
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

配置etcd中的网络

定义etcd中的网络配置,minions中的flannel service会拉取此配置

1
$ etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16"}'

配置Kubernetes API server

修改配置文件/etc/kubernetes/apiserver

1
2
3
4
5
6
7
API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet_port=10250"
KUBE_ETCD_SERVERS="--etcd_servers=http://10.64.203.234:2379"
KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

这里需要注意原来KUBE_ADMISSION_CONTROL默认包含的ServiceAccount要删掉,不然启动API server的时候会报错。

启动服务

接下来,在Master上启动下面的服务:

1
2
3
4
5
$for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

部署Minion

安装Kubernetes和Flannel

1
$ yum -y install flannel kubernetes

配置Flannel

修改Flannel的配置文件/etc/sysconfig/flanneld:

1
2
3
FLANNEL_ETCD="http://10.64.203.234:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
FLANNEL_OPTIONS="--iface=bond0"

这里需要注意FLANNEL_OPTIONS中的iface的值是你自己服务器的网卡,不同的服务器以及配置下和我的是不一样的。

启动Flannel

1
2
3
$systemctl restart flanneld
$systemctl enable flanneld
$systemctl status flanneld

上传网络配置

在当前目录下创建一个config.json,内容如下:

1
2
3
4
5
6
7
8
{
"Network": "172.17.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan",
"VNI": 7890
}
}

然后将配置上传到etcd服务器上:

1
$ curl -L http://10.64.203.234:2379/v2/keys/coreos.com/network/config -XPUT --data-urlencode value@config.json

修改Kubernetes配置

修改kubernetes默认的配置文件/etc/kubernetes/config:

1
KUBE_MASTER="--master=http://10.64.203.234:8080"

修改kubelet配置

修改kubelet服务的配置文件/etc/kubernetes/kubelet:

1
2
3
4
5
6
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
# change the hostname to minion IP address
KUBELET_HOSTNAME="--hostname_override=10.64.203.235"
KUBELET_API_SERVER="--api_servers=http://10.64.203.234:8080"
KUBELET_ARGS=""

不同minion节点只需要更改KUBELET_HOSTNAME 为minion实际的ip地址即可。

启动Minion服务

1
2
3
4
5
$ for SERVICES in kube-proxy kubelet docker; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

查看集群状态

部署完成之后,可以kubectl命令来查看整个集群的状态:

1
2
3
4
$kubectl -s "http://10.64.203.234:8080" get nodes
NAME LABELS STATUS
10.64.203.235 kubernetes.io/hostname=10.64.203.235 Ready
10.64.203.236 kubernetes.io/hostname=10.64.203.236 Ready

得到这样的输出,那么Kubernetes集群就搭建好了。