介绍


etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点。

简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过gRPC提供接口调用

安全:支持TLS通信,并可以针对不同的用户进行对key的读写控制

高性能:10,000 /秒的写性能

本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复【K8s实战】获取

注: K8s的集群相关数据是存放在Etcd中的,所有我们得先部署

架构


cfssl安装


Kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 和其它证书。

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64mv cfssl_linux-amd64 /usr/local/bin/cfsslmv cfssljson_linux-amd64 /usr/local/bin/cfssljsonmv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

创建证书目录


[root@master-01 ssl]#mkdir /etc/etcd/ssl -p[root@master-01 ssl]#mkdir /etc/kubernetes/ssl -p[root@master-01 ssl]##cd /etc/etcd/ssl

生成证书


1. Etcd ca配置

[root@master-01 ssl]# cat << EOF | tee ca-config.json{"signing": {"default": {"expiry": "87600h"},"profiles": {"etcd": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"]}}}}EOF

2. Etcd ca证书

[root@master-01 ssl]# cat << EOF | tee ca-csr.json{"CN": "etcd CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Hangzhou","ST": "Hangzhou"}]}EOF

3. etcd server证书

[root@master-01 ssl]# cat << EOF | tee server-csr.json{"CN": "etcd","hosts": ["192.168.209.130","192.168.209.131","192.168.209.132"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Hangzhou","ST": "Hangzhou"}]}EOF

3. 生成etcd ca证书和私钥 初始化ca

[root@master-01 ssl]# lsca-config.json ca-csr.json server-csr.json[root@master-01 ssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca2019/03/09 14:49:51 [INFO] generating a new CA key and certificate from CSR2019/03/09 14:49:51 [INFO] generate received request2019/03/09 14:49:51 [INFO] received CSR2019/03/09 14:49:51 [INFO] generating key: rsa-20482019/03/09 14:49:51 [INFO] encoded CSR2019/03/09 14:49:51 [INFO] signed certificate with serial number 131013203369168241950883398321469825148900357407[root@master-01 ssl]# lsca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server-csr.json

****4.  生成server 证书

[root@master-01 ssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd server-csr.json | cfssljson -bare server2019/03/09 14:53:18 [INFO] generate received request2019/03/09 14:53:18 [INFO] received CSR2019/03/09 14:53:18 [INFO] generating key: rsa-20482019/03/09 14:53:18 [INFO] encoded CSR2019/03/09 14:53:18 [INFO] signed certificate with serial number 1346689003013978487615203135781755822261954464372019/03/09 14:53:18 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable forwebsites. For more information see the Baseline Requirements for the Issuance and Managementof Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);specifically, section 10.2.3 ("Information Requirements").[root@master-01 ssl]# lsca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server.csr server-csr.json server-key.pem server.pem

以上生成etcd证书完成,只需要会使用即可,不用过多深入研究

同步证书


拷贝证书 master-02、master-03上

[root@master-01 ssl]# scp * 192.168.209.131:/etc/etcd/ssl/[root@master-01 ssl]# scp * 192.168.209.132:/etc/etcd/ssl/

etcd 部署


1. 解压缩并同步二进制文件到 master-02、master-03

[root@master-01 ~]# tar xf etcd-v3.3.12-linux-amd64.tar.gz [root@master-01 ~]# cd etcd-v3.3.12-linux-amd64[root@master-01 etcd-v3.3.12-linux-amd64]# cp etcd etcdctl /usr/bin/[root@master-01 etcd-v3.3.12-linux-amd64]# scp etcd etcdctl 192.168.209.131:/usr/bin/[root@master-01 etcd-v3.3.12-linux-amd64]# scp etcd etcdctl 192.168.209.132:/usr/bin/

2. 创建etcd数据目录

[root@master-01 ~]# mkdir /var/lib/etcd

3. 配置etcd文件

[root@master-01 ~]# cat /etc/etcd/etcd.conf # configure file for etcd.service#[Member]ETCD_NAME="infra1" ETCD_DATA_DIR="/var/lib/etcd/infra1.etcd"ETCD_LISTEN_PEER_URLS="https://0.0.0.0:2380"ETCD_LISTEN_CLIENT_URLS="https://0.0.0.0:2379"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.209.130:2380"ETCD_ADVERTISE_CLIENT_URLS="https://192.168.209.130:2379"ETCD_INITIAL_CLUSTER="infra1=https://192.168.209.130:2380,infra2=https://192.168.209.131:2380,infra3=https://192.168.209.132:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_INITIAL_CLUSTER_STATE="new"#[Security]ETCD_CERT_FILE="/etc/etcd/ssl/server.pem"ETCD_KEY_FILE="/etc/etcd/ssl/server-key.pem"ETCD_TRUSTED_CA_FILE="/etc/etcd/ssl/ca.pem"ETCD_CLIENT_CERT_AUTH="true"ETCD_PEER_CERT_FILE="/etc/etcd/ssl/server.pem"ETCD_PEER_KEY_FILE="/etc/etcd/ssl/server-key.pem"ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/ssl/ca.pem"ETCD_PEER_CLIENT_CERT_AUTH="true"ETCD_PEER_CERT_FILE="/etc/etcd/ssl/server.pem"ETCD_PEER_KEY_FILE="/etc/etcd/ssl/server-key.pem"ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/ssl/ca.pem"ETCD_PEER_CLIENT_CERT_AUTH="true"

ETCD_NAME 节点名称

ETCD_DATA_DIR 数据目录

ETCD_LISTEN_PEER_URLS 集群通信监听地址

ETCD_LISTEN_CLIENT_URLS 客户端访问监听地址

ETCD_INITIAL_ADVERTISE_PEER_URLS 集群通告地址

ETCD_ADVERTISE_CLIENT_URLS 客户端通告地址

ETCD_INITIAL_CLUSTER 集群节点地址

ETCD_INITIAL_CLUSTER_TOKEN 集群Token

ETCD_INITIAL_CLUSTER_STATE 加入集群的当前状态,new是新集群,existing表示加入已有集群

注意:  master-02、master-03节点上需要修改ETCD_NAME 和对应IP地址

4.. 配置etcd启动文件

[root@master-01 ~]# cat /usr/lib/systemd/system/etcd.service

[Unit]Description=Etcd ServerAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]Type=notifyWorkingDirectory=/var/lib/etcd/EnvironmentFile=-/etc/etcd/etcd.conf# set GOMAXPROCS to number of processorsExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\" --cert-file=\"${ETCD_CERT_FILE}\" --key-file=\"${ETCD_KEY_FILE}\" --trusted-ca-file=\"${ETCD_TRUSTED_CA_FILE}\" --client-cert-auth=\"${ETCD_CLIENT_CERT_AUTH}\" --peer-cert-file=\"${ETCD_PEER_CERT_FILE}\" --peer-key-file=\"${ETCD_PEER_KEY_FILE}\" --peer-trusted-ca-file=\"${ETCD_PEER_TRUSTED_CA_FILE}\" --peer-client-cert-auth=\"${ETCD_PEER_CLIENT_CERT_AUTH}\""Restart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.target

5. 同步配置及启动文件到 master-02、master-03

[root@master-01 ~]# scp /etc/etcd/etcd.conf 192.168.209.132:/etc/etcd/[root@master-01 ~]# scp /etc/etcd/etcd.conf 192.168.209.131:/etc/etcd/[root@master-01 ~]# scp /usr/lib/systemd/system/etcd.service 192.168.209.131:/usr/lib/systemd/system/[root@master-01 ~]# scp /usr/lib/systemd/system/etcd.service 192.168.209.132:/usr/lib/systemd/system/

6. 启动etcd,注意02 03 要同样配置下

[root@master-01 ssl]# systemctl daemon-reload[root@master-01 ssl]# systemctl enable etcd[root@master-01 ssl]# systemctl start etcd

7. 验证集群状态

[root@master-01 ~]# etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/server.pem --key-file=/etc/etcd/ssl/server-key.pem --endpoints="https://192.168.209.130:2379,https://192.168.209.131:2379,https://192.168.209.132:2379" cluster-healthmember 586a62bfa8ca5f8a is healthy: got healthy result from https://192.168.209.130:2379member 5f55d6687099cd91 is healthy: got healthy result from https://192.168.209.131:2379member ee591e661050ac9d is healthy: got healthy result from https://192.168.209.132:2379cluster is healthy

进行到这一步,说明etcd集群部署完成啦,下一章介绍部署高可用K8s集群,敬请期待,谢谢!

END

如果你觉得文章还不错,请大家点『好看』分享下。你的肯定是我最大的鼓励和支持。

Kubernetes集群搭建之Etcd集群配置篇的更多相关文章

  1. Kubernetes集群部署之三ETCD集群部署

    kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes 集群机器k8s-master.k8s-node-1.k ...

  2. k8s集群中遇到etcd集群故障的排查思路

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: 1 2 3 4 5 6 7 8 9 10 11 [roo ...

  3. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  4. mongodb3.6集群搭建:分片+副本集

    mongodb是最常用的noSql数据库,在数据库排名中已经上升到了前五.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  5. Hadoop3集群搭建之——安装hadoop,配置环境

    接上篇:Hadoop3集群搭建之——虚拟机安装 下篇:Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简单操作 上篇已 ...

  6. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  7. k8s集群之上运行etcd集群

    一.知识点: 1.headless services NOTE:: 我们在k8s上运行etcd集群,集群间通告身份是使用dns,不能使用pod ip,因为如果pod被重构了ip会变,在这种场景中不能直 ...

  8. 基于Dokcer搭建Redis集群搭建(主从集群)

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...

  9. Elasticsearch集群搭建教程及生产环境配置

    Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性. 本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一 ...

随机推荐

  1. MIUI通过xposed自动设置root权限

    在小米手机上,每次安装一个自己的插件总需要打开安全中心进行root权限授权,非常的麻烦,总共需要电5次确认,每次需要等5秒 因为插件开发的需求,希望重启计算机时候判断是否已经root,未root则自动 ...

  2. idea快捷键(后续更新)

    自动补全当前行的标点符号 ctrl + shirt + 回车 跳到下一行 shirt +回车 复制一行 crtl + d 删除一行 ctrl + y 提示报错 alt + 回车 查看当前可以产什么参数 ...

  3. spring boot + vue + element-ui全栈开发入门

    今天想弄弄element-ui  然后就在网上找了个例子 感觉还是可以用的  第一步是完成了  果断 拿过来  放到我这里这  下面直接是连接  点进去 就可以用啊 本想着不用vue   直接导入连接 ...

  4. JavaScript中的Undefined / Null 类型相关说明

    1,综述: ※Undefined 和 Null是JavaScript中的两种数据类型(其他的类型还有:Boolean, String, Number, Object). ※Undefined类型只有一 ...

  5. USB设备类学习笔记

    usb audio class 版本目前有3个版本  分别是1.0,2.0,3.0:1.0针对各个厂家的设备具有不同的描述符,而2.0则将它们统一简化,3.0则是最新的,还没有与2.0作进一步比较:因 ...

  6. mycat跟踪分析

    mycat版本1.6 192.168.5.66 从 192.168.5.67主 一个user表 验证主从 log4j2修改日志level为debug schema.xml配置 启动服务,打开日志tai ...

  7. crontab计划不执行问题

    问题现象:编写了一个自动释放磁盘空间的脚本,并将其加入到crontab中.crontab显示如下:# crontab -l10 5 * * * bash /home/backup/bin/clear. ...

  8. Ubuntu 16.04更新grub-pc提示脚本/var/lib/dpkg/info/grub-pc.postinst 执行错误

    错误信息: $ sudo aptitude upgrade 下列仅部分安装的软件包将被配置: grub-pc 将不会安装,升级或者删除任何软件包. 0 个软件包被升级,新安装 0 个, 0 个将被删除 ...

  9. ubuntu installs matlab2017a

    cd mkdir matlab sudo mount -o loop *1.iso matlab sudo ./matlab/install ... sudo mount -o loop *2.iso ...

  10. jenkins as code 与go语言学习

    前言 最近看jenkins as code这个概念在很多文章中提起,持续交付中八大原则也有把一切都放入版本管理,最近准备把我们公司用的一些jenkins上的job的配置也放到git中,由于https: ...