k8s之external-etcd集群管理
一、概述
kubernetes使用etcd作为数据中心,使用kubeadm部署kubernetes的时候默认会自己部署一个etcd,当然也可以将kubeadm部署的单点的etcd做成集群,但是比较麻烦,所以我们使用的是自建
的etcd集群即external etcd cluster。在使用kubeadm初始化集群的时候指定etcd为external。
具体kubeadm的init config参考我的另外一篇blog:https://www.cnblogs.com/cuishuai/p/10149727.html
etcd集群的搭建参考:https://www.cnblogs.com/cuishuai/p/9897006.html
本片blog不再赘述详细的搭建过程,主要记录一下etcd集群的管理。
二、Etcd Cluster 管理
1、准备etcdctl
默认etcd部署采用的是etcd-v2,kubernetes默认使用的是v3,所以直接使用etcdctl在etcd里查不到任何关于kubernetes的信息,v2和v3有很大的差距,可以从v2迁移到v3,但是不能往回迁。
想要使用必须指定etcd api 为v3,作如下操作:
# vim ~/.bashrc
#etcd
host1='10.42.13.230:2379' host2='10.42.43.147:2379' host3='10.42.150.212:2379' endpoints=$host1,$host2,$host3
alias etcdctl='etcdctl --endpoints=$endpoints --key /etc/etcd/ssl/etcd-key.pem --cert /etc/etcd/ssl/etcd.pem --cacert /etc/kubernetes/ssl/ca.pem'
export ETCDCTL_API=
#使修改生效
#source ~/.bashrc
现在使用etcdctl查看kubernetes的信息:
查看所有的key:
etcdctl get --prefix "" --keys-only
删掉所有的key:
etcdctl del --prefix ""
查看以calico开头的所有的key:
etcdctl get --prefix "/calico" --keys-only
使用etcdctl可以管理很多etcd的内容,具体的可以使用etcdctl --help查看。
2、etcd集群添加节点
添加节点前的准备:
!集群必须是奇数个节点
!重新创建etcd的证书,将所有要添加的ip都加进去,参考https://www.cnblogs.com/cuishuai/p/9897006.html
!为新的etcd服务创建启动文件,参考https://www.cnblogs.com/cuishuai/p/9897006.html,需要做一些简单的修改:
#cat /etc/systemd/system/etcd.service
[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/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/opt/bin/etcd \
--name=etcd-host3 \
--cert-file=/etc/etcd/ssl/etcd.pem \
--key-file=/etc/etcd/ssl/etcd-key.pem \
--peer-cert-file=/etc/etcd/ssl/etcd.pem \
--peer-key-file=/etc/etcd/ssl/etcd-key.pem \
--trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
--peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
--initial-advertise-peer-urls=https://10.42.10.90:2380 \
--listen-peer-urls=https://10.42.10.90:2380 \
--listen-client-urls=https://10.42.10.90:2379,http://127.0.0.1:2379 \
--advertise-client-urls=https://10.42.10.90:2379 \
--initial-cluster-token=etcd-cluster- \
--initial-cluster=etcd-host0=https://10.42.13.230:2380,etcd-host1=https://10.42.43.147:2380,etcd-host2=https://10.42.150.212:2380,etcd-host3=https://10.42.10.90:2380 \
--initial-cluster-state=exsiting \
--data-dir=/var/lib/etcd Restart=on-failure
RestartSec=
LimitNOFILE= [Install]
WantedBy=multi-user.target
--initial-cluster-state修改为existing
创建数据目录:
mkdir /var/lib/etcd
添加节点:
etcdctl member add --endpoints=https://10.42.10.90:2379 etcd-host3 https://10.42.10.90:2380
启动etcd实例
systemctl start etcd
systemctl enable etcd
查看:
etcdctl endpoint health
etcdctl member list
3、移除节点
找到需要移除节点的memberid:
etcdctl member list
移除:
etcdctl member remove [memberid]
4、etcd集群数据备份与恢复
!数据备份
准备备份路径
mkdir -p /data/backup/etcd
开始备份:
etcdctl snapshot save /data/backup/etcd/snapshot-$(date +%Y%m%d%H%M).db
查看snapshot文件的状态:
etcdctl snapshot status /data/backup/etcd/snapshot-.db
!数据恢复
写了一个脚本,现在集群假设是3个节点,名称一次为etcd-host0、etcd-host1、etcd-host2:
#cat etcdrestoe.sh
#!/bin/bash h0=10.42.13.230
h1=10.42.43.147
h2=10.42.150.212 for i in h0 h1 h2
do etcdctl snapshot restore snapshot.db \
--data-dir=/var/lib/etcd \
--name=$i \
--initial-cluster=etcd-host0=https://$h0:2380,etcd-host1=https://$h1:2380,etcd-host2=https://$h2:2380 \
--initial-cluster-token=etcd-cluster- \
--initial-advertise-peer-urls=https://$i:2380 && \ mv /var/lib/etcd/ etcd_$i done
把生成的etcd_10.42.13.230、etcd_10.42.43.147、etcd_10.42.150.212分别覆盖各自节点之前的/var/lib/etcd下面的数据。
k8s之external-etcd集群管理的更多相关文章
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- 2、二进制安装K8s 之 部署ETCD集群
二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...
- k8s之创建etcd集群
主机规划 maste01——192.168.10.63 master02——192.168.10.64 node01——192.168.10.65 node02——192.168.10.66 1.为保 ...
- 一键部署etcd集群管理脚本
一.编写脚本 1 #!/bin/sh 2 # 安装 3 # ./run.sh etcd03 etcd01=http://192.168.2.44:2380,etcd02=http://192.168. ...
- k8s集群之上运行etcd集群
一.知识点: 1.headless services NOTE:: 我们在k8s上运行etcd集群,集群间通告身份是使用dns,不能使用pod ip,因为如果pod被重构了ip会变,在这种场景中不能直 ...
- 灵雀云:etcd 集群运维实践
[编者的话]etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较 ...
随机推荐
- 01 C语言程序设计--01 C语言基础--第3章 基本数据类型01
01.1.3.1序言 00:02:17 01.1.3.2 C语言中的基本元素和常量的概念 00:08:54 01.1.3.3示例--常量 00:12:08 01.1.3.4变量的概念和命名规则 00: ...
- UTF-8的BOM含义
BOM的介绍 在github上写md文件的时候,发现生成自己blog时,报出一个错误是让使用UTF-8编码,然后在Notepad++上把文件转成UTF-8时,发现菜单中有"UTF-8无BOM ...
- php 批量下载文件
public function batchDownload() { $filename = 'tmp.zip'; $zipName = date('YmdHi') . '.zip'; $files = ...
- qt字符数组转ASCII(十六进制)
接收网络传输数据 QByteArray array;//显示字符串 QString str = QString::fromLocal8Bit(array); m_receiveTxt.append( ...
- bootstrap-table使用详解
尴尬,标记果然到了一周之后.... 首先引入文件不必提,引入bootstrap和bootstrap-table <link rel="stylesheet" href=&qu ...
- 基于ajax提交数据
昨日回顾: 1 inclusion_tag -干什么用的?生成html的片段(动态,传参数,传数据) -app下新建一个模块,templatetags -创建一个py文件(mytag.py) -fro ...
- python之路(七)-递归算法
递归 特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1) 递归就是在 ...
- Kotlin基础语法学习
Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...
- Python之配置日志的几种方式(logging模块)
原文:https://blog.csdn.net/WZ18810463869/article/details/81147167 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Py ...
- STM32 HAL库的使用心得
1.I2C函数中HAL_I2C_Mem_Write和HAL_I2C_Master_Transmit有啥区别?{ 使用HAL_I2C_Mem_Write等于 先使用HAL_I2C_Master_Tran ...