集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5
节点名称 | 节点IP |
---|---|
master | 192.168.0.100 |
node1 | 192.168.0.101 |
node2 | 192.168.0.102 |
1、master节点安装配置etcd服务,作为k8s集群主数据库,保存所有资源的信息
2、所有节点安装配置k8s服务,针对master和node分别配置各项服务
3、所有节点安装配置flannel服务,用于跨主机容器间通信
关闭防火墙,否则节点间无法通信,使用以下命令关闭防火墙和禁止开机启动。
systemctl stop firewalld.service
systemctl disable firewalld.service
安装采用yum方式,并且只是安装单机的etcd服务,如果考虑高可用需要部署etcd集群。
yum install -y etcd
安装完成后,/etc/etcd/etcd.conf配置文件作如下配置,
ETCD_NAME="master"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.100:2379"
其中,
配置完启动etcd服务,并配置开机启动,
systemctl start etcd
systemctl enable etcd
查看etcd健康状态,确定etcd服务状态正常,
[root@master~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.0.100:2379
cluster is healthy
1、master节点
在master节点机器上安装k8s,同样使用yum方式,
yum install -y kubernetes
在k8s master节点上需要运行以下组件:
配置kube-apiserver服务,修改/etc/kubernetes/apiserver文件如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.100:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
其中,
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.100:8080"
其中,
除了KUBE_MASTER需要配置,其余均保持默认设置即可。
对于kube-controller-manager和kube-scheduler两个服务,无需其他配置,按照系统默认参数即可。
设置kube-apiserver、kube-controller-manager和kube-scheduler服务开启启动,并启动服务,
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
systemctl start kube-apiserver kube-controller-manager kube-scheduler
2、node节点
在node节点机器上安装k8s,仍然使用yum方式,
yum install -y kubernetes
对于node节点,需要运行以下组件
上面我们提到,node也需要安装kubernetes,因此我们直接开始配置。
配置kubelet,修改/etc/kubernetes/kubelet文件如下:
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=192.168.52.145"
KUBELET_API_SERVER="--api-servers=http://192.168.52.136:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
其中,
修改/etc/kubernetes/config文件如下:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.100:8080"
该配置和master节点上相同。
kube-proxy服务无需其他配置。
启动kubelet、kube-proxy服务,并设置为开启动,
systemctl start kubelet kube-proxy
systemctl enable kubelet kube-proxy
同样的操作在另一个节点配置。如果节多,可以考虑使用ansible批量部署。
部署完node节点,我们就能在master上查看节点信息了。
[root@master ~]# kubectl get node
NAME STATUS AGE
192.168.0.101 Ready 11s
192.168.0.102 Ready 8s
flannel的安装是为了解决跨主机容器间的通信。
1、在master和node节点上执行以下操作
安装flannel
yum install -y flannel
修改配置文件/etc/sysconfig/flanneld如下,
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.100:2379"
FLANNEL_ETCD_PREFIX="/flannel/network"
其中,
2、在master节点上添加网络
master上配置有etcd服务,因此我们使用etcdctl命令设置该集群的网络信息。
etcdctl set /flannel/network/config '{"Network":"10.8.0.0/16"}'
其中,/flannel/network/和上面的FLANNEL_ETCD_PREFIX对应。
3、重启master和node节点上各个服务
由于flannel会将docker0覆盖,因此需要重启docker服务。
对于master,
systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler
对于node,
systemctl restart kube-proxy kubelet docker
4、所有节点启动flannel服务,并设置开启启动
systemctl restart flanneld
systemctl enable flanneld
启动后就能看到节点上的flannel网络,并且该网络正是我们配置的ip范围。
master节点上flannel信息,
[root@master ~]# ifconfig flannel0
flannel0: flags=4305 mtu 1472
inet 10.8.71.0 netmask 255.255.0.0 destination 10.8.71.0
inet6 fe80::186f:8899:a84e:d447 prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 144 (144.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
node1节点上flannel信息,
[root@node1 ~]# ifconfig flannel0
flannel0: flags=4305 mtu 1472
inet 10.8.21.0 netmask 255.255.0.0 destination 10.8.21.0
inet6 fe80::8597:702b:ee1a:db51 prefixlen 64 scopeid 0x20
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 144 (144.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其实到这,k8s的集群就搭建完了,但这只是最简单的一个集群,并没有考虑集群的高可用。
因此,实际的集群还需要以下操作:
后面有时间我们慢慢说。