etcd集群安装
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
最新文章
- requirejs:模块加载(require)及定义(define)时的路径小结
- selenium RC+JAVA 笔记 一
- 关于PHP学习的各种网站
- C#比较时间大小 1、比较时间大小的实验
- K-集合 (JXNU第二次周赛1006)set/平衡树
- HDU 4638 Group(分组)
- TCP/IP协议原理与应用笔记02:断点续传
- VS2010安装项目的系统必备中添加.NET 2.0
- 杭电oj 2095 &; 异或^符号在C/C++中的使用
- 洛谷 [P3258] 松鼠的新家
- Cocos2D:塔防游戏制作之旅(十八)
- java基础Haep(堆)和Stack(栈)区别
- 一篇文章带你了解Cloud Native
- SHELL脚本--expr命令全解
- 5.1Python数据处理篇之Sympy系列(一)---Sympy的大体认识
- Java虚拟机一 运行时数据区(栈、堆、方法区等)
- systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
- SQLServer 数据库镜像+复制切换方案
- SPOJ Distinct Substrings【后缀数组】
- 《算法C语言实现》————快速-查找算法(quick-find algorithm)