(8)二进制文件方式部署Kubernetes高可用集群----------部署高可用ETCD集群
创建高可用etcd集群
Etcd服务作为kubernetes集群的主数据库,保存了整个kubernetes集群的所有服务信息状态,Etcd主数据库需要在kubernetes各服务之前安装和启动。Etcd服务挂了,kubernete集群也将挂掉。这里,我们将Etcd服务部署在master01、master02、master03这三个节点上做高可用,Etcd集群采用Raft算法选举Leader, 由于Raft算法在做决策时需要多数节点的投票,所以Etcd一般部署集群推荐奇数个节点,推荐的数量为1、3、5或者7个节点构成一个集群(当然数量1时,即单节点)。
官方地址 https://github.com/coreos/etcd/releases
etcd 集群节点规划:
hostname | IP地址 | 节点说明 |
master01 | 192.168.0.143 | 主节点(复用node节点) |
master02 | 192.168.0.144 | 主节点 |
maste03 | 192.168.0.145 | 主节点 |
下面以master01节点(192.168.0.143)为例 ,部署ETCD主数据库。
1.1 关于TLS证书
需要为etcd集群创建加密通信的TLS证书,这里复用以前床架你的kubernetes证书:
admin.pem admin-key.pem ca.pem ca-key.pem kube-proxy.pem kube-proxy-key.pem kubernetes.pem kubernetes-key.pem |
- kubernetes证书的host字段列表中必须宝行上面三台机器的IP和集群虚IP(如果没有配置,后期可以重新匹配好,再重新生成kubernete证书和私钥),否则后续证书校验会失败。
1.2 下载etcd二进制文件
etcd作为kubernetes的存储数据库,使用二进制方式独立安装的时候需注意:
wget https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz tar –xvf etcd-v3.1.5-linux-amd64.tar.gz mv etcd-v3.1.5-linux-amd64/etcd* /usr/local/bin #当然,我们可以自己指定安装目录,但是需要配置对应的环境变量,具体操作如下: mv etcd-v3.1.5-linux-amd64/etcd* /opt/kubernetes/bin #配置对应的环境变量,修改文件 vi /etcd/profile,然后加入环境变量: export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/kubernetes/bin 这样就可以开心的使用etcdctl命令了。。。 |
1.3 创建etcd的服务启动文件
路径:/usr/lib/systemd/system
etcd服务启动文件:etcd.service
[Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target [Service] Type=notify EnvironmentFile=-/opt/kubernetes/config/etcd ExecStart=/opt/kubernetes/bin/etcd \ --name=${ETCD_NAME} \ --data-dir=${ETCD_DATA_DIR} \ --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \ --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \ --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \ --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \ --initial-cluster=${ETCD_INITIAL_CLUSTER} \ --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \ --initial-cluster-state=${ETCD_INITIAL_CLUSTER_STATE} \ --cert-file=/opt/kubernetes/ssl/kubernetes.pem \ --key-file=/opt/kubernetes/ssl/kubernetes-key.pem \ --peer-cert-file=/opt/kubernetes/ssl/kubernetes.pem \ --peer-key-file=/opt/kubernetes/ssl/kubernetes-key.pem \ --trusted-ca-file=/opt/kubernetes/ssl/ca.pem \ --peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target
|
1.4 创建etcd的参数配置文件
路径:/opt/kubernetes/config
etcd参数配置文件:etcd
#[Member] ETCD_NAME="master01" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.0.143:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.0.143:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.0.143:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168.0.143:2379" ETCD_INITIAL_CLUSTER="master01=https://192.168.0.143:2380,master02=https://192.168.0.144:2380,master03=https://192.168.0.145:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="existing"
|
1.5 分发etcd文件
我们这次要配置一个具有3个节点的ETCD集群,因此我们可以复用上边配置好的etcd文件,只需修改一下其中的部分参数即可。
先向剩余节点上分发etcd文件:
#分发etcd参数配置文件 [root@master01 config]# scp etcd 192.168.0.144:/opt/kubernetes/config/ [root@master01 config]# scp etcd 192.168.0.144:/opt/kubernetes/config/ #分发etcd服务启动文件 [root@master01 system]# scp etcd.service 192.168.0.144:/usr/lib/systemd/system [root@master01 system]# scp etcd.service 192.168.0.145:/usr/lib/systemd/system |
1.6 etcd高可用问题
在实现etcd高可用集群部署前,我们需要思考以下几个问题:
【1】etcd启动状态时,数据记录如何处理?
在etcd参数配置文件中有几个关键参数:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd":指定节点的数据存储目录,该目录需要在启动etcd服务之前进行创建。
ETCD_INITIAL_CLUSTER_STATE,它表示当前集群的状态。关于这个参数我们其实最常用的就两种状“new”和“existing”。
- 集群状态为new时,每当etcd服务开启,kubernetes集群等于是开启了一个etcd新的服务,etcd的数据记录从服务启动这一刻开始,然后存储在ETCD_DATA_DIR指定的节点数据存储目录下,如果存储目录原先已有数据,也会将其覆盖掉,更新为最新数据记录。
- 当集群状态为existing时,每当开启etcd服务,kubernetes集群不会从服务开启的这一刻去记录存储数据,而是先从ETCD_DATA_DIR指定的节点数据目录下读取已有存储的数据,并以该数据为原子数据,正式开启etcd服务。
【2】如何保证etcd集群的高可用性?
了解到上面两个参数用途后,我们就可以去部署etcd高可用集群,当然,我们先把原始数据一并擦除掉,在开启master01节点的etcd服务时,master01上etcd服务参数ETCD_INITIAL_CLUSTER_STAT=“new”,保证我们先开启一个etcd服务,并以此为数据记录,依次#etcd member add <masterName> --peer-urls=<masterIP>来加入新的节点etcd服务,后边再启动其他ETCD服务时,kubernetes会自动同步存储数据,保证三台机器上etcd数据一致。
1.7 etcd集群高可用部署
这里我们开始着手部署ETCD高可用集群,基于前边关于etcd配置内容,这里我们逐一在三台master节点进行配置。
1.7.1 master01节点上部署etcd
【1】参数配置文件
路径:/opt/kubernetes/config
etcd参数配置文件:
#[Member] ETCD_NAME="master01" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.0.143:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.0.143:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168. 0.143:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168. 0.143:2379" ETCD_INITIAL_CLUSTER="master01=https://192.168. 0.143:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new" |
首先,我们配置master01节点上etcd,集群节点ETCD_INITIAL_CLUSTER="master01=https://192.168. 0.143:2380",这里我们只配置当前etcd所在主机的节点地址;集群状态ETCD_INITIAL_CLUSTER_STATE="new"先设置为new,这样相当于重新开启的etcd服务为最新的节点服务,/var/lib/etcd/default.etcd目录下存储的数据为最新的,无污染数据。关于etcd的服务文件,三台机器均可以复用上边1.2节内容,不再赘述。
然后开启etcd:
#systemctl daemon-reload #systemctl start etcd #systemctl enable etcd #systemctl status etcd |
使用#etcdctl member list查看一下etcd集群现在状态:
[root@master01 bin]# etcdctl member list a6a9938eeb55321c, started, master01, https://192.168.0.143:2380, https://192.168.0.143:2379 |
这个时候集群只能看到master01节点,接下来我们需要将master02和master03节依次加入集群中:
1.7.2 新加入master02节点到集群
在加入master02节点前,我们需要配置一下master02节点上etcd的参数配置文件:
#[Member] ETCD_NAME="master02" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.0.144:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.0.144:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168. 0.144:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168. 0.144:2379" ETCD_INITIAL_CLUSTER="master01=https://192.168. 0.143:2380,master02=https://192.168. 0.144:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="existing" |
我们发现,master02节点上集群地址和master01上有不同,这里我们将143和144这两台机器的地址均配进去了,且集群状态为existing,这样操作是因为,master01上已经开启etcd服务了,历史数据已经存储下来,master02节点加入时,不必再重新覆盖历史记录,加入到集群后,etcd新节点加入的数据记录将由kubernetes集群自动同步,只要启动master02上etcd服务后,两台机器的etcd数据将会同步,因此,状态改为existing直接使用历史记录即可。
这里,我们在master01主机上使用如下命令:
加入master02节点:
#etcdctl member add master02 --peer-urls="htps://192.168.0.144:2380" |
查看节点:
#etcd member list
a6a9938eeb55321c, started, master01, https://192.168.0.143:2380, https://192.168.0.143:2379
f1349996cc39ffdc, unstarted, , https://192.168.0.144:2379
这时,我们需要开启master02上的etcd服务,让集群将master01和master02机器进行同步。
1.7.3 新加入master03节点到集群
在加入master03节点前,我们需要配置一下master03节点上etcd的参数配置文件:
#[Member] ETCD_NAME="master03" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.0.145:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.0.145:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.0.145:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168.0.145:2379" ETCD_INITIAL_CLUSTER="master01=https://192.168.0.143:2380,master02=https://192.168.0.144:2380,master03=https://192.168.0.145:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="existing" |
部署原理同上,这里我们需要开启master03上的etcd服务,让集群将master01、master02和master03机器数据进行同步。
1.7.4 移除节点
移除节点,命令:
# etcdctl member remove <master_ID> |
1.7.5 注意事项
- 配置kubernetes各个组件时,优先做好节点规划、TLS证书创建和etcd服务配置这几项,然后再进行下一步其它组件部署;
- 三台机器上etcd数据存储均在各自的/var/lib/etcd/default.etcd目录下,且该出处目录先于etcd服务开启前创建,非异常情况下,尽量不要动这个文件夹下的数据;
- 如果需要移除节点,然后重新加入集群,步骤:1、remove移除目标节点;2、擦除节目标点上数据存储目录;3、如果需要重新加入到集群时,必须先擦除目标节点的etcd上存储的数据记录,然后再重启目标节点上的etcd服务;
- 如果反向操作上述步骤,集群将出现异常,etcd服务也会异常。
1.8 验证一下集群服务
[root@master01 bin]# etcdctl member list a6a9938eeb55321c, started, master01, https://192.168.0.143:2380, https://192.168.0.143:2379 f1349996cc39ffdc, started, master02, https://192.168.0.144:2380, https://192.168.0.144:2379 2848385346d30eb, started, master03, https://192.168.0.145:2380, https://192.168.0.145:2379 |
最后,因为我们不需要每次使用集群的时候都开启最新的etcd服务,因此,将三台机器上的etcd集群状态保持一致,即existing,这样集群每次启动都会去历史数据里边读取,并依次将数据同步到三台机器的存储目录下。
而且,为了保持三台机器高可用性和故障时节点自由选举特性,我们需要将三台机器的IP地址均加入到集群中,这里就需要保持ETCD_INITIAL_CLUSTER="master01=https://192.168.0.143:2380,master02=https://192.168.0.144:2380,master03=https://192.168.0.145:2380"在三台节点上是保持一致的。只需修改master01和master02上etcd参数配置文件即可。
通过上述部署操作,我们实现etcd高可用集群部署。之后系列中,我们将部署master节点。
愿你就像早晨八九点钟的太阳,活力十足,永远年轻。
(8)二进制文件方式部署Kubernetes高可用集群----------部署高可用ETCD集群相关推荐
- 内网环境下手动部署kubernetes(v1.26.3)高可用集群
这篇博客主要是记录了手动部署一个高可用的Kubernetes集群的过程.旨在帮助自己及初学者学习kubernetes,并记录下具体的操作过程和总结的知识点.文中可能存在一些问题或不足之处,仅供参考. ...
- OpenStack Train Magnum部署Kubernetes(2)--使用OpenStack界面部署虚拟机
登录OpenStack Dashboard Chrome http://192.168.166.184 admin/admin 上传镜像 项目-计算-镜像 上传cirros镜像 通过界面或者命令行上传 ...
- 部署Kubernetes集群(二进制 v1.18.8版)
第一章 kubernetes 功能介绍 · kubernetes 从入门到实践 · 看云 二进制 部署Kubernetes集群 组件版本 组件 版本 二进制包下载地址 备注 centos 7.8.20 ...
- Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui
Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui 2017年03月17日 20:51:4 ...
- ② kubeadm快速部署Kubernetes集群
文章目录 1. 安装要求 2. 目标 3. 准备环境 4. 所有节点安装Docker/kubeadm/kubelet 4.1 安装Docker(以一台为例,其他相同) 4.2 添加kubernetes ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群
说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...
- kubeadm部署kubernetes
kubeadm部署kubernetes kubeadm 部署方式介绍 单master节点环境准备 卸载kubernetes kubeadm init命令文档 kubeadm 部署方式介绍 1.使用ku ...
- Kubernetes的四种用户部署场景
http://www.dockone.io/article/2359 Kubernetes可以作为容器编排引擎.PaaS或者作为云原生应用的核心基础架构被用户部署到生产环境.这些用例并不是相互排斥的. ...
- [原]部署kubernetes dashboard(二)
####################### 以下为声明 ##################### 此文档是之前做笔记在两台机上进行的实践,kubernetes处于不断开发阶段 不能保证每 ...
最新文章
- 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码
- dedecms--数据库
- python安装没有pip选项_python-3.x – 在ubuntu上没有pip的python安装
- Makefile的补充学习
- Effective java笔记3--类和接口1
- DataTable中Compute计算函数
- vmstat命令 查看内存、CPU占用
- android直播刷礼物特效,Android直播送礼物发消息页面(仿印客直播)
- 硬盘数据恢复方法有哪些?希望这些方法能帮助你
- 合作模式歌利亚机器人_《歌利亚》画面战斗及机器人制作试玩图文心得 歌利亚好玩吗...
- Android 中光线传感器的使用详解
- login.keyring的问题
- 开源测试平台RunnerGo,测试工程师必备
- 如果万物数连,那么建筑应当如何与大数据结合?
- C# 开发企业内部微应用接入钉钉获取用户信息
- 彻底的理解:WebService到底是什么?
- 聊聊网络安全态势感知之一
- Joomla目录遍历及远程代码(CVE-2021-23132)--避坑指南
- 【项目实战开发】第三章——在线生鲜商城系统
- 安卓之ViewFlipper实现渐变视差导航页