kubernetes部署 etcd 集群
本文档介绍部署一个三节点高可用 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 集群的更多相关文章
- Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复
目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...
- 部署etcd集群
部署etcd集群 第一步:先拉取etcd二进制压缩包 wget https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2- ...
- 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 ...
- 使用二进制文件部署Etcd集群
Etcd 是一个分布式键值存储系统,Kubernetes使用Etcd进行数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式部署,这里使用3台组建集群,可容忍1台机器故障,当 ...
- 基于已有集群动态发现方式部署 Etcd 集群
etcd提供了多种部署集群的方式,在「通过静态发现方式部署etcd集群」 一文中我们介绍了如何通过静态发现方式部署集群. 不过很多时候,你只知道你要搭建一个多大(包含多少节点)的集群,但是并不能事先知 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- 基于Docker部署ETCD集群
基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...
- 2、二进制安装K8s 之 部署ETCD集群
二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...
- k8s1.13.0二进制部署-ETCD集群(一)
Kubernetes集群中主要存在两种类型的节点:master.minion节点. Minion节点为运行 Docker容器的节点,负责和节点上运行的 Docker 进行交互,并且提供了代理功能.Ma ...
随机推荐
- 嵌入式大佬给你分析stm32串口
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- 攻防世界 杂项 3.神奇的Modbus
[目标] 了解modbus协议 [工具] Wireshark [分析过程] 在数据包中寻找flag就行,flag是明文形式存储. 工业设备消息传输使用modbus协议.所以我就采集了modbus的通信 ...
- 利用Nginx搭建Ambari本地安装源
1.下载本地源包https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.3.0/bk_ambari-installation/content/ch_o ...
- 表示数值的字符串 牛客网 剑指Offer
表示数值的字符串 牛客网 剑指Offer 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2"," ...
- Python 调用上级目录的文件
程序结构如下: – src |-- mod1.py |-- lib | |-- mod2.py |-- sub | |-- test.py 具体代码如下: 在test.py里调用mod1 mod2 i ...
- Django(73)django-debug-toolbar调试工具
介绍 Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息. 应用 1. 安装 ...
- 一文读懂什么是渲染管线(7k字)
01 | 渲染基础 渲染(Render)定义 渲染在电脑绘图中是指软件从模型生成图像的过程,通俗讲就是在计算机里面给虚拟世界"拍照".渲染主要分为两种,一种是预渲染(pre-ren ...
- LeetCode Weekly Contest 266
第一题 题解:模拟题 class Solution { public: int countVowelSubstrings(string w) { int n = w.length(); int i = ...
- vue脚手架项目如何在控制台打印组件实例
需要在浏览器上安装拓展程序vue开发工具,安装好后在控制台上输入$vm即可打印vue组件实例对象. Vue2.3开发工具都有,可自行下载 百度网盘链接提取码:si5l
- MyBatis-Plus 快速入门
1.简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 1.1.特性 无侵入:只做增强不做改变, ...