Skip to content

K8SPSMDB-1261 split demand-backup-physical tests #1935

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions e2e-tests/demand-backup-physical-aws/conf/some-name.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDB
metadata:
finalizers:
- percona.com/delete-psmdb-pvc
name: some-name
spec:
#platform: openshift
image:
imagePullPolicy: Always
updateStrategy: SmartUpdate
backup:
enabled: true
image: perconalab/percona-server-mongodb-operator:1.1.0-backup
storages:
aws-s3:
main: true
type: s3
s3:
credentialsSecret: aws-s3-secret
region: us-east-1
bucket: operator-testing
prefix: psmdb-demand-backup-physical
insecureSkipTLSVerify: false
replsets:
- name: rs0
affinity:
antiAffinityTopologyKey: none
resources:
limits:
cpu: 500m
memory: 1G
requests:
cpu: 100m
memory: 0.1G
volumeSpec:
persistentVolumeClaim:
resources:
requests:
storage: 3Gi
expose:
enabled: false
type: ClusterIP
size: 3
configuration: |
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
security:
enableEncryption: true
redactClientLogData: false
setParameter:
ttlMonitorSleepSecs: 60
wiredTigerConcurrentReadTransactions: 128
wiredTigerConcurrentWriteTransactions: 128
storage:
engine: wiredTiger
wiredTiger:
collectionConfig:
blockCompressor: snappy
engineConfig:
directoryForIndexes: false
journalCompressor: snappy
indexConfig:
prefixCompression: true
secrets:
users: some-users
63 changes: 63 additions & 0 deletions e2e-tests/demand-backup-physical-aws/run
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/bin/bash

set -o errexit

test_dir=$(realpath "$(dirname "$0")")
. "${test_dir}/../functions"
set_debug

if [ -n "$SKIP_BACKUPS_TO_AWS_GCP_AZURE" ]; then
desc 'Skip tests related to AWS S3 Cloud Storage'
exit 0
fi

create_infra "${namespace}"

apply_s3_storage_secrets

desc 'Testing on not sharded cluster'

echo "Creating PSMDB cluster"
cluster="some-name"
kubectl_bin apply -f "${test_dir}/conf/secrets.yml"
apply_cluster "${test_dir}/conf/${cluster}.yml"
kubectl_bin apply -f "${conf_dir}/client_with_tls.yml"

echo "Check if all pods started"
wait_for_running ${cluster}-rs0 3
wait_cluster_consistency ${cluster}

sleep 60 # give time for resync to start

wait_for_pbm_operations ${cluster}

echo 'Writing test data'
run_mongo \
'db.createUser({user:"myApp",pwd:"myPass",roles:[{db:"myApp",role:"readWrite"}]})' \
"userAdmin:userAdmin123456@${cluster}-rs0.${namespace}"
sleep 1
run_mongo \
'use myApp\n db.test.insert({ x: 100500 })' \
"myApp:myPass@${cluster}-rs0.${namespace}"
sleep 5
compare_mongo_cmd "find" "myApp:myPass@${cluster}-rs0-0.${cluster}-rs0.${namespace}"
compare_mongo_cmd "find" "myApp:myPass@${cluster}-rs0-1.${cluster}-rs0.${namespace}"
compare_mongo_cmd "find" "myApp:myPass@${cluster}-rs0-2.${cluster}-rs0.${namespace}"

echo 'Running backups'
backup_name_aws="backup-aws-s3"

run_backup aws-s3 ${backup_name_aws} 'physical'
wait_backup "${backup_name_aws}"
check_backup_in_storage ${backup_name_aws} s3 rs0

echo 'Drop collection'
run_mongo 'use myApp\n db.test.drop()' "myApp:myPass@${cluster}-rs0.${namespace}"

echo 'Check backup and restore -- aws-s3'
run_restore ${backup_name_aws}
run_recovery_check ${backup_name_aws}

destroy "$namespace"

desc 'test passed'
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
annotations:
percona.com/restore-in-progress: "true"
generation: 2
labels:
app.kubernetes.io/component: mongod
app.kubernetes.io/instance: some-name
app.kubernetes.io/managed-by: percona-server-mongodb-operator
app.kubernetes.io/name: percona-server-mongodb
app.kubernetes.io/part-of: percona-server-mongodb
app.kubernetes.io/replset: rs0
name: some-name-rs0
ownerReferences:
- controller: true
kind: PerconaServerMongoDB
name: some-name
spec:
podManagementPolicy: OrderedReady
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/component: mongod
app.kubernetes.io/instance: some-name
app.kubernetes.io/managed-by: percona-server-mongodb-operator
app.kubernetes.io/name: percona-server-mongodb
app.kubernetes.io/part-of: percona-server-mongodb
app.kubernetes.io/replset: rs0
serviceName: some-name-rs0
template:
metadata:
annotations: {}
labels:
app.kubernetes.io/component: mongod
app.kubernetes.io/instance: some-name
app.kubernetes.io/managed-by: percona-server-mongodb-operator
app.kubernetes.io/name: percona-server-mongodb
app.kubernetes.io/part-of: percona-server-mongodb
app.kubernetes.io/replset: rs0
spec:
containers:
- args:
- --bind_ip_all
- --auth
- --dbpath=/data/db
- --port=27017
- --replSet=rs0
- --storageEngine=wiredTiger
- --relaxPermChecks
- --sslAllowInvalidCertificates
- --clusterAuthMode=x509
- --tlsMode=preferTLS
- --enableEncryption
- --encryptionKeyFile=/etc/mongodb-encryption/encryption-key
- --wiredTigerCacheSizeGB=0.25
- --wiredTigerIndexPrefixCompression=true
- --config=/etc/mongodb-config/mongod.conf
- --quiet
command:
- /opt/percona/physical-restore-ps-entry.sh
env:
- name: SERVICE_NAME
value: some-name
- name: MONGODB_PORT
value: "27017"
- name: MONGODB_REPLSET
value: rs0
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_SIDECAR
value: "true"
- name: PBM_AGENT_SIDECAR_SLEEP
value: "5"
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: PBM_MONGODB_URI
value: mongodb://$(PBM_AGENT_MONGODB_USERNAME):$(PBM_AGENT_MONGODB_PASSWORD)@$(POD_NAME)
envFrom:
- secretRef:
name: internal-some-name-users
optional: false
imagePullPolicy: Always
livenessProbe:
exec:
command:
- /opt/percona/mongodb-healthcheck
- k8s
- liveness
- --ssl
- --sslInsecure
- --sslCAFile
- /etc/mongodb-ssl/ca.crt
- --sslPEMKeyFile
- /tmp/tls.pem
- --startupDelaySeconds
- "7200"
failureThreshold: 4
initialDelaySeconds: 60
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 10
name: mongod
ports:
- containerPort: 27017
name: mongodb
protocol: TCP
readinessProbe:
exec:
command:
- /opt/percona/mongodb-healthcheck
- k8s
- readiness
- --component
- mongod
failureThreshold: 8
initialDelaySeconds: 10
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 2
resources:
limits:
cpu: 500m
memory: 1G
requests:
cpu: 100m
memory: 100M
securityContext:
runAsNonRoot: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /data/db
name: mongod-data
- mountPath: /etc/mongodb-secrets
name: some-name-mongodb-keyfile
readOnly: true
- mountPath: /etc/mongodb-ssl
name: ssl
readOnly: true
- mountPath: /etc/mongodb-ssl-internal
name: ssl-internal
readOnly: true
- mountPath: /etc/mongodb-config
name: config
- mountPath: /opt/percona
name: bin
- mountPath: /etc/mongodb-encryption
name: some-name-mongodb-encryption-key
readOnly: true
- mountPath: /etc/users-secret
name: users-secret-file
- mountPath: /etc/pbm/
name: pbm-config
readOnly: true
workingDir: /data/db
dnsPolicy: ClusterFirst
initContainers:
- command:
- /init-entrypoint.sh
imagePullPolicy: Always
name: mongo-init
resources:
limits:
cpu: 500m
memory: 1G
requests:
cpu: 100m
memory: 100M
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /data/db
name: mongod-data
- mountPath: /opt/percona
name: bin
- command:
- bash
- -c
- install -D /usr/bin/pbm /opt/percona/pbm && install -D /usr/bin/pbm-agent /opt/percona/pbm-agent
imagePullPolicy: Always
name: pbm-init
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /data/db
name: mongod-data
- mountPath: /opt/percona
name: bin
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 60
volumes:
- name: some-name-mongodb-keyfile
secret:
defaultMode: 288
optional: false
secretName: some-name-mongodb-keyfile
- emptyDir: {}
name: bin
- configMap:
defaultMode: 420
name: some-name-rs0-mongod
optional: true
name: config
- name: some-name-mongodb-encryption-key
secret:
defaultMode: 288
optional: false
secretName: some-name-mongodb-encryption-key
- name: ssl
secret:
defaultMode: 288
optional: false
secretName: some-name-ssl
- name: ssl-internal
secret:
defaultMode: 288
optional: true
secretName: some-name-ssl-internal
- name: users-secret-file
secret:
defaultMode: 420
secretName: internal-some-name-users
- name: pbm-config
secret:
defaultMode: 420
secretName: some-name-pbm-config
updateStrategy:
type: OnDelete
volumeClaimTemplates:
- metadata:
name: mongod-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
status:
phase: Pending
Loading
Loading