> Linux集群 > 服务器集群 >

CentOS7.0上部署kubernetes集群

一. 部署环境及架构
  • OpenStack:恒天云3.4

  • 操作系统:centos 7.0

  • flannel: 0.5.5

  • Kubernetes: 1.2.0

  • Etcd版本: 2.2.2

  • Docker版本: 1.18.0

  • 集群信息:

Role

Hostname

IP Address

Master

master

10.0.222.2

Node

node1

10.0.222.3

Node

node2

10.0.222.4

Node

node3

10.0.222.5

Node

node4

10.0.222.6

 

master包含kube-apiserver kube-scheduler kube-controller-manager etcd四个组件
node包含kube-proxy和kubelet两个组件
1. kube-apiserver:位于master节点,接受用户请求。
2. kube-scheduler:位于master节点,负责资源调度,即pod建在哪个node节点。
3. kube-controller-manager:位于master节点,包含ReplicationManager,Endpointscontroller,Namespacecontroller,and Nodecontroller等。
4. etcd:分布式键值存储系统,共享整个集群的资源对象信息。
5. kubelet:位于node节点,负责维护在特定主机上运行的pod。
6. kube-proxy:位于node节点,它起的作用是一个服务代理的角色。
 

二 、安装步骤

准备工作

关闭防火墙

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

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中的网络配置,nodeN中的flannel service会拉取此配置

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

 

配置Kubernetes API server

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.0.222.2: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

部署Node

安装Kubernetes和Flannel

1
$ yum -y install flannel kubernetes

配置Flannel

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

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

这里需要注意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.0.222.2:2379/v2/keys/coreos.com/network/config -XPUT --data-urlencode value@config.json

修改Kubernetes配置

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

1
KUBE_MASTER="--master=http://10.0.222.2: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=node1"
KUBELET_API_SERVER="--api_servers=http://10.0.222.2:8080"
KUBELET_ARGS=""

不同node节点只需要更改KUBELET_HOSTNAME 为node的hostname即可。

启动node服务

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

创建快照,其他节点用快照安装(修改相应的hostname以及KUBELET_HOSTNAME即可)

查看集群nodes

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

1      kubectl -s "http://10.0.222.2:8080" get nodes


(责任编辑:IT)