概述

前提条件:已经准备好CA根证书(etcd在制作CA证书时需要CA根证书),并且把CA根证书文件ca.keyca.crt拷贝到3个etcd节点的/etc/kubernetes/pki目录下。

3台主机的IP地址分别为192.168.3.135192.168.3.136192.168.3.137

要安装的etcd版本:v3.4.13-linux-amd64

安装etcd

下载etcd二进制文件,配置systemd服务。

从GitHub官网下载etcd二进制文件,例如etcd-v3.4.13-linux-amd64.tar.gz

解压缩后得到etcdetcdctl文件,将它们复制到/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.keyetcd_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.keyetcd_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.crtetcd_client.keyetcd_server.crtetcd_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高可用集群的更多相关文章

  1. lvs+keepalived部署k8s v1.16.4高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  2. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

  3. 部署MYSQL高可用集群

                                                  mysql-day08     部署MYSQL高可用集群 u 集群架构                   ...

  4. 部署zookeepe高可用集群

                                                                部署zookeepe高可用集群 部署规划 Nno1         192.16 ...

  5. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  6. 一键部署Kubernetes高可用集群

    三台master,四台node,系统版本为CentOS7 IP ROLE 172.60.0.226 master01 172.60.0.86 master02 172.60.0.106 master0 ...

  7. Hadoop部署方式-高可用集群部署(High Availability)

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...

  8. 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 ...

  9. k8s集群中部署Rook-Ceph高可用集群

    先决条件 为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作. 为了配置 Ceph 存储集群,至少需要以下本地存储选项之一: 原始设备(无分区或格式化文件系统) ...

  10. 高可用Kubernetes集群-3. etcd高可用集群

    五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...

随机推荐

  1. [转帖]RocksDB 简介

    https://docs.pingcap.com/zh/tidb/stable/rocksdb-overview RocksDB 是由 Facebook 基于 LevelDB 开发的一款提供键值存储与 ...

  2. [转帖]UTF8 和 AL32UTF8 的区别

    本文章向大家介绍UTF8 和 AL32UTF8 的区别,主要内容包括 .使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下.  UTF8 和 AL32UTF8 ...

  3. 【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  4. 【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  5. 微信小程序网页嵌入开发

    无脑开发 下载微信开发者工具 新建一个项目找到index开头的进去全选删除粘贴下面代码 <!-- html --> <!-- 指向嵌入外部链接的地址 --> <web-v ...

  6. [洛谷]P1967-最小生成树-好题推荐

    [NOIP2013 提高组] 货车运输 题目背景 NOIP2013 提高组 D1T3 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路.每 ...

  7. 大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求

    大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手.它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解.LL ...

  8. 使用.NET Core实现不同服务器SQL Server 数据库同步方案

    代码片段: 1 using DataSync.Core; 2 using Furion.Logging.Extensions; 3 using Microsoft.Data.SqlClient; 4 ...

  9. CH57x/CH58x/CH59x iBecaon广播

    首先要先了解iBecaon.iBecaon是苹果基于BLE广播的一个技术规范:只要设备生产商符合特定标准,就可以要求苹果授权它们在其设备上使用"iBeacon" 商标. 在设备生产 ...

  10. Linux反空闲的设置和关闭

    有一定工作经验的运维人基本都会遇到这样的场景,某个窗口自动断开了,提示超时: [oracle@jystdrac1 ~]$ timed out waiting for input: auto-logou ...