千家信息网

Kubernetes的etcd状态数据及其备份是怎样的

发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,本篇内容介绍了"Kubernetes的etcd状态数据及其备份是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读
千家信息网最后更新 2025年01月28日Kubernetes的etcd状态数据及其备份是怎样的

本篇内容介绍了"Kubernetes的etcd状态数据及其备份是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Kubernetes使用etcd来存储集群的实时运行数据(如节点状态信息),而其它pod都是无状态的、可以根据负载调度,在多个节点(node)间进行漂移。etcd本身是可以部署为无中心的多节点互备集群,从而消除整个集群的单一故障点。在kubeadm的缺省部署下,只在master上运行一个etcd实例(etcd-xxx),可以使用kubectl get pod -n kube-system 查看运行状态。

1、查看etcd服务容器信息

下面我们来探索一下kubernetes的etcd实例到底是如何实现和管理的。在kubernetes的master节点上输入:

kubectl describe pod/etcd-podc01 -n kube-system > etcd.txt

输出如下:

Name:               etcd-podc01Namespace:          kube-systemPriority:           2000000000PriorityClassName:  system-cluster-criticalNode:               podc01/10.1.1.181Start Time:         Mon, 03 Dec 2018 10:42:05 +0800Labels:             component=etcd                    tier=control-planeAnnotations:        kubernetes.io/config.hash: bcc0eea4c53f3b70d13b771ad88e31b7                    kubernetes.io/config.mirror: bcc0eea4c53f3b70d13b771ad88e31b7                    kubernetes.io/config.seen: 2018-12-05T11:05:31.8690622+08:00                    kubernetes.io/config.source: file                    scheduler.alpha.kubernetes.io/critical-pod: Status:             RunningIP:                 10.1.1.181Containers:  etcd:    Container ID:  docker://8f301c91902a9399f144943013166a09dd0766a9b96c26fe2d8e335418a55cab    Image:         k8s.gcr.io/etcd:3.2.24    Image ID:      docker-pullable://registry.cn-hangzhou.aliyuncs.com/openthings/k8s-gcr-io-etcd@sha256:7b073bdab8c52dc23dfb3e2101597d30304437869ad8c0b425301e96a066c408    Port:              Host Port:         Command:      etcd      --advertise-client-urls=https://127.0.0.1:2379      --cert-file=/etc/kubernetes/pki/etcd/server.crt      --client-cert-auth=true      --data-dir=/var/lib/etcd      --initial-advertise-peer-urls=https://127.0.0.1:2380      --initial-cluster=podc01=https://127.0.0.1:2380      --key-file=/etc/kubernetes/pki/etcd/server.key      --listen-client-urls=https://127.0.0.1:2379      --listen-peer-urls=https://127.0.0.1:2380      --name=podc01      --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt      --peer-client-cert-auth=true      --peer-key-file=/etc/kubernetes/pki/etcd/peer.key      --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt      --snapshot-count=10000      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt    State:          Running      Started:      Wed, 05 Dec 2018 11:05:35 +0800    Ready:          True    Restart Count:  0    Liveness:       exec [/bin/sh -ec ETCDCTL_API=3 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 get foo] delay=15s timeout=15s period=10s #success=1 #failure=8    Environment:        Mounts:      /etc/kubernetes/pki/etcd from etcd-certs (rw)      /var/lib/etcd from etcd-data (rw)Conditions:  Type              Status  Initialized       True   Ready             True   ContainersReady   True   PodScheduled      True Volumes:  etcd-data:    Type:          HostPath (bare host directory volume)    Path:          /var/lib/etcd    HostPathType:  DirectoryOrCreate  etcd-certs:    Type:          HostPath (bare host directory volume)    Path:          /etc/kubernetes/pki/etcd    HostPathType:  DirectoryOrCreateQoS Class:         BestEffortNode-Selectors:    Tolerations:       :NoExecuteEvents:            

可以看到,etcd是使用的host-network网络,然后把系统参数和数据等都映射到了宿主机的目录(配置参数位于宿主机的/var/lib/etcd,证书文件位于/etc/kubernetes/pki/etcd)。

2、查看etcd配置参数文件

在宿主机下输入 sudo ls -l /var/lib/etcd/member/snap 可以看到etcd服务所产生的快照文件,如下所示:

supermap@podc01:~/openthings/kubernetes-tools/jupyter$ sudo ls -l /var/lib/etcd/member/snap总用量 8924-rw-r--r-- 1 root root     8160 12月  5 09:19 0000000000000005-00000000001fbdd0.snap-rw-r--r-- 1 root root     8160 12月  5 10:37 0000000000000005-00000000001fe4e1.snap-rw-r--r-- 1 root root     8508 12月  5 11:42 0000000000000006-0000000000200bf2.snap-rw-r--r-- 1 root root     8509 12月  5 12:49 0000000000000006-0000000000203303.snap-rw-r--r-- 1 root root     8509 12月  5 13:56 0000000000000006-0000000000205a14.snap-rw------- 1 root root 24977408 12月  5 14:13 db

查看etcd的证书文件:

supermap@podc01:~/openthings/kubernetes-tools/jupyter$ ls -l /etc/kubernetes/pki/etcd总用量 32-rw-r--r-- 1 root root 1017 11月 23 10:08 ca.crt-rw------- 1 root root 1679 11月 23 10:08 ca.key-rw-r--r-- 1 root root 1094 11月 23 10:08 healthcheck-client.crt-rw------- 1 root root 1679 11月 23 10:08 healthcheck-client.key-rw-r--r-- 1 root root 1127 11月 23 10:08 peer.crt-rw------- 1 root root 1679 11月 23 10:08 peer.key-rw-r--r-- 1 root root 1119 11月 23 10:08 server.crt-rw------- 1 root root 1675 11月 23 10:08 server.key

这些文件和从Kubernetes的pod命令行进去看到的是完全一样的(本来就是同一个目录)。

3、直接访问etcd的服务

下一步,我们来连接到这个实例,查看具体的运行信息。

首先,安装etcd-client,这是etcd的独立客户端。

sudo apt  install etcd-client

然后,连接到etcd实例(endpoints为上面所显示的地址参数:advertise-client-urls):

sudo etcdctl --endpoints https://127.0.0.1:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --key-file=/etc/kubernetes/pki/etcd/server.key --ca-file=/etc/kubernetes/pki/etcd/ca.crt member list
  • 注意:因为kubernetes集群使用https,因此需要指定--cert-file、--key-file和--ca-file三个参数,参数文件都位于 /etc/kubernetes/pki/etcd目录下。

我这里的输出为:

a874c87fd42044f: name=podc01 peerURLs=https://127.0.0.1:2380 clientURLs=https://127.0.0.1:2379 isLeader=true

可以照此输入其他命令,来访问由kubernetes所启动的实例(实际运行时由kubelet服务控制)。

4、备份与恢复

知道了上面的秘密,备份etcd 就不难了。有三个办法:

  • 可以直接备份/etc/kubernetes/pki/etcd和/var/lib/etcd下的文件内容。

    • 如果只备份/var/lib/etcd/member/snap下的文件,不需要停止服务。

    • 如果停止etcd服务,备份过程中服务会中断。

    • 对于多节点的etcd服务,不能使用直接备份和恢复目录文件的方法。

    • 备份之前先使用docker stop停止相应的服务,然后再启动即可。

    • 缺省配置情况下,每隔10000次改变,etcd将会产生一个snap。

  • 通过etcd-client客户端备份。如下(注意,snapshot是在API3里支持的,cert/key/cacert 三个参数名称与API2的命令不同):

sudo ETCDCTL_API=3 etcdctl snapshot save "/home/supermap/k8s-backup/data/etcd-snapshot/$(date +%Y%m%d_%H%M%S)_snapshot.db" --endpoints=127.0.0.1:2379 --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt"
  • 使用kubernetes的cronjob实现定期自动化备份。

使用kubernetes的cronjob实现定期自动化备份需要对images和启动参数有一些调整,我修改后的yaml文件如下:

apiVersion: batch/v1beta1kind: CronJobmetadata:  name: etcd-disaster-recovery  namespace: cronjobspec: schedule: "0 22 * * *" jobTemplate:  spec:    template:      metadata:       labels:        app: etcd-disaster-recovery      spec:        affinity:          nodeAffinity:            requiredDuringSchedulingIgnoredDuringExecution:                  nodeSelectorTerms:                  - matchExpressions:                    - key: kubernetes.io/hostname                      operator: In                      values:                      - podc01        containers:        - name: etcd          image: k8s.gcr.io/etcd:3.2.24          imagePullPolicy: "IfNotPresent"          command:          - sh          - -c          - "export ETCDCTL_API=3; \             etcdctl --endpoints=$ENDPOINT \             --cert=/etc/kubernetes/pki/etcd/server.crt \             --key=/etc/kubernetes/pki/etcd/server.key \             --cacert=/etc/kubernetes/pki/etcd/ca.crt \             snapshot save /snapshot/$(date +%Y%m%d_%H%M%S)_snapshot.db; \             echo etcd backup success"          env:          - name: ENDPOINT            value: "https://127.0.0.1:2379"          volumeMounts:            - mountPath: "/etc/kubernetes/pki/etcd"              name: etcd-certs            - mountPath: "/var/lib/etcd"              name: etcd-data            - mountPath: "/snapshot"              name: snapshot              subPath: data/etcd-snapshot            - mountPath: /etc/localtime              name: lt-config            - mountPath: /etc/timezone              name: tz-config        restartPolicy: OnFailure        volumes:          - name: etcd-certs            hostPath:              path: /etc/kubernetes/pki/etcd          - name: etcd-data            hostPath:              path: /var/lib/etcd          - name: snapshot            hostPath:              path: /home/supermap/k8s-backup          - name: lt-config            hostPath:              path: /etc/localtime          - name: tz-config            hostPath:              path: /etc/timezone        hostNetwork: true

除此之外,这样Kubernetes的etcd主数据库就备份完成了。

不过,完整地备份和恢复kubernetes集群还需要一些其它的操作,对于每一个运行的应用都还需要执行单独的备份操作。

"Kubernetes的etcd状态数据及其备份是怎样的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

备份 文件 服务 参数 数据 状态 实例 节点 集群 运行 目录 三个 信息 内容 命令 宿主 宿主机 输入 输出 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么处理数据库模式中的异常 酒泉市肃州区网络安全刑警中队 时事新闻网络安全知识观后感 网络安全平台动态口令 软件开发sop模板 道通软件开发工程师都做什么 数据安全法与网络安全法的区别 qt5嵌入式数据库是什么 广德自动化软件开发服务商家 技术软件开发服务保障 计算机网络安全第五版 广教版网络技术应用第一课 一般网络安全培训学校 汽车网络技术的发展方向 网易我的世界来服务器地图 网民如何网络安全防范 网络安全周互动游戏 流放之路有几个服务器 选课管理系统的数据库 生信技能树共享服务器好用吗 手机能进电脑服务器吗 数据访问层连接数据库 腾讯云服务器地域选择 19岁的网络安全师 音乐软件开发时间 软件设计和软件开发的区别 部队网络安全黑板报水彩 暗黑2重制版进不去服务器 软件开发成熟度模型认证 无线网络技术网络工程
0