一. 部署环境及架构
-
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) |