mirror of
https://github.com/rancher/rke.git
synced 2025-10-20 18:40:43 +00:00
Automatically sync local backups
This commit is contained in:
committed by
Alena Prokharchyk
parent
fa332f7e07
commit
285ac8d81c
@@ -335,7 +335,8 @@ func RunEtcdSnapshotSave(ctx context.Context, etcdHost *hosts.Host, prsMap map[s
|
||||
return nil
|
||||
}
|
||||
|
||||
func DownloadEtcdSnapshot(ctx context.Context, etcdHost *hosts.Host, prsMap map[string]v3.PrivateRegistry, etcdSnapshotImage string, name string, es v3.ETCDService) error {
|
||||
func DownloadEtcdSnapshotFromS3(ctx context.Context, etcdHost *hosts.Host, prsMap map[string]v3.PrivateRegistry, etcdSnapshotImage string, name string, es v3.ETCDService) error {
|
||||
|
||||
log.Infof(ctx, "[etcd] Get snapshot [%s] on host [%s]", name, etcdHost.Address)
|
||||
s3Backend := es.BackupConfig.S3BackupConfig
|
||||
if len(s3Backend.Endpoint) == 0 || len(s3Backend.BucketName) == 0 {
|
||||
@@ -347,6 +348,7 @@ func DownloadEtcdSnapshot(ctx context.Context, etcdHost *hosts.Host, prsMap map[
|
||||
"etcd-backup",
|
||||
"download",
|
||||
"--name", name,
|
||||
"--s3-backup=true",
|
||||
"--s3-endpoint=" + s3Backend.Endpoint,
|
||||
"--s3-accessKey=" + s3Backend.AccessKey,
|
||||
"--s3-secretKey=" + s3Backend.SecretKey,
|
||||
@@ -490,3 +492,69 @@ func configS3BackupImgCmd(ctx context.Context, imageCfg *container.Config, bc *v
|
||||
imageCfg.Cmd = append(imageCfg.Cmd, cmd...)
|
||||
return imageCfg
|
||||
}
|
||||
|
||||
func StartBackupServer(ctx context.Context, etcdHost *hosts.Host, prsMap map[string]v3.PrivateRegistry, etcdSnapshotImage string, name string) error {
|
||||
log.Infof(ctx, "[etcd] starting backup server on host [%s]", etcdHost.Address)
|
||||
|
||||
imageCfg := &container.Config{
|
||||
Cmd: []string{
|
||||
"/opt/rke-tools/rke-etcd-backup",
|
||||
"etcd-backup",
|
||||
"serve",
|
||||
"--name", name,
|
||||
"--cacert", pki.GetCertPath(pki.CACertName),
|
||||
"--cert", pki.GetCertPath(pki.KubeNodeCertName),
|
||||
"--key", pki.GetKeyPath(pki.KubeNodeCertName),
|
||||
},
|
||||
Image: etcdSnapshotImage,
|
||||
}
|
||||
hostCfg := &container.HostConfig{
|
||||
Binds: []string{
|
||||
fmt.Sprintf("%s:/backup", EtcdSnapshotPath),
|
||||
fmt.Sprintf("%s:/etc/kubernetes:z", path.Join(etcdHost.PrefixPath, "/etc/kubernetes"))},
|
||||
NetworkMode: container.NetworkMode("host"),
|
||||
RestartPolicy: container.RestartPolicy{Name: "on-failure"},
|
||||
}
|
||||
return docker.DoRunContainer(ctx, etcdHost.DClient, imageCfg, hostCfg, EtcdServeBackupContainerName, etcdHost.Address, ETCDRole, prsMap)
|
||||
}
|
||||
|
||||
func DownloadEtcdSnapshotFromBackupServer(ctx context.Context, etcdHost *hosts.Host, prsMap map[string]v3.PrivateRegistry, etcdSnapshotImage, name string, backupServer *hosts.Host) error {
|
||||
log.Infof(ctx, "[etcd] Get snapshot [%s] on host [%s]", name, etcdHost.Address)
|
||||
imageCfg := &container.Config{
|
||||
Cmd: []string{
|
||||
"/opt/rke-tools/rke-etcd-backup",
|
||||
"etcd-backup",
|
||||
"download",
|
||||
"--name", name,
|
||||
"--local-endpoint", backupServer.Address,
|
||||
"--cacert", pki.GetCertPath(pki.CACertName),
|
||||
"--cert", pki.GetCertPath(pki.KubeNodeCertName),
|
||||
"--key", pki.GetKeyPath(pki.KubeNodeCertName),
|
||||
},
|
||||
Image: etcdSnapshotImage,
|
||||
}
|
||||
|
||||
hostCfg := &container.HostConfig{
|
||||
Binds: []string{
|
||||
fmt.Sprintf("%s:/backup", EtcdSnapshotPath),
|
||||
fmt.Sprintf("%s:/etc/kubernetes:z", path.Join(etcdHost.PrefixPath, "/etc/kubernetes"))},
|
||||
NetworkMode: container.NetworkMode("host"),
|
||||
RestartPolicy: container.RestartPolicy{Name: "on-failure"},
|
||||
}
|
||||
|
||||
if err := docker.DoRunContainer(ctx, etcdHost.DClient, imageCfg, hostCfg, EtcdDownloadBackupContainerName, etcdHost.Address, ETCDRole, prsMap); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
status, _, stderr, err := docker.GetContainerOutput(ctx, etcdHost.DClient, EtcdDownloadBackupContainerName, etcdHost.Address)
|
||||
if status != 0 || err != nil {
|
||||
if removeErr := docker.RemoveContainer(ctx, etcdHost.DClient, etcdHost.Address, EtcdDownloadBackupContainerName); removeErr != nil {
|
||||
log.Warnf(ctx, "Failed to remove container [%s]: %v", removeErr)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("Failed to download etcd snapshot from backup server [%s], exit code [%d]: %v", backupServer.Address, status, stderr)
|
||||
}
|
||||
return docker.RemoveContainer(ctx, etcdHost.DClient, etcdHost.Address, EtcdDownloadBackupContainerName)
|
||||
}
|
||||
|
@@ -32,6 +32,7 @@ const (
|
||||
EtcdSnapshotOnceContainerName = "etcd-snapshot-once"
|
||||
EtcdRestoreContainerName = "etcd-restore"
|
||||
EtcdDownloadBackupContainerName = "etcd-download-backup"
|
||||
EtcdServeBackupContainerName = "etcd-Serve-backup"
|
||||
EtcdChecksumContainerName = "etcd-checksum-checker"
|
||||
NginxProxyContainerName = "nginx-proxy"
|
||||
SidekickContainerName = "service-sidekick"
|
||||
|
Reference in New Issue
Block a user