Skip to content

Commit 1d2bffc

Browse files
committed
replace of osm with rclone to do backup and restore
1 parent 08dbfec commit 1d2bffc

File tree

9 files changed

+78
-20
lines changed

9 files changed

+78
-20
lines changed

hack/docker/redis-tools/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ RUN set -x \
55
&& apt-get install -y --no-install-recommends \
66
ca-certificates \
77
netcat \
8+
zip \
89
&& rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man /tmp/*
910

1011
COPY osm /usr/local/bin/osm

hack/docker/redis-tools/make.sh

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ IMG=redis-tools
1717
DB_VERSION=5.0.4
1818
TAG="$DB_VERSION"
1919

20-
OSM_VER=${OSM_VER:-0.9.1}
20+
OSM_VER=${OSM_VER:-v1.50.2}
2121

2222
DIST=$REPO_ROOT/dist
2323
mkdir -p $DIST
@@ -26,15 +26,17 @@ build() {
2626
pushd "$REPO_ROOT/hack/docker/redis-tools"
2727

2828
if [ ! -f "osm" ]; then
29-
# Download osm
30-
wget https://cdn.appscode.com/binaries/osm/${OSM_VER}/osm-alpine-amd64
31-
chmod +x osm-alpine-amd64
32-
mv osm-alpine-amd64 osm
29+
# Download rclone
30+
wget https://downloads.rclone.org/"${OSM_VER}"/rclone-"${OSM_VER}"-linux-amd64.zip
31+
unzip rclone-"${OSM_VER}"-linux-amd64.zip
32+
chmod +x rclone-"${OSM_VER}"-linux-amd64/rclone
33+
mv rclone-"${OSM_VER}"-linux-amd64/rclone osm
3334
fi
3435

3536
local cmd="docker build --pull -t $DOCKER_REGISTRY/$IMG:$TAG ."
3637
echo $cmd; $cmd
3738

39+
rm -rf rclone-"${OSM_VER}"-linux-amd64*
3840
rm osm
3941
popd
4042
}

hack/docker/redis-tools/redis-tools.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ case "$op" in
104104
redis-cli --rdb dump.rdb -h "${REDIS_HOST}" -a "${REDIS_PASSWORD}"
105105
redis-cli -h "${REDIS_HOST}" -a "${REDIS_PASSWORD}" CLUSTER NODES | grep myself > nodes.conf
106106
echo "Uploading dump file to the backend......."
107-
osm push --enable-analytics="$ENABLE_ANALYTICS" --osmconfig="$OSM_CONFIG_FILE" -c "$REDIS_BUCKET" "$REDIS_DATA_DIR" "$REDIS_FOLDER/$REDIS_SNAPSHOT"
107+
osm --config "$OSM_CONFIG_FILE" sync "$REDIS_DATA_DIR" ceph:"$REDIS_BUCKET"/"$REDIS_FOLDER/$REDIS_SNAPSHOT" -v
108108

109109
echo "Backup successful"
110110
;;
@@ -116,7 +116,7 @@ case "$op" in
116116
fi
117117
index=$(echo "${POD_NAME}" | awk -F- '{print $NF}')
118118
REDIS_SNAPSHOT=${REDIS_SNAPSHOT}-${index}
119-
osm pull --enable-analytics="$ENABLE_ANALYTICS" --osmconfig="$OSM_CONFIG_FILE" -c "$REDIS_BUCKET" "$REDIS_FOLDER/$REDIS_SNAPSHOT" "$REDIS_DATA_DIR"
119+
osm --config "$OSM_CONFIG_FILE" sync ceph:"$REDIS_BUCKET"/"$REDIS_FOLDER/$REDIS_SNAPSHOT" "$REDIS_DATA_DIR" -v
120120

121121
echo "Recovery successful"
122122
;;

pkg/apis/redis/v1alpha1/default.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func (in *RedisClusterBackup) Location() (string, error) {
114114
}
115115

116116
func (in *RedisClusterBackup) OSMSecretName() string {
117-
return fmt.Sprintf("osm-%v", in.Name)
117+
return fmt.Sprintf("osmconfig-%v", in.Name)
118118
}
119119

120120
func (in *RedisClusterBackup) JobName() string {

pkg/controller/manager/ensurer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,11 @@ func (r *realEnsureResource) EnsureRedisOSMSecret(cluster *redisv1alpha1.Distrib
138138
if cluster.Spec.Init == nil || cluster.Status.RestoreSucceeded > 0 {
139139
return nil
140140
}
141-
secret, err := osm.NewOSMSecret(r.client, k8sutil.OSMSecretName(backup.Name), backup.Namespace, backup.Spec.Backend)
141+
secret, err := osm.NewCephSecret(r.client, backup.OSMSecretName(), cluster.Namespace, backup.Spec.Backend)
142142
if err != nil {
143143
return err
144144
}
145-
if err := k8sutil.CreateSecret(r.client, secret); err != nil {
145+
if err := k8sutil.CreateSecret(r.client, secret, r.logger); err != nil {
146146
return err
147147
}
148148
return nil

pkg/controller/redisclusterbackup/sync_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (r *ReconcileRedisClusterBackup) create(reqLogger logr.Logger, backup *redi
103103
return err
104104
}
105105

106-
secret, err := osm.NewOSMSecret(r.client, k8sutil.OSMSecretName(backup.Name), backup.Namespace, backup.Spec.Backend)
106+
secret, err := osm.NewCephSecret(r.client, backup.OSMSecretName(), backup.Namespace, backup.Spec.Backend)
107107
if err != nil {
108108
msg := fmt.Sprintf("Failed to generate osm secret. Reason: %v", err)
109109
r.markAsFailedBackup(backup, msg)
@@ -116,7 +116,7 @@ func (r *ReconcileRedisClusterBackup) create(reqLogger logr.Logger, backup *redi
116116
return nil // don't retry
117117
}
118118

119-
if err := k8sutil.CreateSecret(r.client, secret); err != nil {
119+
if err := k8sutil.CreateSecret(r.client, secret, reqLogger); err != nil {
120120
r.recorder.Event(
121121
backup,
122122
corev1.EventTypeWarning,

pkg/k8sutil/util.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package k8sutil
22

33
import (
44
"context"
5-
"fmt"
65

6+
"github.com/go-logr/logr"
77
corev1 "k8s.io/api/core/v1"
88
"k8s.io/apimachinery/pkg/api/errors"
99
kerr "k8s.io/apimachinery/pkg/api/errors"
@@ -18,11 +18,7 @@ func IsRequestRetryable(err error) bool {
1818
kerr.IsTooManyRequests(err)
1919
}
2020

21-
func OSMSecretName(name string) string {
22-
return fmt.Sprintf("osm-%v", name)
23-
}
24-
25-
func CreateSecret(client client.Client, secret *corev1.Secret) error {
21+
func CreateSecret(client client.Client, secret *corev1.Secret, logger logr.Logger) error {
2622
ctx := context.TODO()
2723
s := &corev1.Secret{}
2824
err := client.Get(ctx, types.NamespacedName{
@@ -31,6 +27,8 @@ func CreateSecret(client client.Client, secret *corev1.Secret) error {
3127
}, s)
3228
if err != nil {
3329
if errors.IsNotFound(err) {
30+
logger.WithValues("Secret.Namespace", secret.Namespace, "Secret.Name", secret.Name).
31+
Info("creating a new secret")
3432
return client.Create(ctx, secret)
3533
}
3634
}

pkg/osm/ceph.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package osm
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
core "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
ktypes "k8s.io/apimachinery/pkg/types"
10+
api "kmodules.xyz/objectstore-api/api/v1"
11+
"sigs.k8s.io/controller-runtime/pkg/client"
12+
)
13+
14+
func NewCephSecret(kc client.Client, name, namespace string, spec api.Backend) (*core.Secret, error) {
15+
if spec.S3 == nil {
16+
return nil, fmt.Errorf("only suport ceph s3")
17+
}
18+
19+
config := make(map[string][]byte)
20+
if spec.StorageSecretName != "" {
21+
secret := &core.Secret{}
22+
err := kc.Get(context.TODO(), ktypes.NamespacedName{
23+
Name: spec.StorageSecretName,
24+
Namespace: namespace,
25+
}, secret)
26+
if err != nil {
27+
return nil, err
28+
}
29+
config = secret.Data
30+
}
31+
32+
keyID := config[api.AWS_ACCESS_KEY_ID]
33+
key := config[api.AWS_SECRET_ACCESS_KEY]
34+
35+
osmBytes := fmt.Sprintf(`[ceph]
36+
type = s3
37+
provider = Ceph
38+
env_auth = false
39+
access_key_id = %s
40+
secret_access_key = %s
41+
region =
42+
endpoint = %s
43+
location_constraint =
44+
acl =
45+
server_side_encryption =
46+
storage_class =`, keyID, key, spec.S3.Endpoint)
47+
out := &core.Secret{
48+
ObjectMeta: metav1.ObjectMeta{
49+
Name: name,
50+
Namespace: namespace,
51+
},
52+
Data: map[string][]byte{
53+
"config": []byte(osmBytes),
54+
},
55+
}
56+
return out, nil
57+
}

pkg/resources/statefulsets/statefulset.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func redisExporterContainer(cluster *redisv1alpha1.DistributedRedisCluster, pass
235235
fmt.Sprintf("--web.telemetry-path=%v", redisv1alpha1.PrometheusExporterTelemetryPath),
236236
}, cluster.Spec.Monitor.Args...),
237237
Image: cluster.Spec.Monitor.Image,
238-
ImagePullPolicy: corev1.PullIfNotPresent,
238+
ImagePullPolicy: corev1.PullAlways,
239239
Ports: []corev1.ContainerPort{
240240
{
241241
Name: "prom-http",
@@ -266,7 +266,7 @@ func redisInitContainer(cluster *redisv1alpha1.DistributedRedisCluster, backup *
266266
container := corev1.Container{
267267
Name: redisv1alpha1.JobTypeRestore,
268268
Image: backup.Spec.Image,
269-
ImagePullPolicy: "Always",
269+
ImagePullPolicy: corev1.PullAlways,
270270
Args: []string{
271271
redisv1alpha1.JobTypeRestore,
272272
fmt.Sprintf(`--data-dir=%s`, redisv1alpha1.BackupDumpDir),

0 commit comments

Comments
 (0)