@@ -24,29 +24,29 @@ _usage() {
2424}
2525
2626while (( "$# " )) ; do
27- case " $1 " in
28- -v|--verbose)
29- VERBOSE=1
30- ;;
31- -l|--log-file)
32- LOGFILE=" $2 "
33- shift
34- ;;
35- -b|--backup-file)
36- BACKUP_ARCHIVE=" $2 "
37- shift
38- ;;
39- # Disable the backup replication on other master nodes
40- -n|--no-replication)
41- REPLICATION=0
42- ;;
43- * ) # unsupported flags
44- echo " Error: Unsupported flag $1 " >&2
45- _usage
46- exit 1
47- ;;
48- esac
49- shift
27+ case " $1 " in
28+ -v|--verbose)
29+ VERBOSE=1
30+ ;;
31+ -l|--log-file)
32+ LOGFILE=" $2 "
33+ shift
34+ ;;
35+ -b|--backup-file)
36+ BACKUP_ARCHIVE=" $2 "
37+ shift
38+ ;;
39+ # Disable the backup replication on other master nodes
40+ -n|--no-replication)
41+ REPLICATION=0
42+ ;;
43+ * ) # unsupported flags
44+ echo " Error: Unsupported flag $1 " >&2
45+ _usage
46+ exit 1
47+ ;;
48+ esac
49+ shift
5050done
5151
5252TMPFILES=$( mktemp -d)
@@ -79,8 +79,8 @@ _save_cp() {
7979 if [ -f " $src " ]; then
8080 echo " Copying '$src ' to '$dst '"
8181 if [ ! -d " $( dirname " $dst " ) " ]; then
82- echo " Creating '$( dirname " $dst " ) ' directory"
83- mkdir -p " $( dirname " $dst " ) "
82+ echo " Creating '$( dirname " $dst " ) ' directory"
83+ mkdir -p " $( dirname " $dst " ) "
8484 fi
8585 cp -a " $src " " $dst "
8686 elif [ -d " $src " ]; then
@@ -115,21 +115,23 @@ backup_cas() {
115115
116116backup_etcd () {
117117 local -r etcd_snapshot=" etcd_snapshot_$( date -u +%Y%m%d_%H%M%S) "
118- local -r cmd=(
119- " ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379"
120- " --cert /etc/kubernetes/pki/etcd/salt-master-etcd-client.crt"
121- " --key /etc/kubernetes/pki/etcd/salt-master-etcd-client.key"
122- " --cacert /etc/kubernetes/pki/etcd/ca.crt"
123- " snapshot save $etcd_snapshot "
124- )
125118 local etcd_container=' '
126119 echo " Snapshot etcd"
127120 etcd_container=" $( crictl ps -q \
128121 --label io.kubernetes.pod.namespace=kube-system \
129122 --label io.kubernetes.container.name=etcd \
130123 --state Running) "
131- echo " Running '${cmd[*]} ' in etcd container $etcd_container "
132- crictl exec -i " $etcd_container " sh -c " ${cmd[*]} "
124+ echo " Running etcdctl snapshot save in etcd container $etcd_container "
125+ # Note: etcd image in Kubernetes 1.33+ is distroless (no shell), so we must
126+ # exec etcdctl directly without using "sh -c".
127+ # etcd 3.4+ defaults to API v3, so ETCDCTL_API=3 is no longer required.
128+ crictl exec -i " $etcd_container " \
129+ etcdctl \
130+ --endpoints=https://127.0.0.1:2379 \
131+ --cert=/etc/kubernetes/pki/etcd/salt-master-etcd-client.crt \
132+ --key=/etc/kubernetes/pki/etcd/salt-master-etcd-client.key \
133+ --cacert=/etc/kubernetes/pki/etcd/ca.crt \
134+ snapshot save " $etcd_snapshot "
133135
134136 local -r rootfs_v1=" /run/containerd/io.containerd.runtime.v1.linux/k8s.io/${etcd_container} /rootfs"
135137 local -r rootfs_v2=" /run/containerd/io.containerd.runtime.v2.task/k8s.io/${etcd_container} /rootfs"
@@ -175,8 +177,8 @@ replicate_archives() {
175177 salt_master_exec=(crictl exec -i " $( get_salt_container) " )
176178
177179 " ${salt_master_exec[@]} " salt-run --state-output=mixed state.orchestrate \
178- metalk8s.orchestrate.backup.replication \
179- saltenv=metalk8s-@@VERSION
180+ metalk8s.orchestrate.backup.replication \
181+ saltenv=metalk8s-@@VERSION
180182}
181183
182184run " Backing up MetalK8s configurations" backup_metalk8s_conf
0 commit comments