首页 > 其他分享 >etcd3.5.0版本集群部署

etcd3.5.0版本集群部署

时间:2023-02-17 19:22:19浏览次数:47  
标签:版本 证书 ca etcd3.5 cfssl 集群 etcd linux amd64

  参考地址:https://www.cnblogs.com/nf01/articles/15324715.html

       https://www.cnblogs.com/linuxws/p/11194403.html

Etcd是一个分布式键值存储系统,Kubernetes使用Etcd进行数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式部署。使用3台组建集群,则可容忍1台机器故障,使用5台组件集群,则可容忍2台机器故障。

可以与K8S的节点机器复用,也可以独立于K8S集群之外部署,只要ApiServer能连接到就可以。

1.从Github中下载Etcd二进制文件

  下载地址:https://github.com/etcd-io/etcd/releases/download/v3.5.7/etcd-v3.5.7-linux-amd64.tar.gz

2.创建工作目录并解压二进制包

mkdir -p /opt/etcd/{cfg,data,ssl}
tar -zxvf etcd-v3.5.7-linux-amd64.tar.gz
mv etcd-v3.5.7-linux-amd64/{etcd,etcdctl,etcdutl} /usr/local/bin

3.生成相关证书【可略】

  1.下载证书工具cfssl

    cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。

    https://github.com/cloudflare/cfssl/releases

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64

chmod +x cfssl_1.6.3_linux_amd64 cfssljson_1.6.3_linux_amd64 cfssl-certinfo_1.6.3_linux_amd64

mv cfssl_1.6.3_linux_amd64 /usr/local/bin/cfssl
mv cfssljson_1.6.3_linux_amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_1.6.3_linux_amd64 /usr/local/bin/cfssl-certinfo

  2.生成证书

    1.配置生成CA证书的请求文件

cat > ca-csr.json << EOF
{
  "CN": "etcd CA",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Tianjin",
      "ST": "Tianjin",
      "O": "k8s",
      "OU": "System"
    }
  ],  
  "ca": {
      "expiry": "87600h"
  }
}
EOF

    注:CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
      O:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group)

    2.生成CA证书和密钥

cfssl gencert -initca ca-csr.json | cfssljson -bare ca #生成CA证书和密钥

    3.使用自签CA签发Etcd证书

      1.生成证书配置文件(CA 进行签名时需要的配置)

# 生成证书配置文件(CA 进行签名时需要的配置)
cat > ca-config.json << EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
        "expiry": "87600h",
        "usages": [
          "signing",
          "key encipherment",
          "server auth",
          "client auth"
        ]
      }
    }
  }
}
EOF

# 这个策略,有一个默认的配置,和一个profile,可以设置多个profile,这里的profile是etcd。
# 默认策略,指定了证书的有效期是一年(8760h)
# etcd策略,指定了证书的用途
# signing, 表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
# server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证
# client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证

      2.创建生成服务端证书的请求文件

cat > server-csr.json << EOF
{
  "CN": "server",
  "hosts": [
      "127.0.0.1",
    "192.168.64.130",
    "192.168.64.131",
    "192.168.64.132",
    "192.168.64.133",
    "192.168.64.134",
    "10.10.10.1",
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluste.local"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "Tianjin",
      "ST": "Tianjin",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
#上述文件hosts字段中IP为所有etcd节点的集群内部通信ip,一个都不能少!为了方便后期扩容可以多写几个预留的IP。

      3.基于之前生成的ca证书生成证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

      4.移动证书到etcd目录

cp ~/TLS/etcd/{ca,server}*pem /opt/etcd/ssl/

4.创建etcd配置文件

cat > /opt/etcd/cfg/etcd.conf.yml << EOF
# 这是etcd服务器的配置文件。

# 此成员的名称。
name: 'etcd-1'

# 数据目录的路径。
data-dir: /opt/etcd/data

# 专用 wal 目录的路径。
wal-dir:

# 触发快照到磁盘的已提交事务数。
snapshot-count: 10000

# 心跳间隔的时间(以毫秒为单位)。
heartbeat-interval: 100

# 选举超时的时间(以毫秒为单位)。
election-timeout: 1000

# 当后端大小超过给定配额时发出警报。 0 表示使用默认配额。
quota-backend-bytes: 0

# 用于侦听对等流量的逗号分隔 URL 列表。
listen-peer-urls: http://192.168.64.130:2380

# 用于侦听客户端流量的逗号分隔 URL 列表。
listen-client-urls: http://192.168.64.130:2379,http://127.0.0.1:2379

# 要保留的最大快照文件数(0 为无限制)。
max-snapshots: 5

# 要保留的 wal 文件的最大数量(0 是无限制的)。
max-wals: 5

# 逗号分隔的 CORS(跨源资源共享)来源白名单。
cors:

# 该成员的对等 URL 列表,用于向集群的其余部分通告。
# URL 需要是逗号分隔的列表。
initial-advertise-peer-urls: http://192.168.64.130:2380

# 要向公众公布的此成员的客户端 URL 列表。
# URL 需要是逗号分隔的列表。
advertise-client-urls: http://192.168.64.130:2379,http://127.0.0.1:2379

# 用于引导集群的发现 URL。
discovery:

# 有效值包括 'exit', 'proxy'
discovery-fallback: 'proxy'

# 用于发现服务流量的 HTTP 代理。
discovery-proxy:

# 用于引导初始集群的 DNS 域。
discovery-srv:

# 用于引导的初始集群配置。
initial-cluster: etcd-1=http://192.168.64.130:2380,etcd-2=http://192.168.64.131:2380,etcd-3=http://192.168.64.132:2380

# 引导期间 etcd 集群的初始集群令牌。
initial-cluster-token: 'etcd-cluster'

# 初始集群状态 ('new' or 'existing').
initial-cluster-state: 'new'

# 拒绝会导致仲裁丢失的重新配置请求。
strict-reconfig-check: false

# 通过 HTTP 服务器启用运行时分析数据
enable-pprof: true

# 有效值包括 'on', 'readonly', 'off'
proxy: 'off'

# 端点将保持在失败状态的时间(以毫秒为单位)。
proxy-failure-wait: 5000

# 端点刷新间隔的时间(以毫秒为单位)。
proxy-refresh-interval: 30000

# 拨号超时的时间(以毫秒为单位)。
proxy-dial-timeout: 1000

# 写入超时的时间(以毫秒为单位)。
proxy-write-timeout: 5000

# 读取超时的时间(以毫秒为单位)。
proxy-read-timeout: 0

client-transport-security:
  # 客户端服务器 TLS 证书文件的路径。
  cert-file: /opt/etcd/ssl/server.pem

  # 客户端服务器 TLS 密钥文件的路径。
  key-file: /opt/etcd/ssl/server-key.pem

  # 启用客户端证书身份验证。
  client-cert-auth: true

  # 客户端服务器 TLS 可信 CA 证书文件的路径。
  trusted-ca-file: /opt/etcd/ssl/ca.pem

  # 使用生成的证书的客户端 TLS
  auto-tls: false

peer-transport-security:
  # 对等服务器 TLS 证书文件的路径。
  cert-file: /opt/etcd/ssl/server.pem

  # 对等服务器 TLS 密钥文件的路径。
  key-file: /opt/etcd/ssl/server-key.pem

  # 启用对等客户端证书身份验证。
  client-cert-auth: true

  # 对等服务器 TLS 信任的 CA 证书文件的路径。
  trusted-ca-file: /opt/etcd/ssl/ca.pem

  # 使用生成的证书的对等 TLS。
  auto-tls: false

# 自签名证书的有效期,单位是年。
self-signed-cert-validity: 1

# 为 etcd 启用调试级别的日志记录。
log-level: debug

logger: zap

# 指定 'stdout' 或 'stderr' 以跳过 journald 日志记录,即使在 systemd 下运行也是如此。
log-outputs: [stderr]

# 强制创建一个新的单成员集群。
force-new-cluster: false

auto-compaction-mode: periodic
auto-compaction-retention: "1"
EOF

5.创建etcd.service服务配置文件,使用systemd进行管理

cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
Documentation=https://github.com/etcd-io/etcd
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/usr/local/bin/
ExecStart=etcd --config-file=/opt/etcd/cfg/etcd.conf.yml
Restart=on-failure
LimitNOFILE=65536
RestartSec=10s

[Install]
WantedBy=multi-user.target
EOF

 

6.设置开机自启

systemctl daemon-reload
systemctl start etcd.service
systemctl enable etcd.service
systemctl status etcd.service

 

标签:版本,证书,ca,etcd3.5,cfssl,集群,etcd,linux,amd64
From: https://www.cnblogs.com/fanqisoft/p/17131338.html

相关文章

  • 在centos stream 9上搭建k8s最新版本(当前:v1.26.1)集群环境
    为了尽可能契合生产环境的部署情况,这里用kubeadm安装集群,同时方便跟随笔记一步步实践的过程,也更加了解k8s的一些特性和基础知识。先决条件这里将通过虚拟机安装3台centos......
  • Dapr v1.10.0 版本已发布
    Dapr是一套开源、可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性、微服务、无状态以及有状态等应用程序类型。Dapr能够确保开发人员专注于编写业务......
  • Consul简单使用以及集群选举原理
    目录是什么功能有哪些Consul服务搭建下载运行生产者消费者服务搭建生产者&消费者POM生产者Yml消费者Yml消费者java代码ConfigController生产者java代码Controller启动类测......
  • 怎么查看linux内核版本的命令?
     1、uname-a2、cat/proc/version注意:/proc目录存储的是系统信息。比如/proc/cpuinfo存储的cpu信息查看cpu信息 3、uname-r4、cat/etc/issue5、cat/etc/redh......
  • API V3版本签名详解
    1.前言最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少在开发微信支付时的踩坑。目前微信支付的API已经发展到V3版本,采用了流行的Restful风格。......
  • 版本自动更新
    一、需求说明目前出现情况:每次发布新版本,如果用户正在使用小程序,都需要让用户将小程序销毁再重新启动,才能使用最新版本的代码希望当小程序版本更新后,用户打开小程序时自......
  • Spring Cloud +Alibaba+Boot 版本选择方法
     与aliBaBa2021.0.4.0相近的springcloud稳定版本是2021.0.5相应的boot版本是2.6.13 首先确定AliBaba的版本   根据版本分支说明版本说明·alibaba......
  • HDFS数据(跨集群)迁移
    一、数据迁移使用场景1.冷热集群数据同步、分类存储2.整体数据整体搬迁3.数据准实时同步(备份)二、考量因素1.网络传输带宽及时间,是否会影响现有业务2.性能,单机?多......
  • 根composer.json需要php^8.0,但您的php版本(7.4.27)不满足该要求
    我安装了php7.4,但当我在项目中写入composerinstall时,我看到了以下错误:Rootcomposer.jsonrequiresphp^8.0butyourphpversion(7.4.27)doesnotsatisfythatreq......
  • 清除原项目的git版本信息方法
    拉取别人的项目到本地,想要重新开发,然后自己提交到新的仓库地址,就需要把项目中原来的git信息清除掉1、cd到项目的目录,然后执行gitremotermorigin  删除远程地址,将项......