以二进制文件安装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集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...
随机推荐
- [转帖]APIServer dry-run and kubectl diff
https://kubernetes.io/blog/2019/01/14/apiserver-dry-run-and-kubectl-diff/ Monday, January 14, 2019 A ...
- [转帖]JAVA之G1垃圾回收器
https://www.cnblogs.com/boanxin/p/12292331.html 概述 G1 GC,全称Garbage-First Garbage Collector,通过-XX:+Us ...
- 一文带你搞懂如何优化慢SQL
作者:京东科技 宋慧超 一.前言 最近通过SGM监控发现有两个SQL的执行时间占该任务总执行时间的90%,通过对该SQL进行分析和优化的过程中,又重新对SQL语句的执行顺序和SQL语句的执行计划进行了 ...
- Nginx被它打败了?
Nginx被它打败了? 我们经常使用Nginx作为我们系统的代理,通常情况下是完全够用的,但是有时候业务的复杂性,我们也需要使用在网关中去代理中做一些业务,这个时候Nginx也可以使用lua脚本扩展, ...
- file文件转为base64
场景描述 在工作中,我们经常需要进行文件上传. 比如在进行图片上传的时候, 我们需要将上传的图片展示出来. 这个时候我们就需要将file文件转化为base64. 将file文件转化为base64 // ...
- 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
网上有很多关于IM的教程和技术博文,有亿级用户的IM架构,有各种浅谈原创自研IM架构,也有微信技术团队分享的技术文章,有些开发者想根据这些资料自研IM.理想很丰满,现实很骨感,最后做出来的产品很难达到 ...
- 强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN
强化学习从基础到进阶-常见问题和面试必知必答[4]::深度Q网络-DQN.double DQN.经验回放.rainbow.分布式DQN 1.核心词汇 深度Q网络(deep Q-network,DQN) ...
- 【深度学习项目一】全连接神经网络实现mnist数字识别
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...
- 4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章<内核中实现Dump进程转储>中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚 ...
- Python 运用zabbix开发简易巡检工具
利用SSH或者Zabbix监控,配合Django开发框架,改造出属于自己的监控平台,实现包括主机图形,自动发现,计划任务,批量cmd执行,服务监控,日志监控等功能,由于公司机器混乱,基本上市面上的所有 ...