ETCD 备份与还原

安装etcdctl

准备看下etcd如何命令行操作,才发现,主机上,只用kubeadm拉起了etcd,但没有etcdctl命令。

# sudo docker ps -a | awk '/etcd-master/{print $1}'
c4e3a57f05d7
26a11608b270
836dabc8e254

 找到正在运行的etcd,将pod中的etcdctl命令复制到主机上,使得在主机上就能直接使用etcdctl命令。

# sudo docker cp c4e3a57f05d7:/usr/local/bin/etcdctl /usr/local/bin/etcdctl

在此执行etcdctl 命令,已成功执行

# etcdctl
NAME:etcdctl - A simple command line client for etcd3.USAGE:etcdctl [flags]VERSION:3.5.1API VERSION:3.5

查看etcd节点成员

# etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key member list -w table
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+
|       ID        | STATUS  |       NAME        |        PEER ADDRS         |       CLIENT ADDRS        | IS LEARNER |
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+
| dd7a929be676b37 | started |  | https://192.168.1.120:2380 | https://192.168.1.120:2379 |      false |
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+

etcd的证书列表

# ll /etc/kubernetes/pki/etcd/
total 32
-rw-r----- 1 root root 1086 Mar 26 16:52 ca.crt
-rw------- 1 root root 1675 Mar 26 16:52 ca.key
-rw-r----- 1 root root 1159 Mar 26 16:52 healthcheck-client.crt
-rw------- 1 root root 1675 Mar 26 16:52 healthcheck-client.key
-rw-r----- 1 root root 1220 Mar 26 16:52 peer.crt
-rw------- 1 root root 1675 Mar 26 16:52 peer.key
-rw-r----- 1 root root 1220 Mar 26 16:52 server.crt
-rw------- 1 root root 1675 Mar 26 16:52 server.key

etcdctl设置别名

# alias etcdctl='etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'
[root@192.168.1.120 ~]# 
[root@192.168.1.120 ~]# etcdctl member list -w table
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+
|       ID        | STATUS  |       NAME        |        PEER ADDRS         |       CLIENT ADDRS        | IS LEARNER |
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+
| dd7a929be676b37 | started | 192.168.1.120 | https://192.168.1.120:2380 | https://192.168.1.120:2379 |      false |
+-----------------+---------+-------------------+---------------------------+---------------------------+------------+

查看etcd的详情

IS LEADER:当前是主节点

RAFT TERM: 做了多少轮的选举

# etcdctl endpoint status -w table 
+--------------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|         ENDPOINT         |       ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://[127.0.0.1]:2379 | dd7a929be676b37 |   3.5.1 |   18 MB |      true |      false |        22 |    7579742 |            7579742 |        |
+--------------------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

查看etcd是否健康

# etcdctl endpoint health
https://[127.0.0.1]:2379 is healthy: successfully committed proposal: took = 27.76824ms

操作表小试牛刀

etcd中的数据,存放的目录从 /  开始

# etcdctl put /skywell/byd bus
OK
# etcdctl get /skywell/ --prefix=true
/skywell/byd
bus

查看表中数据

--keys-only: 只查看key,不看value

--limit:  表中有很多,限制只查询几条

# etcdctl get / --prefix=true --keys-only --limit 10
/registry/apiregistration.k8s.io/apiservices/v1./registry/apiregistration.k8s.io/apiservices/v1.admissionregistration.k8s.io/registry/apiregistration.k8s.io/apiservices/v1.apiextensions.k8s.io/registry/apiregistration.k8s.io/apiservices/v1.apps/registry/apiregistration.k8s.io/apiservices/v1.authentication.k8s.io/registry/apiregistration.k8s.io/apiservices/v1.authorization.k8s.io/registry/apiregistration.k8s.io/apiservices/v1.autoscaling/registry/apiregistration.k8s.io/apiservices/v1.batch/registry/apiregistration.k8s.io/apiservices/v1.certificates.k8s.io/registry/apiregistration.k8s.io/apiservices/v1.coordination.k8s.io# etcdctl get /skywell --prefix=true --keys-only --limit 10
/skywell/byd

etcd数据备份

# etcdctl snapshot save etcdbackup.db
{"level":"info","ts":1716971751.0047052,"caller":"snapshot/v3_snapshot.go:68","msg":"created temporary db file","path":"etcdbackup.db.part"}
{"level":"info","ts":1716971751.028518,"logger":"client","caller":"v3/maintenance.go:211","msg":"opened snapshot stream; downloading"}
{"level":"info","ts":1716971751.0286477,"caller":"snapshot/v3_snapshot.go:76","msg":"fetching snapshot","endpoint":"https://[127.0.0.1]:2379"}
{"level":"info","ts":1716971751.3699682,"logger":"client","caller":"v3/maintenance.go:219","msg":"completed snapshot read; closing"}
{"level":"info","ts":1716971751.8124714,"caller":"snapshot/v3_snapshot.go:91","msg":"fetched snapshot","endpoint":"https://[127.0.0.1]:2379","size":"18 MB","took":"now"}
{"level":"info","ts":1716971751.8127532,"caller":"snapshot/v3_snapshot.go:100","msg":"saved","path":"etcdbackup.db"}
Snapshot saved at etcdbackup.db

验证备份数据

# etcdctl --write-out=table snapshot status etcdbackup.db 
Deprecated: Use `etcdutl snapshot status` instead.+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| b91b2b0e |  6454813 |        947 |      18 MB |
+----------+----------+------------+------------+

此时,我们删除测试的nginx的deployment

# kubectl get deployment -A
NAMESPACE              NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
default                nginx                       3/3     3            3           151m
ingress-nginx          nginx-deployment            1/1     1            1           15d
ingress-nginx          nginx-ingress-controller    1/1     1            1           15d
kube-system            coredns                     2/2     2            2           63d
kube-system            metrics-server              1/1     1            1           56d
kubernetes-dashboard   dashboard-metrics-scraper   1/1     1            1           56d
kubernetes-dashboard   kubernetes-dashboard        1/1     1            1           56d# kubectl delete deployment -n default nginx
deployment.apps "nginx" deleted# kubectl get deployment -A
NAMESPACE              NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
ingress-nginx          nginx-deployment            1/1     1            1           15d
ingress-nginx          nginx-ingress-controller    1/1     1            1           15d
kube-system            coredns                     2/2     2            2           63d
kube-system            metrics-server              1/1     1            1           56d
kubernetes-dashboard   dashboard-metrics-scraper   1/1     1            1           56d
kubernetes-dashboard   kubernetes-dashboard        1/1     1            1           56d

将备份恢复到集群

将备份的数据还原到  --data-dir    指定的目录

# etcdctl  snapshot restore etcdbackup.db  --data-dir=/data/foot/etcdtest/restore
Deprecated: Use `etcdutl snapshot restore` instead.2024-05-29T16:44:33+08:00       info    snapshot/v3_snapshot.go:251     restoring snapshot      {"path": "etcdbackup.db", "wal-dir": "/data/foot/etcdtest/restore/member/wal", "data-dir": "/data/foot/etcdtest/restore", "snap-dir": "/data/foot/etcdtest/restore/member/snap", "stack": "go.etcd.io/etcd/etcdutl/v3/snapshot.(*v3Manager).Restore\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdutl/snapshot/v3_snapshot.go:257\ngo.etcd.io/etcd/etcdutl/v3/etcdutl.SnapshotRestoreCommandFunc\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdutl/etcdutl/snapshot_command.go:147\ngo.etcd.io/etcd/etcdctl/v3/ctlv3/command.snapshotRestoreCommandFunc\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdctl/ctlv3/command/snapshot_command.go:128\ngithub.com/spf13/cobra.(*Command).execute\n\t/home/remote/sbatsche/.gvm/pkgsets/go1.16.3/global/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\t/home/remote/sbatsche/.gvm/pkgsets/go1.16.3/global/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960\ngithub.com/spf13/cobra.(*Command).Execute\n\t/home/remote/sbatsche/.gvm/pkgsets/go1.16.3/global/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897\ngo.etcd.io/etcd/etcdctl/v3/ctlv3.Start\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdctl/ctlv3/ctl.go:107\ngo.etcd.io/etcd/etcdctl/v3/ctlv3.MustStart\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdctl/ctlv3/ctl.go:111\nmain.main\n\t/tmp/etcd-release-3.5.1/etcd/release/etcd/etcdctl/main.go:59\nruntime.main\n\t/home/remote/sbatsche/.gvm/gos/go1.16.3/src/runtime/proc.go:225"}
2024-05-29T16:44:33+08:00       info    membership/store.go:141 Trimming membership information from the backend...
2024-05-29T16:44:34+08:00       info    membership/cluster.go:421       added member    {"cluster-id": "cdf818194e3a8c32", "local-member-id": "0", "added-peer-id": "8e9e05c52164694d", "added-peer-peer-urls": ["http://localhost:2380"]}
2024-05-29T16:44:34+08:00       info    snapshot/v3_snapshot.go:272     restored snapshot       {"path": "etcdbackup.db", "wal-dir": "/data/foot/etcdtest/restore/member/wal", "data-dir": "/data/foot/etcdtest/restore", "snap-dir": "/data/foot/etcdtest/restore/member/snap"}

在指定的位置,重新生成了新的etcd数据

# ll restore/member/
total 8
drwx------ 2 root root 4096 May 29 16:44 snap
drwx------ 2 root root 4096 May 29 16:44 wal# ll /var/lib/etcd/member/
total 0
drwx------ 2 root root 246 May 29 15:08 snap
drwx------ 2 root root 244 May 29 09:14 wal

现在,需要停止所有的  kubernetes 组件以更新  etcd  数据。

将/etc/kubernetes/manifests/kubernetes中的组件清单文件, 将此文件移除。

# ll /etc/kubernetes/manifests/
total 16
-rw------- 1 root root 2260 Mar 26 16:52 etcd.yaml
-rw------- 1 root root 3367 Mar 26 16:52 kube-apiserver.yaml
-rw------- 1 root root 2878 Mar 26 16:52 kube-controller-manager.yaml
-rw------- 1 root root 1464 Mar 26 16:52 kube-scheduler.yaml# mv /etc/kubernetes/manifetes/* /tmp

kubelet会自动删除pod.【说会自动删除,我试了下,修改了etcd-data的目录,node节点没显示,kubectl get po -A 也没有显示,最后将移除去的yaml再放回来,k8s环境正常】

# kubectl get po -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS          AGE
ingress-nginx          nginx-deployment-64d5f7665c-56cpz            1/1     Running   0                 15d
ingress-nginx          nginx-ingress-controller-7cfc988f46-cszsd    1/1     Running   0                 15d
kube-flannel           kube-flannel-ds-lpm9c                        1/1     Running   0                 64d
kube-system            coredns-6d8c4cb4d-sml87                      1/1     Running   0                 64d
kube-system            coredns-6d8c4cb4d-w4hgz                      1/1     Running   0                 64d
kube-system            etcd-master                                  1/1     Running   181 (18d ago)     64d
kube-system            kube-apiserver-master                        1/1     Running   159               64d
kube-system            kube-controller-manager-master               1/1     Running   241 (3d7h ago)    64d
kube-system            kube-proxy-6ct9f                             1/1     Running   0                 64d
kube-system            kube-scheduler-master                        1/1     Running   3256 (3d7h ago)   64d
kube-system            metrics-server-5d6946c85b-5585p              1/1     Running   0                 56d
kubernetes-dashboard   dashboard-metrics-scraper-6f669b9c9b-hmw4b   1/1     Running   0                 19d
kubernetes-dashboard   kubernetes-dashboard-57dd8bd998-ghrhd        1/1     Running   26 (18d ago)      19d

当组件都已删除后,修改/etc/kubernetes/manifests/etcd.yaml中的etcd-data中hostPath路径参数

    volumeMounts:- mountPath: /var/lib/etcd  #将这里的路径换成新的etcd的路径,刚才restore所在的目录name: etcd-data- mountPath: /etc/kubernetes/pki/etcdname: etcd-certshostNetwork: truepriorityClassName: system-node-criticalsecurityContext:seccompProfile:type: RuntimeDefaultvolumes:- hostPath:path: /etc/kubernetes/pki/etcdtype: DirectoryOrCreatename: etcd-certs- hostPath:path: /var/lib/etcdtype: DirectoryOrCreatename: etcd-data
status: {}
~

查看k8s集群状态

# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

失落的方舟 命运方舟台服怎么下载游戏客户端 游戏账号怎么注册

《失落的方舟》(Lost Ark)是韩国Smilegate公司精心打造的一款大型多人在线角色扮演游戏(MMORPG),以其精美的画面、沉浸式的剧情、类似动作游戏的战斗体验和广阔的开放世界设定,自面世以来便深受全球玩家喜爱…

计算机毕业设计 | SpringBoot+vue仓库管理系统(附源码)

1,绪论 1.1 项目背景 随着电子计算机技术和信息网络技术的发明和应用,使着人类社会从工业经济时代向知识经济时代发展。在这个知识经济时代里,仓库管理系统将会成为企业生产以及运作不可缺少的管理工具。这个仓库管理系统是由:一…

一款高级管理控制面板主题!【送源码】

AdminLTE是一个完全响应的管理模板。基于Bootstrap5框架和JavaScript插件。高度可定制,易于使用。适用于从小型移动设备到大型桌面的多种屏幕分辨率。AdminLTE 是一个基于Bootstrap 3.x的免费高级管理控制面板主题。 https://github.com/almasaeed2010/AdminLTE —…

操作系统真象还原:完善MBR

第3章-完善MBR 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 编译器给程序中各符号(变量名或函数名等)分配的地址,就是各符号相对于文件开头的偏移量 。 section 称为节,在有的编译器中,同…

STM32的时钟介绍

目录 前言1. 简介1.1 时钟是用来做什么的1.2 时钟产生的方式 2. 时钟树的组成2.1 时钟源2.1.1 内部时钟2.1.2 外部时钟 2.2 PLL锁相环2.3 SYSCLK2.4 AHB和HCLK2.5 APB和PCLK2.6 总结 3. STM32时钟的如何进行工作4.我的疑问4.1 使用MSI和HSI有什么区别吗?4.2 MSI的频…

Linux系统编程(五)多线程

目录 一、基本知识点二、线程的编译三、 线程相关函数1. 线程的创建2. 线程的退出3. 线程的等待补充 四、综合举例 一、基本知识点 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个标准…

【4.vi编辑器使用(下)】

一、vi编辑器的光标移动 二、vi编辑器查找命令 1、命令::/string 查找字符串 n:继续查找 N:反向继续查找 /^the 查找以the开头的行 /end 查找以 查找以 查找以结尾的行 三、vi编辑器替换命令 1、语法: : s[范围,范围]str1/str2[g] g表示全…

可视化大屏:随意堆数据,错!要主次分明、重点突出,动静结合。

可视化大屏是一种展示数据的方式,它的设计应该遵循一些原则,以确保信息的传递和理解效果最佳。以下是一些关键点,可以帮助设计出主次分明、重点突出、动静结合的可视化大屏: 定义目标和重点: 在开始设计可视化大屏之前…

NumPy 泊松分布模拟与 Seaborn 可视化技巧

泊松分布 简介 泊松分布是一种离散概率分布,用于描述在给定时间间隔内随机事件发生的次数。它常用于模拟诸如客户到达商店、电话呼叫接入中心等事件。 参数 泊松分布用一个参数来定义: λ:事件发生的平均速率,表示在单位时间…

哈希表练习题(2024/5/29)

1有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输…

C语言数据结构堆排序、向上调整和向下调整的时间复杂度的计算、TopK问题等的介绍

文章目录 前言一、堆排序1. 排升序(1). 建堆(2). 排序 2. 拍降序(1). 建堆(2). 排序 二、建堆时间复杂度的计算1. 向上调整时间复杂度2. 向下调整时间复杂度 三、TopK问题总结 前言 …

Java事务入门:从基础概念到初步实践

Java事务入门:从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务?1.2 为什么需要事务? 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…

Vue项目中使用router

Vite项目中使用router的步骤: 1.安装路由器库: npm install vue-router4 2.创建路由配置:通常命名为 router.js 或者 router/index.js import { createRouter, createWebHashHistory } from vue-router;import Login from ../views/Login.vu…

Jpg与png图片区别

Jpg与png图片有什么区别? JPG(或JPEG)和PNG是两种广泛使用的图像文件格式,它们在压缩技术、文件大小、图像质量、透明度支持等方面有显著的不同: 压缩技术: JPG: 使用有损压缩技术。这意味着在压缩过程中,一…

43-3 应急响应 - WebShell查杀工具

一、WebShell 简介 WebShell是一种以asp、php、jsp等网页文件形式存在的代码执行环境,通常用于网站管理、服务器管理和权限管理等操作。然而,如果被入侵者利用,它也可以用于控制网站服务器。具有完整功能的WebShell通常被称为"大马",而功能简单的则称为"小马…

20240529训练题目(西安交通大学 2024年程序设计竞赛校赛)

题目 D题 欢迎来到瑟莉姆大人的享乐宴会! 宴会中一共有n个访客,编号1∼n。为了更好地控制影的力量,瑟莉姆要求有n−1个访客都恰好受 到另一个访客的支配,而剩下的那个人成为总支配者,支配其他n−1名访客。访客间的直…

监控易军队信息化运维:支持网闸隔离技术,实现多安全域的统一监控

随着信息技术的迅猛发展,军队的信息化建设也在不断推进,信息化运维成为了保障军队正常运作的关键环节。然而,军队的信息化运维现状仍面临诸多挑战,如设备种类多、数据处理量大、专业技术要求高以及信息安全隐患等。针对这些问题&a…

海外仓能用什么系统?一篇文章给你讲明白

海外仓作为跨境电商物流的重要组成部分,越来越受到国内企业的关注。对于中小型海外仓来说,怎么选择一个合适的海外仓系统,成为了一个亟待解决的问题。 今天我们就用一篇文章给大家讲清楚,怎么根据自己海外仓的特点,选…

MySQL sum后再计算percentage的多种解决办法

over() 函数,最简单的一种 以下是SQL片段,在外面嵌套一个Select是因为over 不会SQL语句所有的data sum,而不是 limit 之后的数据,所以需要先limit 在over() SELECT b.*,ROUND(b.amount*100 / SUM(b.amount…

将IP添加到基础设计

将IP添加到基础设计 本节介绍将AXI IP添加到设计中。 添加低速外设(AXI4 Lite) 1.将等效IP添加到框图中。例如,对于AXI GPIO: a.右键单击方框图中的任意位置,然后选择“添加IP”。 b.搜索并双击AXI GPIO以添加IP。 2.双…