以二进制文件安装K8S之部署etcd高可用集群
概述
前提条件:已经准备好CA根证书(etcd在制作CA证书时需要CA根证书),并且把CA根证书文件ca.key和ca.crt拷贝到3个etcd节点的/etc/kubernetes/pki目录下。
3台主机的IP地址分别为192.168.3.135、192.168.3.136、192.168.3.137。
要安装的etcd版本:v3.4.13-linux-amd64。
安装etcd
下载etcd二进制文件,配置systemd服务。
从GitHub官网下载etcd二进制文件,例如etcd-v3.4.13-linux-amd64.tar.gz。
解压缩后得到etcd和etcdctl文件,将它们复制到/usr/bin目录下。
然后将其部署为一个systemd的服务,创建systemd服务配置文件/usr/lib/systemd/system/etcd.service,内容示例如下:
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
[Service]
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/bin/etcd
Restart=always
[Install]
WantedBy=multi-user.target
其中,EnvironmentFile指定配置文件的全路径,例如/etc/etcd/etcd.conf,其中的参数以环境变量的格式进行配置,配置内容如下所示。
如上添加systemd服务需要在所有etcd节点都执行相同的操作。
创建etcd的CA证书
先创建一个x509 v3配置文件etcd_ssl.cnf,其中subjectAltName参数(alt_names)包括所有etcd主机的IP地址,例如:
[ req ]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 192.168.3.135
IP.2 = 192.168.3.136
IP.3 = 192.168.3.137
然后使用openssl命令创建etcd的服务端CA证书,包括etcd_server.key和etcd_server.crt文件,将其保存到/etc/etcd/pki目录下。
openssl genrsa -out etcd_server.key 2048
openssl req -new -key etcd_server.key -config etcd_ssl.cnf -subj "/CN=etcd-server" -out etcd_server.csr
openssl x509 -req -in etcd_server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_server.crt
再创建客户端使用的CA证书,包括etcd_client.key和etcd_client.crt文件,也将其保存到/etc/etcd/pki目录下,后续供kube-apiserver连接etcd时使用。
openssl genrsa -out etcd_client.key 2048
openssl req -new -key etcd_client.key -config etcd_ssl.cnf -subj "/CN=etcd-client" -out etcd_client.csr
openssl x509 -req -in etcd_client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -days 36500 -extensions v3_req -extfile etcd_ssl.cnf -out etcd_client.crt
最后在/etc/etcd/pki/目录下将会看到4个文件,分别是:etcd_client.crt,etcd_client.key,etcd_server.crt和etcd_server.key。
[root@m1 ~]# ll /etc/etcd/pki/
total 16
-rw-r--r--. 1 root root 1086 Aug 17 06:25 etcd_client.crt
-rw-------. 1 root root 1679 Aug 17 06:25 etcd_client.key
-rw-r--r--. 1 root root 1086 Aug 17 06:20 etcd_server.crt
-rw-------. 1 root root 1675 Aug 17 06:20 etcd_server.key
需要将这四个文件都拷贝到到所有ectd节点上。
etcd参数配置
接下来对3个etcd节点进行配置。
etcd节点的配置方式包括启动参数、环境变量、配置文件等,本例使用环境变量方式将其配置到/etc/etcd/etcd.conf文件中,供systemd服务读取。
# 节点1的配置
ETCD_NAME=etcd1
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.3.135:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.135:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.3.135:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.135:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380"
ETCD_INITIAL_CLUSTER_STATE=new
# 节点2的配置
ETCD_NAME=etcd2
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.3.136:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.136:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.3.136:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.136:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380"
ETCD_INITIAL_CLUSTER_STATE=new
# 节点3的配置
ETCD_NAME=etcd3
ETCD_DATA_DIR=/etc/etcd/data
ETCD_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_CLIENT_CERT_AUTH=true
ETCD_LISTEN_CLIENT_URLS=https://192.168.3.137:2379
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.3.137:2379
ETCD_PEER_CERT_FILE=/etc/etcd/pki/etcd_server.crt
ETCD_PEER_KEY_FILE=/etc/etcd/pki/etcd_server.key
ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/pki/ca.crt
ETCD_LISTEN_PEER_URLS=https://192.168.3.137:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.3.137:2380
ETCD_INITIAL_CLUSTER_TOKEN=etcd-c1uster
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380"
ETCD_INITIAL_CLUSTER_STATE=new
主要配置参数包括为客户端和集群其他节点配置的各监听URL地址(均为HTTPS URL地址),并配置相应的CA证书参数。
etcd服务相关的参数如下。
- ETCD_NAME:etcd节点名称,每个节点都应不同,例如etcd1、etcd2、etcd3。
- ETCD_DATA_DIR:etcd数据存储目录,例如/etc/etcd/data/etcd1。
- ETCD_LISTEN_CLIENT_URLS和ETCD_ADVERTISE_CLIENT_URLS:为客户端提供的服务监听URL地址,例如https://192.168.3.135:2379。
- ETCD_LISTEN_PEER_URLS和ETCD_INITIAL_ADVERTISE_PEER_URLS:为本集群其他节点提供的服务监听URL地址,例如https://192.168.3.135:2380。
- ETCD_INITIAL_CLUSTER_TOKEN:集群名称,例如etcd-cluster。
- ETCD_INITIAL_CLUSTER:集群各节点的endpoint列表,例如"etcd1=https://192.168.3.135:2380,etcd2=https://192.168.3.136:2380,etcd3=https://192.168.3.137:2380"。
- ETCD_INITIAL_CLUSTER_STATE:初始集群状态,新建集群时设置为“new”,集群已存在时设置为“existing”。
CA证书相关的配置参数如下。
- ETCD_CERT_FILE:etcd服务端CA证书-crt文件全路径,例如
/etc/etcd/pki/etcd_server.crt。 - ETCD_KEY_FILE:etcd服务端CA证书-key文件全路径,例如
/etc/etcd/pki/etcd_server.key。 - ETCD_TRUSTED_CA_FILE:CA根证书文件全路径,例如
/etc/kubernetes/pki/ca.crt。 - ETCD_CLIENT_CERT_AUTH:是否启用客户端证书认证。
- ETCD_PEER_CERT_FILE:集群各节点相互认证使用的CA证书-crt文件全路径,例如
/etc/etcd/pki/etcd_server.crt。 - ETCD_PEER_KEY_FILE:集群各节点相互认证使用的CA证书-key文件全路径,例如
/etc/etcd/pki/etcd_server.key。 - ETCD_PEER_TRUSTED_CA_FILE:CA根证书文件全路径,例如
/etc/kubernetes/pki/ca.crt。
启动etcd集群
基于systemd的配置,在3台主机上分别启动etcd服务,并设置为开机自启动:
systemctl restart etcd && systemctl enable etcd
然后用etcdctl客户端命令行工具携带客户端CA证书,运行etcdctl endpoint health命令访问etcd集群,验证集群状态是否正常,命令如下。
etcdctl --cacert=/etc/kubernetes/pki/ca.crt --cert=/etc/etcd/pki/etcd_client.crt --key=/etc/etcd/pki/etcd_client.key --endpoints=https://192.168.3.135:2379,https://192.168.3.136:2379,https://192.168.3.137:2379 endpoint health
https://192.168.3.135:2379 is healthy: successfully committed proposal: took = 10.227801ms
https://192.168.3.136:2379 is healthy: successfully committed proposal: took = 10.880941ms
https://192.168.3.137:2379 is healthy: successfully committed proposal: took = 12.226104ms
结果显示各节点状态均为“healthy”,说明集群正常运行。至此,一个启用了HTTPS的3节点etcd集群就部署完成了。
以二进制文件安装K8S之部署etcd高可用集群的更多相关文章
- lvs+keepalived部署k8s v1.16.4高可用集群
一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...
- Centos7.6部署k8s v1.16.4高可用集群(主备模式)
一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...
- 部署MYSQL高可用集群
mysql-day08 部署MYSQL高可用集群 u 集群架构 ...
- 部署zookeepe高可用集群
部署zookeepe高可用集群 部署规划 Nno1 192.16 ...
- (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)
参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...
- 一键部署Kubernetes高可用集群
三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
- kubernetes之手动部署k8s 1.14.1高可用集群
1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...
- k8s集群中部署Rook-Ceph高可用集群
先决条件 为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作. 为了配置 Ceph 存储集群,至少需要以下本地存储选项之一: 原始设备(无分区或格式化文件系统) ...
- 高可用Kubernetes集群-3. etcd高可用集群
五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...
随机推荐
- ext4 扩容磁盘的方式方法
ext4 扩容磁盘的方式方法 背景 前期一直处理xfs,lvm磁盘的扩容 很少处理ext4的磁盘扩容 今天发现自己竟然对这一块有盲区. 晚上回家自己学习研究了会儿, 发现知识点还挺多 所以总结一下. ...
- [转帖]Kafka之ack机制
前言 之前的博客里说了,Kafka的消息同步是一种ISR机制,本质上是"完全同步"的一种优化. 都在说,消息被ISR中所有副本都写入才算写入成功.但是这样未免定的太死板了,所以,K ...
- ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包
ChatGPT学习之_shell脚本一例-查找版本冲突的第三方jar包 背景 自从换了Java后 产品里面用到了非常多的第三方组建,也就是很多jar包. 产品内的研发规范要求, jar包不能带版本号和 ...
- 通过写脚本的方式自动获取JVM内的进程堆栈信息等内容
公司转java之后 经常会遇到java进程占用CPU特别多的情况. 每次连上机器进行处理都比较慢了. 索性自己写一个脚本, 把想要查询的信息直接汇总进去. 这样的话 就简单很多了. 脚本也很简单主要如 ...
- dump分析器winbdg
工具: winbdg WinDBG不是专门用于调试.Net程序的工具,它更偏向于底层,可用于内核和驱动调试.进行普通的.Net程序调试还是使用微软专为.Net开发的调试工具MDBG更方便一些.但是Wi ...
- Docker系列教程01--简介
Docker 入门教程 作者: 阮一峰 日期: 2018年2月 9日 2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业. 但是,许多人并不清楚 Docker 到底是什么, ...
- Docker 安装 MySQL8 数据库
创建数据卷 mkdir -p /usr/mysql/conf /usr/mysql/data chmod -R 755 /usr/mysql/ 创建配置文件 vim /usr/mysql/conf/m ...
- 通过Demo学WPF—数据绑定(一)✨
前言 想学习WPF,但是看视频教程觉得太耗时间,直接看文档又觉得似懂非懂,因此想通过看Demo代码+文档的方式进行学习. 准备 微软官方其实提供了WPF的一些Demo,地址为:microsoft/WP ...
- C++ LibCurl实现Web隐藏目录扫描
LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP.FTP.SMTP.POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发 ...
- 还没发布就来了?iPhone 15系列机型价格配置图曝光
明天凌晨1点,iPhone 15系列就将正式发布,不过在发布前夕,有网友根据此前的各种爆料,制作了一张有关新iPhone的各型号价格和配置的图片,虽然这并不是官方公布的图片,但是也或多或少包含了人们对 ...