本文档介绍部署一个三节点高可用 etcd 集群的步骤:

etcd 集群各节点的名称和 IP 如下:

kube-node0:192.168.111.10
kube-node1:192.168.111.11
kube-node2:192.168.111.12

创建 etcd 证书和私钥,所有证书和私钥的操作在/etc/kubernetes/ca/目录。

这里说下题外话:证书和私钥跟程序本身没有什么特定的关系,只是网络传输时的认证和授权而已,就针对etcd服务可以创建一对证书和私钥,也可以为etcd服务器、etcd客户端、etcd集群三个方面创建三对证书和私钥。甚至整个kubernetes集群也可以只用一对证书和私钥,只要配置把所有用到的ip及域名全部添加到hosts。

创建证书签名请求:

cat > etcd-csr.json <<EOF
{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"192.168.111.10",
"192.168.111.11",
"192.168.111.12"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChongQing",
"L": "ChongQing",
"O": "k8s",
"OU": "yunwei"
}
]
}
EOF

hosts 字段指定授权使用该证书的 etcd 节点 IP 或域名列表,这里将 etcd 集群的三个节点 IP 都列在其中;
生成证书和私钥:

# cfssl gencert -ca=/etc/kubernetes/ca/ca.pem \
-ca-key=/etc/kubernetes/ca/ca-key.pem \
-config=/etc/kubernetes/ca/ca-config.json \
-profile=kubernetes etcd-csr.json | cfssljson -bare etcd
# ls etcd*
分发生成的证书和私钥到各 etcd 节点的/etc/kubernetes/ca/ 目录下。

# scp /etc/kubernetes/ca/etcd* 192.168.111.11:/etc/kubernetes/ca/
# scp /etc/kubernetes/ca/etcd* 192.168.111.12:/etc/kubernetes/ca/

添加etcd的服务文件,注意修改名称和IP地址,除了--initial-cluster的不变以外,其他的IP地址都是当前主机IP地址。

cat > /lib/systemd/system/etcd.service1 <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos [Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/local/bin/etcd \
--name=kube-node1 \
--data-dir=/var/lib/etcd \
--listen-client-urls=https://192.168.111.11:2379,http://127.0.0.1:2379 \
--client-cert-auth=true \
--trusted-ca-file=/etc/kubernetes/ca/ca.pem \
--cert-file=/etc/kubernetes/ca/etcd.pem \
--key-file=/etc/kubernetes/ca/etcd-key.pem\
--listen-peer-urls=https://192.168.111.11:2380 \
--peer-client-cert-auth=true \
--peer-trusted-ca-file=/etc/kubernetes/ca/ca.pem \
--peer-cert-file=/etc/kubernetes/ca/etcd.pem \
--peer-key-file=/etc/kubernetes/ca/etcd-key.pem \
--initial-advertise-peer-urls=https://192.168.111.11:2380 \
--advertise-client-urls=https://192.168.111.11:2379 \
--initial-cluster-token=kubernetes-etcd \
--initial-cluster=kube-node0=https://192.168.111.10:2380,kube-node1=https://192.168.111.11:2380,kube-node2=https://192.168.111.12:2380 \
--initial-cluster-state=new
Restart=on-failure
RestartSec=5
LimitNOFILE=65536 [Install]
WantedBy=multi-user.target
EOF

对于配置文件的内容,如果你不知道是什么意思,可以使用 etcd --help查看,如果看不懂英文,请使用google翻译https://translate.google.cn,不需要FQ就能访问,比其他翻译好的地方就是能识别出那些是参数,那些是描述。有道翻译也还不错,千万不要用百度翻译,翻译的更看不懂。

启动etcd,先创建工作目录,注意集群少于两台,etcd不报错,但是状态是灰色的。

# mkdir -p /var/lib/etcd/

# for SERVICES in etcd;do systemctl enable $SERVICES;systemctl start $SERVICS;systemctl status $SERVICES;done

如果报错,journalctl -xe,journalctl -u etcd 来定位问题

# etcdctl --version #查看etcd的版本及api的版本

# ETCDCTL_API=3 etcdctl version #查看etcd的版本及api的版本,使用3.0的api,命令不同了。

为什么本地能够不加认证授权就能执行,是因为我们添加有--listen-client-urls=https://192.168.111.11:2379,http://127.0.0.1:2379

# echo 'export ETCDCTL_API=3' >>/etc/profile #永久使用3.0的api,了解,不建议添加
# source /etc/profile

# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
endpoint health

https://192.168.111.10:2379 is healthy: successfully committed proposal: took = 1.718331ms
https://192.168.111.12:2379 is healthy: successfully committed proposal: took = 2.897364ms
https://192.168.111.11:2379 is healthy: successfully committed proposal: took = 7.089323ms

# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
member list

b9dfbfa5702cc550, started, kube-node2, https://192.168.111.12:2380, https://192.168.111.12:2379
e18dce88c431fa3e, started, kube-node0, https://192.168.111.10:2380, https://192.168.111.10:2379
f7e65517526c5972, started, kube-node1, https://192.168.111.11:2380, https://192.168.111.11:2379

使用2.0的api的参数有很多不一样,可以使用etcdctl --help查看

# etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--ca-file=/etc/kubernetes/ca/ca.pem \
--cert-file=/etc/kubernetes/ca/etcd.pem \
--key-file=/etc/kubernetes/ca/etcd-key.pem \
member list

b9dfbfa5702cc550: name=kube-node2 peerURLs=https://192.168.111.12:2380 clientURLs=https://192.168.111.12:2379 isLeader=false
e18dce88c431fa3e: name=kube-node0 peerURLs=https://192.168.111.10:2380 clientURLs=https://192.168.111.10:2379 isLeader=true
f7e65517526c5972: name=kube-node1 peerURLs=https://192.168.111.11:2380 clientURLs=https://192.168.111.11:2379 isLeader=false

设置一个字段,来验证数据。
# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
put name xu

读取数据,可以在每个机器上执行一遍,看有没有数据

# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
get name

也可以每台机器都分别读取数据,你会发现每台都可以写,每台都可以读。

# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.12:2379\
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
put c cn

# ETCDCTL_API=3 etcdctl \
--endpoints=https://192.168.111.12:2379\
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd.pem \
--key=/etc/kubernetes/ca/etcd-key.pem \
get c

kubernetes部署 etcd 集群的更多相关文章

  1. Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...

  2. 部署etcd集群

    部署etcd集群 第一步:先拉取etcd二进制压缩包 wget https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2- ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群

    文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...

  4. 使用二进制文件部署Etcd集群

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

  5. 基于已有集群动态发现方式部署 Etcd 集群

    etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...

  6. 基于 DNS 动态发现方式部署 Etcd 集群

    使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...

  7. 基于Docker部署ETCD集群

    基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...

  8. 2、二进制安装K8s 之 部署ETCD集群

    二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...

  9. k8s1.13.0二进制部署-ETCD集群(一)

    Kubernetes集群中主要存在两种类型的节点:master.minion节点. Minion节点为运行 Docker容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能.Ma ...

随机推荐

  1. PCIE笔记--PCIe错误定义与分类

    转载地址:http://blog.chinaaet.com/justlxy/p/5100057782 前面的文章提到过,PCI总线中定义两个边带信号(PERR#和SERR#)来处理总线错误.其中PER ...

  2. JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本

    /** * 异常:在程序中导致程序中断运行的一些指令 * 1.受检异常:编译期 * 2.非受检异常:运行期 * 异常处理过程分析: * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象 * 2. ...

  3. 第01课 OpenGL窗口(4)

    下面的代码处理所有的窗口消息.当我们注册好窗口类之后,程序跳转到这部分代码处理窗口消息. LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄 UINT uMsg ...

  4. upload-labs通关攻略(全)

    upload-labs通关攻略 upload-labs是练习文件上传很好的一个靶场,建议把upload-labs关卡全部练习一遍 1.下载安装 下载地址 链接:https://pan.baidu.co ...

  5. 『学了就忘』Linux基础命令 — 31、grep命令和通配符

    目录 1.grep命令介绍 2.find命令和grep命令的区别(重点) (1)find命令 (2)grep命令 3.通配符与正则表达式的区别 (1)通配符: (2)正则表达式: 1.grep命令介绍 ...

  6. C++ 内存四区 理解总结

    内存模型图(4G) 整体简单说明 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中 03G是用户空间**,**34G是内核空间即3G用户空间和1G内核空间,不同进程相同的逻辑地 ...

  7. 热门剧本杀与 SaaS 的不解之缘

    近年来,"剧本杀"这种以剧本为核心,玩家分别扮演不同角色推理案情找出真凶的娱乐项目在年轻人的范围内迅速传开,已悄然形成了一个市场规模超百亿的新兴产业,吸引了大量淘金者.而在互联网时 ...

  8. (三)MySQL数据管理

    3.1 外键(了解即可) 方式一:在创建表的时候,增加约束(麻烦,比较复杂) CREATE TABLE IF NOT EXISTS `student`( `id` INT(4) NOT NULL AU ...

  9. 关于新手使用mpb开发代码的一些小知识

    mac 前端端口占用解决   1.查看8080端口,复制进程PID  lsof -i :8080 2.杀死进程 kill -9 「进程PID」   如果你的mac不能使用sudo解决办法   错误提示 ...

  10. [cf1290D]Coffee Varieties

    思路 统计数的种类数,也等价于统计有多少个数满足其之前没有与其相同的数 将序列以$\frac{k}{2}$为块大小分块,那么即会有$m=\frac{2n}{k}$个块 (关于$k=1$的情况,以1为块 ...