Kubernetes环境的最佳备份解决方案! (实践)


简介

这是在建筑版本之后的实用版本。
观看与文章结尾链接的活动中的视频!

我应该备份什么?

持久数据保护

正如我在

构建部分的开头提到的那样,随着在容器世界中运行企业应用程序的需求增加,容器也开始具有持久性数据。永久数据如果丢失,会对企业产生重大影响,并且是必须可靠保护的一部分。

备份容器环境

我们认为仅保护容器环境中的持久性数据是不够的。
建立一个容器?K8s环境不是那么容易。对于习惯于构建它的人来说,这可能不是问题,但是艰难地构建的环境将被破坏,再次挑战将需要大量的精神力量。
此外,如果在实际开始操作时破坏了环境本身,则各种吊舱正在运行,并且它成为许多工程师使用的基础。从容器环境管理员的angular来看,脊柱会冻结。
还必须考虑保护容器环境本身,以便在极少数情况下将此类风险降到最低并轻松恢复。

永久数据备份

实际上,一旦部署了客户端容器,您要做的就是从NetBackup备份任何数据,这非常容易。

image.png

在NetBackup管理控制台中,
?指定标准策略
?还提供了Accelerator(永久增量备份功能)
?备份计划设置
?识别客户端容器的主机名
?指定备份目标区域
您要做的就是使用上述设置创建并执行备份策略。

即使在容器环境中,也可以通过与以前相同的操作来保护持久性数据。

容器环境备份

应该保护什么?

这次,我们以保护k8s环境为例与HPE进行了联合验证。
k8s中有一个称为" / etcd"的区域,这是k8s集群的核心。
通常,主节点本身是集群的,那么您是否需要备份?您可能会想到,集群是可以提高系统可用性并确保正常运行时间的解决方案,但它不能作为备份。例如,如果操作错误导致更新错误,并且其他节点将其同步,则环境将被破坏。也可能是错误或勒索软件之类的网络攻击。备份是唯一可以免受这些攻击的解决方案,因此可以安全地保护" / etcd"。

etcd备份验证环境

验证环境如下。
image.png

etcd

的备份流

①创建一个JobPod,它定期拍摄/ etcd的快照
②将备份文件保存在容器存储器

job_sample.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: etcd-snapshot
  namespace: veritas
spec:
  concurrencyPolicy: Forbid
  schedule: "*/10 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - name: etcd-snapshot
            image: fideltak/etcdctl:1.0
            imagePullPolicy: IfNotPresent
            args:
            - "--debug"
            - "--endpoints=https://[127.0.0.1]:2379"
            - "--cacert=/etc/kubernetes/pki/etcd/ca.crt"
            - "--key=/etc/kubernetes/pki/etcd/server.key"
            - "--cert=/etc/kubernetes/pki/etcd/server.crt"
            - "snapshot"
            - "save"
            - "/veritas/k8s-etcd-backup.db"
            volumeMounts:
            - mountPath: /etc/kubernetes/pki/etcd
              name: etcd-certs
              readOnly: true
            - mountPath: /veritas
              name: veritas-backup
          tolerations:
          - key: node-role.kubernetes.io/master
            effect: NoSchedule
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                  - matchExpressions:
                    - key: node-role.kubernetes.io/master
                      operator: Exists
          hostNetwork: true
          volumes:
          - name: etcd-certs
            hostPath:
              path: "/etc/kubernetes/pki/etcd"
          - name: veritas-backup
            persistentVolumeClaim:
              claimName: veritas-pvc
              readOnly: false

③从NetBackup客户端容器

引用容器存储中的备份文件。

可以从客户端容器中看到备份文件(k8s-etcd-backup.db)↓

1
2
3
4
5
root@test:/veritas# ls -la
total 105529
drwxrwxrwx 1 root root         1 Feb 14 10:53 .
drwxr-xr-x 1 root root        43 Feb 14 10:18 ..
-rw-r--r-- 1 root root 108060704 Feb 14 10:53 k8s-etcd-backup.db

④通过NetBackp客户端容器备份到重复数据删除池
之后,以与备份持久数据相同的方式,使用NetBackup创建并执行备份策略。

image.png

当将k8s与云服务一起使用时,主节点通常是不可见的,因此在这种情况下,使用相同的方法备份清单是安全的。

恢复etcd

的流程

①使用NetBackup将etcd备份数据还原到容器存储
(2)执行Job扩展文件以使其可被Etcd读取
③还原到主节点的本地目录
这次,为进行验证,我们读取了扩展为etcd容器的数据并确认了其正常性。
在生产环境中,您需要还原到/ var / lib / etcd区域。

restore-sample.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
apiVersion: v1                  
kind: Pod                      
metadata:
  name: etcd-restore
  namespace: veritas
  labels:
    app: etcd-restore
spec:
  restartPolicy: Never
  containers:
    - name: etcd-restore
      image: fideltak/etcdctl:1.0
      imagePullPolicy: IfNotPresent
      args:
        - "--debug=true"
        - "--endpoints=http://[127.0.0.1]:2379"
        - "--name=master"
        - "--data-dir=/veritas/restore/etcd-from-backup"
        - "--initial-cluster=master=http://127.0.0.1:2380"
        - "--initial-advertise-peer-urls=http://127.0.0.1:2380"
        - "--user=root"
        - "snapshot"
        - "restore"
        - "/veritas/k8s-etcd-backup.db"
      volumeMounts:
      - mountPath: /veritas
        name: veritas-backup
      - mountPath: /veritas/restore
        subPath: restore
        name: veritas-backup
  volumes:
    - name: veritas-backup
      persistentVolumeClaim:
        claimName: veritas-pvc
        readOnly: false

④按照官方程序重新启动Etcd容器。

结论

怎么样了?
在k8s的世界中,有必要做到这一点,但是在验证之后,我们还发布了示例代码,因此我认为此门槛已经降低。如果您能够确定一旦建立了该机制就可以非常轻松地完成备份,那就太好了。
在每天都在加速增长的容器区域,Veritas牢记这一点来保护数据。
请将其留给Veritas,后者可以保护包括容器环境在内的数据。

我们想借此机会感谢HPE在核实此事方面的合作。
请与HPE和其他Veritas合作伙伴联系,以介绍和构建容器环境基础架构!

也请在Veritas技术活动上观看视频!

点击这里进行业务洽谈咨询

在填写本文的查询时,请确保在"评论/通讯"字段中输入#GWC标签。
您的信息将根据Veritas的隐私政策进行管理。

其他链接

[摘要文章]也请链接到Veritas Technologies的所有文章!