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 ...
随机推荐
- 视频编码GOP
GOP group of pictures GOP 指的就是两个I帧之间的间隔. 比较说GOP为120,如果是720 p60 的话,那就是2s一次I帧. 在视频编码序列中,主要有三种编码帧:I帧.P帧 ...
- 双栈排序 牛客网 程序员面试金典 C++ Python
双栈排序 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. ...
- distinct-subsequences leetcode C++
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- P2120 [ZJOI2007]仓库建设
P2120 [ZJOI2007]仓库建设 怎么说呢?算是很水的题了吧... 只要不要一开始就把dp想错就行... #include<bits/stdc++.h> #define ll lo ...
- linux 内核源代码情景分析——linux 内核源代码中的C语言代码
linux 内核的主体是以GNU的C语言编写的,GNU为此提供了编译工具gcc.GNU对C语言本身作了不少扩充. 1) gcc 从 C++ 语言中吸收了"inline"和" ...
- .NET 开源工作流: Slickflow流程引擎高级开发(九) -- 条件事件模式解释及应用
前言:在流程流转过程中,有时候需要条件模式的支持,这样可以使得流程流转更加灵活多变.比如在业务变量满足一定的条件时,可以启动特定配置的流程(或者位于主流程内部的子流程).本文主要描述条件启动和条件中间 ...
- 【python】使用python十分钟创建个人聊天机器人教程
以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...
- vue+elementUI中单选框el-radio设置默认值和唯一标识某个单选框
vue+elementUI中单选框el-radio设置默认值 如果后台返回的单选框的值是number:单选框的lable需要设置成 :lable='0';如下: <el-form-item la ...
- LeetCode 113. 路径总和 II C++
提交结果:内存超100%,用时超69% /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo ...
- [linux]centos7.4上升级python2版本到python3.6.5 【安装双版本,默认python3】
版本声明 centos7.4 前言:linux上的python默认是版本2的,之前学django项目用的是3的版本 所以得升级下版本~ 1.下载python3.6.5 cd /usr/local/ w ...