etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点:
1.简单:相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过gRPC提供接口调用
2.安全:支持TLS通信,并可以针对不同的用户进行对key的读写控制
3.高性能:10,000/秒的写性能

开放端口:

firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --zone=public --add-port=4001/tcp --permanent
firewall-cmd --reload

    

设置hosts

172.16.150.25 etcd1
172.16.150.26 etcd2
172.16.150.27 etcd3

  

创建用户

mkdir -p /opt/platform/etcd
useradd etcd -d /opt/platform/etcd -c "Etcd user" -r -s /sbin/nologin

  

安装cfssl

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

 

创建CA证书配置,生成CA证书和私钥, 只需要在一台机器上操作即可

先用 cfssl 命令生成包含默认配置的 config.json和 csr.json文件

mkdir /opt/ssl
cd /opt/ssl
cfssl print-defaults config > config.json
cfssl print-defaults csr > csr.json

  

然后分别修改这两个文件为如下内容

vim /opt/ssl/config.json
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}

config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示client可以用该 CA 对server提供的证书进行验证;
client auth:表示server可以用该CA对client提供的证书进行验证;

vim /opt/ssl/csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Wuhan",
"L": "Hubei",
"O": "k8s",
"OU": "System"
}
]
}

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

生成CA 证书和私钥

cd /opt/ssl
cfssl gencert -initca csr.json | cfssljson -bare ca

  

CA有关证书列表如下

[root@k8s-console ssl]# tree
.
├── ca.csr
├── ca-key.pem
├── ca.pem
├── config.json
└── csr.json

  

创建etcd证书配置,生成 etcd 证书和私钥

在/opt/ssl 下添加文件 etcd-csr.json,内容如下

{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"172.16.150.25",
"172.16.150.26",
"172.16.150.27"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanghai",
"L": "Shanghai",
"O": "etcd",
"OU": "Etcd Security"
}
]
}

  

生成etcd证书和密钥

cd /opt/ssl
cfssl gencert -ca=/opt/ssl/ca.pem \
-ca-key=/opt/ssl/ca-key.pem \
-config=/opt/ssl/config.json \
-profile=kubernetes etcd-csr.json | cfssljson -bare etcd

 

给证书读权限

chmod 644 /opt/ssl/*

  

etcd 有关证书证书列表如下

etcd.csr etcd-csr.json etcd-key.pem etcd.pem

  

至此CA证书就弄完了, 将这台机器侠/opt/ssl下所有东西,拷贝到其他两台机器下面的/opt/ssl下即可

安装etcd

在三台上都安装etcd

yum install etcd -y

 

添加etcd配置

wget https://github.com/coreos/etcd/releases/download/v3.3.7/etcd-v3.3.7-linux-amd64.tar.gz
tar -xvf etcd-v3.3.7-linux-amd64.tar.gz
cd etcd-v3.3.7-linux-amd64
cp -a etcd* /opt/platform/etcd/

 

添加etcd为系统服务
vim /usr/lib/systemd/system/etcd.service 

etcd1

[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
User=etcd
WorkingDirectory=/opt/platform/etcd
EnvironmentFile=-/opt/platform/etcd/etcd.conf
ExecStart=/opt/platform/etcd/etcd \
--name etcd1 \
--cert-file=/opt/ssl/etcd.pem \
--key-file=/opt/ssl/etcd-key.pem \
--trusted-ca-file=/opt/ssl/ca.pem \
--peer-cert-file=/opt/ssl/etcd.pem \
--peer-key-file=/opt/ssl/etcd-key.pem \
--peer-trusted-ca-file=/opt/ssl/ca.pem \
--initial-advertise-peer-urls https://172.16.150.25:2380 \
--listen-peer-urls https://172.16.150.25:2380 \
--listen-client-urls https://172.16.150.25:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.16.150.25:2379 \
--initial-cluster-token consul_etcd \
--initial-cluster etcd1=https://172.16.150.25:2380,etcd2=https://172.16.150.26:2380,etcd3=https://172.16.150.27:2380 \
--initial-cluster-state new \
--data-dir=/opt/platform/etcd/data
Restart=on-failure
RestartSec=5

  

etcd2

[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
User=etcd
WorkingDirectory=/opt/platform/etcd
EnvironmentFile=-/opt/platform/etcd/etcd.conf
ExecStart=/opt/platform/etcd/etcd \
--name etcd2 \
--cert-file=/opt/ssl/etcd.pem \
--key-file=/opt/ssl/etcd-key.pem \
--trusted-ca-file=/opt/ssl/ca.pem \
--peer-cert-file=/opt/ssl/etcd.pem \
--peer-key-file=/opt/ssl/etcd-key.pem \
--peer-trusted-ca-file=/opt/ssl/ca.pem \
--initial-advertise-peer-urls https://172.16.150.26:2380 \
--listen-peer-urls https://172.16.150.26:2380 \
--listen-client-urls https://172.16.150.26:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.16.150.26:2379 \
--initial-cluster-token consul_etcd \
--initial-cluster etcd1=https://172.16.150.25:2380,etcd2=https://172.16.150.26:2380,etcd3=https://172.16.150.27:2380 \
--initial-cluster-state new \
--data-dir=/opt/platform/etcd/data
Restart=on-failure
RestartSec=5

  

etcd3

[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
User=etcd
WorkingDirectory=/opt/platform/etcd
EnvironmentFile=-/opt/platform/etcd/etcd.conf
ExecStart=/opt/platform/etcd/etcd \
--name etcd3 \
--cert-file=/opt/ssl/etcd.pem \
--key-file=/opt/ssl/etcd-key.pem \
--trusted-ca-file=/opt/ssl/ca.pem \
--peer-cert-file=/opt/ssl/etcd.pem \
--peer-key-file=/opt/ssl/etcd-key.pem \
--peer-trusted-ca-file=/opt/ssl/ca.pem \
--initial-advertise-peer-urls https://172.16.150.27:2380 \
--listen-peer-urls https://172.16.150.27:2380 \
--listen-client-urls https://172.16.150.27:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://172.16.150.27:2379 \
--initial-cluster-token consul_etcd \
--initial-cluster etcd1=https://172.16.150.25:2380,etcd2=https://172.16.150.26:2380,etcd3=https://172.16.150.27:2380 \
--initial-cluster-state new \
--data-dir=/opt/platform/etcd/data
Restart=on-failure
RestartSec=5

  

启动etcd:

mkdir -p /opt/platform/etcd/data && chown etcd:etcd -R /opt/platform/etcd
systemctl enable etcd.service && systemclt daemon-reload && systemctl start etcd.service

 

添加alias:

vim /etc/profile.d/alias_bash.sh
alias etcdctl='etcdctl --endpoints=https://172.16.150.25:2379,https://172.16.150.26:2379,https://172.16.150.27:2379 --cert-file=/opt/ssl/etcd.pem --ca-file=/opt/ssl/ca.pem --key-file=/opt/ssl/etcd-key.pem'
source /etc/profile.d/alias_bash.sh

验证etcd集群状态

etcdctl cluster-health

   

查看etcd 集群成员

etcdctl member list

测试验证:

etcdctl set test/testkey0 0
etcdctl get test/testkey0

 

etcd集群安装的更多相关文章

  1. centos下etcd集群安装

    先仔细了解学习etcd 官方: https://github.com/etcd-io/etcd https://www.cnblogs.com/softidea/p/6517959.html http ...

  2. ETCD集群安装实验

    目录 [1.下载二进制程序] [2.安装etcd集群] [3.查询集群状态] [4.存入读取数据] [5.注意事项] [6.参考链接] 简介:     Etcd的官网文档及其在GitHub上的文档,已 ...

  3. etcd集群安装部署

    1. 集群架构 由于我们只有两个机房,所以选择的是以上图中所示的数据同步方案, 通过做镜像的方式保证两个集群的数据实时同步. 整体架构如上图所示, 整个全局元数据中心包括两套集群,廊坊集群和马驹桥集群 ...

  4. kubernetes 集群安装etcd集群,带证书

    install etcd 准备证书 https://www.kubernetes.org.cn/3096.html 在master1需要安装CFSSL工具,这将会用来建立 TLS certificat ...

  5. 使用docker方式安装etcd集群,带TLS证书

    网上文档也多,安装的时候,还是踩了几个坑. 现在作一个安装记录吧. 1,先作自签名的证书ca-csr.json(为了和k8s共用根证书,可能将信息调为k8s). { "CN": & ...

  6. 使用k8s operator安装和维护etcd集群

    关于Kubernetes Operator这个新生事物,可以参考下文来了解这一技术的来龙去脉: https://yq.aliyun.com/articles/685522?utm_content=g_ ...

  7. Kubernetes1.91(K8s)安装部署过程(三)--创建高可用etcd集群

    这里的etcd集群复用我们测试的3个节点,3个node都要安装并启动,注意修改配置文件 1.TLS认证文件分发:etcd集群认证用,除了本机有,分发到其他node节点 scp ca.pem kuber ...

  8. yum安装etcd集群

       前一篇文章介绍了如何yum安装简单的kubernetes集群,其中etcd是单点部署.本篇我们来搭建etcd集群,方便日后搭建kubernetes HA集群架构. 1,环境配置说明 etcd1 ...

  9. etcd简介及集群安装部署使用

    目录 1. 简介 2. Linux下载安装 3. 单机模式启动 4. 指定各集群成员的方式配置集群 5. 使用discovery service的方式配置集群 6. 集群模式下客户端命令行 7. et ...

随机推荐

  1. tsconfig.json配置说明

    配置 tsconfig.json tsconfig.json 所包含的属性并不多,只有 7 个,ms 官方也给出了它的定义文件.但看起来并不怎么舒服,这里就翻译整理一下.(若有误,还请指出) file ...

  2. SpringBoot2.X&Prometheus使用

    1.启动Prometheus [root@ip101 prometheus-2.12.0.linux-amd64]# pwd /opt/app/prometheus-2.12.0.linux-amd6 ...

  3. Fragment全解析系列

    (一):那些年踩过的坑 开始之前 最新版知乎,单Activity多Fragment的架构,响应可以说非常“丝滑”,非要说缺点的话,就是没有转场动画,并且转场会有类似闪屏现象.我猜测可能和Fragmen ...

  4. linux系统交互通道

    默认有6个命令交互通道和一个图形界面交互通道,默认进入到的是图形界面通道     命令交互模式切换:ctrl+alt+f1---f6     图形交互界面 ctrl+alt+f7 1.图形界面交互模式 ...

  5. 校验表单demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Helm chart仓库官方仓库不能使用解决方法

    Helm chart仓库官方仓库不能使用解决方法 k8s中的官方helm chart仓库在国内可能使用不了,但是我们又需要使用,这里推荐几个方法. 使用其他的chart仓库 微软的chart仓库 ht ...

  7. linux 文件锁flock,lockf,fcntl

    1.flock,lockf,fcntl之间区别 先上结论:flock是文件锁,锁的粒度是整个文件,就是说如果一个进程对一个文件加了LOCK_EX类型的锁,别的进程是不能对这个文件加锁的. lockf是 ...

  8. linux常用命令(16)locate命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  9. Bloomber 新建基金账户步骤

    --Bloomber 新建基金账户步骤0.执行FIRM命令1.新建account group2.新建account3.将account加入到account group4.将account group授 ...

  10. //C#中的访问数据符

    [在命名空间里面直接定义类型只能用internal  或 public ] [要被同个解决方案内 其他项目访问 ,加引用 导命名空间]. [类的默认修饰符是internal] 1.Private    ...