云网牛站
所在位置:首页 > Linux云服务器 > 将OpenShift 4.x上的Etcd数据备份到AWS S3存储桶的步骤

将OpenShift 4.x上的Etcd数据备份到AWS S3存储桶的步骤

2021-03-21 16:06:30作者:项中强稿源:云网牛站

在本文中,将介绍如何备份OpenShift etcd并将数据推送到AWS S3存储桶。

将OpenShift 4.x上的Etcd数据备份到AWS S3存储桶的步骤

 

前言

etcd是OpenShift容器平台的键值存储,可持久存储所有资源对象的状态。在任何OpenShift群集管理中,建议您定期备份群集的etcd数据并将其存储在安全的位置,这是一个好的建议。

数据存储的理想位置是在OpenShift Container Platform环境之外,这可以是NFS服务器共享,也可以是基础架构中或云环境中的辅助服务器。

另一个建议是在非高峰使用时间内进行etcd备份,因为该操作本质上是阻塞的。确保在任何OpenShift群集升级后执行etcd备份操作,这样做的重要性在于,在群集还原期间,必须使用从相同z-stream版本获取etcd备份。例如OpenShift Container Platform 4.6.3群集必须使用从4.6.3中获取etcd备份。

参考:在RHEL/CentOS 8上安装和配置etcd 3.3.12的方法

 

步骤1:登录到群集中的一个主节点

etcd群集备份必须在主控主机上一次备份脚本的调用上执行。不要为每个主主机进行备份。

通过SSH或调试会话登录到一个主节点:

# SSH Access

$ ssh core@<master_node_ip_or_dns_name>

# Debug session

$ oc debug node/<node_name>

对于调试会话,您需要将根目录更改为主机:

sh-4.6# chroot /host

如果启用了群集范围的代理,请确保已导出NO_PROXY、HTTP_PROXY和HTTPS_PROXY环境变量。

 

步骤2:在OpenShift 4.x上执行etcd备份

需要以具有cluster-admin角色的用户身份进行OpenShift集群访问,才能执行此操作。

在继续进行之前,请检查以确认是否启用了代理:

$ oc get proxy cluster -o yaml

如果启用了代理,则httpProxy、httpsProxy和noProxy字段将设置值。

运行cluster-backup.sh脚本以启动etcd备份过程。您应该通过保存备份的路径:

$ mkdir /home/core/etcd_backups

$ sudo /usr/local/bin/cluster-backup.sh /home/core/etcd_backups

这是我的命令执行输出:

3e53f83f3c02b43dfa8d282265c1b0f9789bcda827c4e13110a9b6f6612d447c

etcdctl version: 3.3.18

API version: 3.3

found latest kube-apiserver-pod: /etc/kubernetes/static-pod-resources/kube-apiserver-pod-115

found latest kube-controller-manager-pod: /etc/kubernetes/static-pod-resources/kube-controller-manager-pod-24

found latest kube-scheduler-pod: /etc/kubernetes/static-pod-resources/kube-scheduler-pod-26

found latest etcd-pod: /etc/kubernetes/static-pod-resources/etcd-pod-11

Snapshot saved at /home/core/etcd_backups/snapshot_2021-03-16_134036.db

snapshot db and kube resources are successfully saved to /home/core/etcd_backups

列出备份目录中的文件:

$ ls -1 /home/core/etcd_backups/

snapshot_2021-03-16_134036.db

static_kuberesources_2021-03-16_134036.tar.gz

$ du -sh /home/core/etcd_backups/*

1.5G /home/core/etcd_backups/snapshot_2021-03-16_134036.db

76K /home/core/etcd_backups/static_kuberesources_2021-03-16_134036.tar.gz

备份中将有两个文件:

1、snapshot_<datetimestamp>.db:此文件是etcd快照。

2、static_kuberesources_<datetimestamp>.tar.gz:该文件包含静态容器的资源。如果启用了etcd加密,则它还将包含etcd快照的加密密钥。

 

步骤3:将备份推送到AWS S3(从Bastion Server)

从Bastion Server登录并复制备份文件:

scp -r core@serverip:/home/core/etcd_backups ~/

安装AWS CLI工具:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

参考:在Linux系统上安装和使用AWS CLI的方法

安装unzip工具:

sudo yum -y install unzip

解压缩下载的文件:

unzip awscli-exe-linux-x86_64.zip

安装AWS CLI:

$ sudo ./aws/install

You can now run: /usr/local/bin/aws --version

通过检查版本来确认安装:

$ aws --version

aws-cli/2.1.30 Python/3.8.8 Linux/3.10.0-957.el7.x86_64 exe/x86_64.rhel.7 prompt/off

创建OpenShift Backups存储桶:

$ aws s3 mb s3://openshiftbackups

make_bucket: openshiftbackups

创建一个IAM用户:

$ aws iam create-user --user-name backupsonly

创建用于备份的AWS策略用户,该用户只能写入S3:

cat >aws-s3-uploads-policy.json<<EOF

{

  "Version": "2012-10-17",

  "Statement": [

    {

      "Effect": "Allow",

      "Action": [

        "s3:Get*",

        "s3:List*",

        "s3:Put*"

      ],

      "Resource": "*"

    }

  ]

}

EOF

应用政策:

aws iam create-policy --policy-name upload-only-policy --policy-document file://aws-s3-uploads-policy.json

将AWS策略分配给IAM用户:

aws iam attach-user-policy --policy-arn arn:aws:iam::<accountid>:policy/upload-only-policy --user-name backupsonly

现在,您可以为IAM用户创建访问密钥以进行测试:

$ aws iam create-access-key --user-name backupsonly

{

  "AccessKey": {

    "UserName": "backupsonly",

    "AccessKeyId": "AKIATWFKCYAHF74SCFEP",

    "Status": "Active",

    "SecretAccessKey": "3CgPHuU+q8vzoSdJisXscgvay3Cv7nVZMjDHpWFS",

    "CreateDate": "2021-03-16T12:14:39+00:00"

  }

}

记下访问和密钥ID并在配置中使用它:

$ aws configure # On OCP Bastion server

提供:

AWS访问密钥ID、AWS秘密访问密钥、默认区域。

尝试将文件上传到S3存储桶:

$ aws s3 cp etcd_backups/ s3://openshiftbackups/etcd --recursive

upload: etcd_backups/static_kuberesources_2021-03-16_134036.tar.gz to s3://openshiftbackups/etcd/static_kuberesources_2021-03-16_134036.tar.gz

upload: etcd_backups/snapshot_2021-03-16_134036.db to s3://openshiftbackups/etcd/snapshot_2021-03-16_134036.db

确认:

$ aws s3 ls s3://openshiftbackups/etcd/

2021-03-16 16:00:59 1549340704 snapshot_2021-03-16_134036.db

2021-03-16 16:00:59      77300 static_kuberesources_2021-03-16_134036.tar.gz

 

步骤4:自动备份到AWS S3(从Bastion Server)

我们可以执行一个脚本,该脚本将执行以下操作:

1、从堡垒登录到主节点。

2、启动etcd的备份。

3、将备份数据从主节点复制到堡垒服务器。

4、删除主节点上的备份数据。

5、将备份数据复制到S3存储桶。

6、成功上传到S3后删除本地数据。

在堡垒服务器上创建脚本文件:

$ vim backup_etcd_s3.sh

这是可以针对更高级用例进行进一步修改的脚本:

#!/bin/bash

MASTER_NAME="master01.example.net"

USERNAME="core"

BACKUPS_DIR=~/etcd_backups

S3_BUCKET="openshiftbackups/etcd"

RESULT="$?"

# Create backups directory if doesn't exist

[ -d ${BACKUPS_DIR} ] && echo "Directory Exists" || mkdir ${BACKUPS_DIR}

# Login and run backup

ssh ${USERNAME}@${MASTER_NAME} 'mkdir /home/core/etcd_backups' 2>/dev/null

ssh ${USERNAME}@${MASTER_NAME} 'sudo /usr/local/bin/cluster-backup.sh /home/core/etcd_backups'

scp -r ${USERNAME}@${MASTER_NAME}:/home/core/etcd_backups/*  ${BACKUPS_DIR}/

# clean etcd backups directory on the master node

if [ $RESULT -eq 0 ]; then

  ssh ${USERNAME}@${MASTER_NAME} 'rm -rf /home/core/etcd_backups/*'

fi

# Backup to aws s3

aws s3 cp ${BACKUPS_DIR}/ s3://${S3_BUCKET} --recursive

# List bucket contents

aws s3 ls s3://${S3_BUCKET}/

# Clean backups older than 1 day

#find ${BACKUPS_DIR}/ -mtime +1 -exec rm {} \;

find ${BACKUPS_DIR}/ -type f -mtime +1 -delete

使用凌晨3点运行的Cron Job:

$ crontab -e

0 3 * * * /path/to/backup_etcd_s3.sh

至此,备份OpenShift etcd并将数据推送到S3存储桶的操作全部完成。

 

相关主题

为Ceph对象网关存储配置AWS S3 CLI:使用AWS CLI访问Ceph对象存储

精选文章
热门文章