以二进制文件安装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集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...
随机推荐
- [转帖]RocksDB 简介
https://docs.pingcap.com/zh/tidb/stable/rocksdb-overview RocksDB 是由 Facebook 基于 LevelDB 开发的一款提供键值存储与 ...
- [转帖]UTF8 和 AL32UTF8 的区别
本文章向大家介绍UTF8 和 AL32UTF8 的区别,主要内容包括 .使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. UTF8 和 AL32UTF8 ...
- 【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...
- 【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- 微信小程序网页嵌入开发
无脑开发 下载微信开发者工具 新建一个项目找到index开头的进去全选删除粘贴下面代码 <!-- html --> <!-- 指向嵌入外部链接的地址 --> <web-v ...
- [洛谷]P1967-最小生成树-好题推荐
[NOIP2013 提高组] 货车运输 题目背景 NOIP2013 提高组 D1T3 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路.每 ...
- 大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求
大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手.它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解.LL ...
- 使用.NET Core实现不同服务器SQL Server 数据库同步方案
代码片段: 1 using DataSync.Core; 2 using Furion.Logging.Extensions; 3 using Microsoft.Data.SqlClient; 4 ...
- CH57x/CH58x/CH59x iBecaon广播
首先要先了解iBecaon.iBecaon是苹果基于BLE广播的一个技术规范:只要设备生产商符合特定标准,就可以要求苹果授权它们在其设备上使用"iBeacon" 商标. 在设备生产 ...
- Linux反空闲的设置和关闭
有一定工作经验的运维人基本都会遇到这样的场景,某个窗口自动断开了,提示超时: [oracle@jystdrac1 ~]$ timed out waiting for input: auto-logou ...