入门
安装kubernetes高可用集群-1.18-CentOS
本文档所需文件均可在以下百度网盘中下载:
系统准备
-
使用网盘中提供的ISO安装系统(请使用SuperMap提供的CentOS-8.3.2011-x86_64-Minimal.iso文件安装干净的系统)。
- 网盘路径为:iManager 部署包/软件工具包/OS/OS-ISO/CentOS-8.3.2011-x86_64-Minimal.iso
- 在安装系统时,除了swap分区外,其他分区的文件系统格式(Format)一律选择ext4类型;要求根(/)分区占据磁盘总量90% 以上。
- 规格:CPU: 4核+,内存: 8GB+(规格越大性能越好)。
安装包准备
- 网盘路径:iManager部署包/软件工具包/Kubernetes离线安装包/kubernetes-1.18.20-centos-8.3-deploy.zip
环境准备
-
针对 Kubernetes 高可用集群,为了保证集群的高可用性,至少准备三台物理机作为 master 节点,每台物理机参考系统准备安装。多个 master 节点组成的 Kubernetes 集群具有更强的容错能力,如果有 N 个 master 节点组成的集群,可以允许 (N-1)/2 个 master 同时失败(断线,硬件错误,磁盘损坏等导致),当 master 节点失败数量大于 (N-1)/2 个,此时整个 Kubernetes 集群都将失败。参照下面表格
master 节点大小 容错能力 1 0 2 0 3 1 4 1 5 2 6 2 7 3 8 3 9 4 如表格所示,Kubernetes 高可用集群的 master 数量最好是奇数,偶数数量并不会增加集群容错能力。
- 准备一个空闲 IP 作为 Kubernetes 集群入口 IP。IP 最好和物理机在同一个网段,并且没有被占用。
- 暂不支持在阿里云和华为云上部署该环境。
安装 kubernetes master 节点
- 在本机解压kubernetes-1.18.20-centos-8.3-deploy.zip
-
将解压后目录里的offline-kubernetes-1.18.20-centos-8.3.tar.gz拷贝到要安装 kubernetes 的机器任意目录,然后根据以下命令操作:
- 解压:
tar ‐zxvf offline-kubernetes-1.18.20-centos-8.3.tar.gz
- 进入解压后的目录:
cd offline-kubernetes-1.18.20-centos-8.3
- 编辑
.env
文件,对 Kubernetes 集群进行设置
# 必填,当前节点的 hostname,不能和其他 kubernetes 节点相同。不建议包含 "master" 字符串,可选替换 main/control;不建议包含特殊字符“.” HOSTNAME= # 连接 Kubernetes 集群使用的 ip。如果是高可用集群,CLUSTER_IP 是一个虚拟 ip,也就是前面准备的空闲 ip;如果是单个 master 节点组成的集群,CLUSTER_IP 是该 master 节点的 ip CLUSTER_IP= # 连接 Kubernetes 集群使用的端口。 # 如果是高可用集群,CLUSTER_PORT 是 Kubernetes 集群连接的端口,但是不能等于 6443 端口,可以使用 9443 等没有占用的端口 # 如果是单个 master 节点组成的集群,CLUSTER_PORT 是该 master 节点的暴露的 6443 端口 CLUSTER_PORT= # 是否作为高可用方式初始化/加入 Kubernetes 集群 HA_ENABLED=true # EANBLED_HA=true 时必填,高可用 Kubernetes 集群负载均衡的 master 节点地址,多个地址以逗号分割。e.g. 172.16.120.144,172.16.120.145 HA_APISERVER_BACKEND= # EANBLED_HA=true 时必填,虚拟 IP 在当前物理机上要绑定的网卡名称。网卡需要是可以正常通信的网卡 HA_NETWORK_CARD= # 加入节点时指定当前安装的节点在 Kubernetes 集群中的角色,可选 MASTER,WORKER。不填默认使用 WORKER JOIN_ROLE= # 加入节点(工作节点和控制节点)时必填,加入节点使用的 token,可在控制节点通过 kubeadm token create 创建,24小时过期 JOIN_TOKEN= # JOIN_ROLE=MASTER 时必填,加入使用的密钥。可通过 kubeadm init phase upload-certs --upload-certs 创建,2小时过期 JOIN_MASTER_CERT_KEY= # master 节点(包括初始化的 master 节点和加入集群的 master 节点)默认是否参与服务调度。默认为 false,即不参与调度;为 true 时参与调度 # 服务调度:是否允许 Kubernetes 集群上的服务部署到 master 节点。 # 集群规模大,需要 master 节点管理 node 节点时,不建议参与调度,增加压力。 # 集群规模小,需要尽可能利用一切物理机资源,master 节点可以参与调度。 MASTER_DISPATCH=false
需要配置的具体参数请参照下面表格
安装 master 节点 需要配置的参数名称 HOSTNAME CLUSTER_IP CLUSTER_PORT HA_ENABLED HA_ APISERVER_BACKEND HA_ NETWORK_CARD MASTER_DISPATCH - root 用户下,执行安装脚本:
chmod +x install.sh && ./install.sh master
注意:
多网卡情况下需要通过参数( ‐‐apiserver‐advertise‐address
<ip>
)指定 kubernetes 使用哪块网卡。<ip>
为希望使用的网卡对应的 ip。例如: 指定172.16.16.9所在网卡,使用以下指令:
chmod +x install.sh && ./install.sh master ‐‐apiserver‐advertise‐address 172.16.16.9
- 安装完成之后,访问 http://
<ip>
:31234 可以看到 kubernetes 的 dashboard 界面 。 - 单个 master 节点也可以直接使用,后期随着业务需求增大,可以随时增加 master/node 节点。
加入 kubernetes master 节点
若要加入 kubernetes master 节点,需重新选择一台机器,新的 master 节点不可与其他 master 节点在同一台机器上。集群中每个节点时间应该保持一致。如何同步时间参考 常见问题解答->问题7
- 在本机解压kubernetes-1.18.20-centos-8.3-deploy.zip
-
将解压后目录里的offline-kubernetes-1.18.20-centos-8.3.tar.gz拷贝到要安装 kubernetes 的机器任意目录,然后根据以下命令执行操作:
- 解压:
tar ‐zxvf offline-kubernetes-1.18.20-centos-8.3.tar.gz
- 进入解压后的目录:
cd offline-kubernetes-1.18.20-centos-8.3
- 参照安装 kubernetes master节点和下表编辑
.env
文件,对 Kubernetes 集群进行设置
加入 master 节点 需要配置的参数名称 |
---|
HOSTNAME |
CLUSTER_IP |
CLUSTER_PORT |
HA_ENABLED |
HA_ APISERVER_BACKEND |
HA_ NETWORK_CARD |
JOIN_ROLE |
JOIN_TOKEN |
JOIN_ MASTER_CERT _KEY |
MASTER_DISPATCH |
注意:
如果当前节点并没有在
.env
HA_ APISERVER_BACKEND 中规划,属于后面加入的,那么需要在已经组成集群的每台master节点上执行下面操作:(1) 在安装目录下,编辑
conf/haproxy.cfg
文件,在最后一行加入server master-
<ip>
<ip>
:6443 check
<ip>
为当前节点的 ip例如: server master-172.16.120.146 172.16.120.146:6443 check
(2) 重启容器 docker restart supermap-haproxy
- root 用户下,执行安装脚本:
chmod +x install.sh && ./install.sh join
注意:
多网卡情况下可以按照安装master节点时的参数进行指定网卡。
chmod +x install.sh && ./install.sh join --apiserver-advertise-address 172.16.16.10
- 加入集群成功后,在当前节点使用下面命令查看:
kubectl get nodes
加入 kubernetes node 节点(可选)
若要安装 kubernetes node 节点,需重新选择一台机器,node 节点不可与 master 节点在同一台机器上。集群中每个节点时间应该保持一致。如何同步时间请参考 常见问题解答->问题7
-
拷贝offline-kubernetes-1.18.20-centos-8.3.tar.gz到要安装 kubernetes 的机器任意目录,然后根据以下命令操作:
- 解压:
tar ‐zxvf offline-kubernetes-1.18.20-centos-8.3.tar.gz
- 进入解压后的目录:
cd offline-kubernetes-1.18.20-centos-8.3
- 参照安装 kubernetes master节点和下表编辑
.env
文件,对 Kubernetes 集群进行设置
加入 node 节点 需要配置的参数名称 HOSTNAME CLUSTER_IP CLUSTER_PORT HA_ENABLED HA_ APISERVER_BACKEND HA_ NETWORK_CARD JOIN_TOKEN JOIN_ MASTER_CERT _KEY - root 用户下,执行安装脚本:
chmod +x install.sh && ./install.sh join
注意:
多网卡情况下可以按照安装master节点时的参数进行指定网卡。
chmod +x install.sh && ./install.sh join --apiserver-advertise-address 172.16.16.10
- 加入集群成功后,在kubernetes master节点使用下面命令查看:
kubectl get nodes
常见问题解答
-
如果在安装 node 节点时报如下错误,说明 token 过期,需要 master 节点上使用
kubeadm token create
命令重新创建一个 token 来使用。报错信息如下:
couldn't validate the identify of the API server:abort connection to API server after timeout of 5m0s
-
如果 kubernetes node 节点出现故障,需要从 Kubernetes 集群中移除该节点,请在master节点上执行以下命令:
kubectl delete node <nodeName>
备注:
<nodeName>
是即将移除 Kubernetes 集群的节点的名称。 -
如果 kubernetes master 节点出现故障,需要从 Kubernetes 集群中移除节点,在任意其他 master 节点上执行以下命令:
kubectl delete node <nodeName>
备注:
<nodeName>
是即将移除 Kubernetes 集群的master节点的名称。
进入 etcd
容器内部,删除被移除的 master 节点上的 etcd
服务
kubectl -n kube-system get pod | grep etcd
# 以实际 etcd 服务名称为准,这里是 etcd-master01
kubectl -n kube-system exec -it etcd-master01 sh
在容器内部输入以下命令,查看存在的 etcd
服务
etcdctl --endpoints https://127.0.0.1:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member list
输出类似下面
4710f7f5592b46ed: name=master03 peerURLs=https://10.10.130.211:2380 clientURLs=https://10.10.130.211:2379 isLeader=false
b0634635e7aaf095: name=master02 peerURLs=https://10.10.185.16:2380 clientURLs=https://10.10.185.16:2379 isLeader=true
e3eff812e9c03ad9: name=master01 peerURLs=https://10.10.90.97:2380 clientURLs=https://10.10.90.97:2379 isLeader=false
通过 etcd
服务的 id,删除被移除节点的 etcd
服务
etcdctl --endpoints https://127.0.0.1:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member remove <etcd-id>
<etcd-id>
即为 etcd 服务唯一的 id
移除完成之后,退出 etcd
容器,在其他 kubernetes master 节点上执行下面命令
在安装目录下,编辑 conf/haproxy.cfg
文件,在文件最后删除当前节点负载均衡配置信息,配置信息与下面类似:
server master-<ip> <ip>:6443 check
<ip>
为当前节点的 ip
重启容器:
docker restart supermap-haproxy
前往被移除的 master 节点,清理虚拟 ip 和负载均衡
docker stop supermap-haproxy supermap-keepalived
docker rm supermap-haproxy supermap-keepalived
- 移除的节点如何重置,请在节点上执行以下命令:
kubeadm reset
- 如果要将移除后的节点再次加入Kubernetes集群,请先在被移除的节点上执行 4 操作,再在加入集群的节点上按照 加入 kubernetes master 节点或者加入 kubernetes node 节点(可选)执行
- 如果要卸载 kubernetes,请在各个节点的安装包目录执行以下命令然后重启物理机清理配置:
chmod +x install.sh && ./install.sh down
-
CentOS 8 自带了
chronyc
作为时间同步工具,要同步时间首先需要一台可以连通的时间服务器。然后按照以下步骤进行:(1) 启动
chronyd
服务systemctl enable chronyd
(2) 编辑
/etc/chrony.conf
文件,写入时间服务器地址server 172.16.120.139 iburst
将
172.16.120.139
替换为实际的时间服务器地址(3) 执行命令同步时间
systemctl start chronyd chronyc -a makestep
如果没有时间服务器,也可以通过 chronyd 将当前机器配置成时间服务器,参考以下步骤:
(1) 编辑
/etc/chrony.conf
,写入以下内容allow 172.16.0.0/16 # 设置允许连接到时间服务器的机器的子网,网络 local stratum 10 # 当 server 中提供的公网 NTP 服务器不可用时,采用本地时间作为同步标准
(2) 启动 chronyd
systemctl restart chronyd systemctl enable chronyd