gitextract__utsxwcs/ ├── .commitlintrc.yml ├── .dockerignore ├── .github/ │ └── workflows/ │ ├── build.yml │ ├── commitlint.yml │ ├── e2e.yml │ └── golangci-lint.yml ├── .gitignore ├── .golangci.yml ├── CHANGELOG/ │ └── CHANGELOG.md ├── LICENSE ├── Makefile ├── README.md ├── README_CN.md ├── build/ │ ├── docker/ │ │ ├── kstone-api/ │ │ │ └── Dockerfile │ │ ├── kstone-controller/ │ │ │ └── Dockerfile │ │ └── tools/ │ │ └── code-generator/ │ │ ├── Dockerfile │ │ ├── Makefile │ │ ├── boilerplate.go.txt │ │ ├── code.sh │ │ └── openapi.sh │ ├── lib/ │ │ ├── common.mk │ │ ├── create-manifest.sh │ │ ├── docker-buildx.mk │ │ ├── gen.mk │ │ ├── golang.mk │ │ └── image.mk │ └── script/ │ └── openapi.sh ├── charts/ │ ├── .gitignore │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── README_CN.md │ ├── charts/ │ │ ├── backup-operator/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ └── deployment.yaml │ │ │ └── values.yaml │ │ ├── dashboard/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── deployment.yaml │ │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ ├── dashboard-api/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── configmap.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── secret.yaml │ │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ ├── etcd-controller/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ └── deployment.yaml │ │ │ └── values.yaml │ │ ├── etcd-operator/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── configmap.yaml │ │ │ │ ├── crd.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── webhook.yaml │ │ │ └── values.yaml │ │ ├── grafana/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── dashboards/ │ │ │ │ └── 0.json │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── configmap.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── secret.yaml │ │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ ├── inspection-controller/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── deployment.yaml │ │ │ │ ├── service.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ └── values.yaml │ │ ├── kube-prometheus-stack/ │ │ │ ├── .helmignore │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── ci/ │ │ │ │ ├── 01-provision-crds-values.yaml │ │ │ │ └── 02-test-without-crds-values.yaml │ │ │ ├── crds/ │ │ │ │ ├── crd-alertmanagerconfigs.yaml │ │ │ │ ├── crd-alertmanagers.yaml │ │ │ │ ├── crd-podmonitors.yaml │ │ │ │ ├── crd-probes.yaml │ │ │ │ ├── crd-prometheuses.yaml │ │ │ │ ├── crd-prometheusrules.yaml │ │ │ │ ├── crd-servicemonitors.yaml │ │ │ │ └── crd-thanosrulers.yaml │ │ │ ├── hack/ │ │ │ │ ├── README.md │ │ │ │ ├── minikube/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── cmd.sh │ │ │ │ │ └── values.yaml │ │ │ │ ├── requirements.txt │ │ │ │ ├── sync_grafana_dashboards.py │ │ │ │ ├── sync_prometheus_rules.py │ │ │ │ └── update_crds.sh │ │ │ ├── templates/ │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── alertmanager/ │ │ │ │ │ ├── alertmanager.yaml │ │ │ │ │ ├── ingress.yaml │ │ │ │ │ ├── ingressperreplica.yaml │ │ │ │ │ ├── podDisruptionBudget.yaml │ │ │ │ │ ├── psp-role.yaml │ │ │ │ │ ├── psp-rolebinding.yaml │ │ │ │ │ ├── psp.yaml │ │ │ │ │ ├── secret.yaml │ │ │ │ │ ├── service.yaml │ │ │ │ │ ├── serviceaccount.yaml │ │ │ │ │ ├── servicemonitor.yaml │ │ │ │ │ └── serviceperreplica.yaml │ │ │ │ ├── exporters/ │ │ │ │ │ ├── core-dns/ │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-api-server/ │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-controller-manager/ │ │ │ │ │ │ ├── endpoints.yaml │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-dns/ │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-etcd/ │ │ │ │ │ │ ├── endpoints.yaml │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-proxy/ │ │ │ │ │ │ ├── endpoints.yaml │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-scheduler/ │ │ │ │ │ │ ├── endpoints.yaml │ │ │ │ │ │ ├── service.yaml │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ ├── kube-state-metrics/ │ │ │ │ │ │ └── serviceMonitor.yaml │ │ │ │ │ ├── kubelet/ │ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ │ └── node-exporter/ │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ ├── grafana/ │ │ │ │ │ ├── configmap-dashboards.yaml │ │ │ │ │ ├── configmaps-datasources.yaml │ │ │ │ │ ├── dashboards-1.14/ │ │ │ │ │ │ ├── alertmanager-overview.yaml │ │ │ │ │ │ ├── apiserver.yaml │ │ │ │ │ │ ├── cluster-total.yaml │ │ │ │ │ │ ├── controller-manager.yaml │ │ │ │ │ │ ├── etcd.yaml │ │ │ │ │ │ ├── k8s-coredns.yaml │ │ │ │ │ │ ├── k8s-resources-cluster.yaml │ │ │ │ │ │ ├── k8s-resources-namespace.yaml │ │ │ │ │ │ ├── k8s-resources-node.yaml │ │ │ │ │ │ ├── k8s-resources-pod.yaml │ │ │ │ │ │ ├── k8s-resources-workload.yaml │ │ │ │ │ │ ├── k8s-resources-workloads-namespace.yaml │ │ │ │ │ │ ├── kubelet.yaml │ │ │ │ │ │ ├── namespace-by-pod.yaml │ │ │ │ │ │ ├── namespace-by-workload.yaml │ │ │ │ │ │ ├── node-cluster-rsrc-use.yaml │ │ │ │ │ │ ├── node-rsrc-use.yaml │ │ │ │ │ │ ├── nodes.yaml │ │ │ │ │ │ ├── persistentvolumesusage.yaml │ │ │ │ │ │ ├── pod-total.yaml │ │ │ │ │ │ ├── prometheus-remote-write.yaml │ │ │ │ │ │ ├── prometheus.yaml │ │ │ │ │ │ ├── proxy.yaml │ │ │ │ │ │ ├── scheduler.yaml │ │ │ │ │ │ ├── statefulset.yaml │ │ │ │ │ │ └── workload-total.yaml │ │ │ │ │ └── servicemonitor.yaml │ │ │ │ ├── prometheus/ │ │ │ │ │ ├── _rules.tpl │ │ │ │ │ ├── additionalAlertRelabelConfigs.yaml │ │ │ │ │ ├── additionalAlertmanagerConfigs.yaml │ │ │ │ │ ├── additionalPrometheusRules.yaml │ │ │ │ │ ├── additionalScrapeConfigs.yaml │ │ │ │ │ ├── clusterrole.yaml │ │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ │ ├── ingress.yaml │ │ │ │ │ ├── ingressThanosSidecar.yaml │ │ │ │ │ ├── ingressperreplica.yaml │ │ │ │ │ ├── podDisruptionBudget.yaml │ │ │ │ │ ├── podmonitors.yaml │ │ │ │ │ ├── prometheus.yaml │ │ │ │ │ ├── psp-clusterrole.yaml │ │ │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ │ │ ├── psp.yaml │ │ │ │ │ ├── rules-1.14/ │ │ │ │ │ │ ├── alertmanager.rules.yaml │ │ │ │ │ │ ├── etcd.yaml │ │ │ │ │ │ ├── general.rules.yaml │ │ │ │ │ │ ├── k8s.rules.yaml │ │ │ │ │ │ ├── kube-apiserver-availability.rules.yaml │ │ │ │ │ │ ├── kube-apiserver-burnrate.rules.yaml │ │ │ │ │ │ ├── kube-apiserver-histogram.rules.yaml │ │ │ │ │ │ ├── kube-apiserver-slos.yaml │ │ │ │ │ │ ├── kube-apiserver.rules.yaml │ │ │ │ │ │ ├── kube-prometheus-general.rules.yaml │ │ │ │ │ │ ├── kube-prometheus-node-recording.rules.yaml │ │ │ │ │ │ ├── kube-scheduler.rules.yaml │ │ │ │ │ │ ├── kube-state-metrics.yaml │ │ │ │ │ │ ├── kubelet.rules.yaml │ │ │ │ │ │ ├── kubernetes-apps.yaml │ │ │ │ │ │ ├── kubernetes-resources.yaml │ │ │ │ │ │ ├── kubernetes-storage.yaml │ │ │ │ │ │ ├── kubernetes-system-apiserver.yaml │ │ │ │ │ │ ├── kubernetes-system-controller-manager.yaml │ │ │ │ │ │ ├── kubernetes-system-kubelet.yaml │ │ │ │ │ │ ├── kubernetes-system-scheduler.yaml │ │ │ │ │ │ ├── kubernetes-system.yaml │ │ │ │ │ │ ├── node-exporter.rules.yaml │ │ │ │ │ │ ├── node-exporter.yaml │ │ │ │ │ │ ├── node-network.yaml │ │ │ │ │ │ ├── node.rules.yaml │ │ │ │ │ │ ├── prometheus-operator.yaml │ │ │ │ │ │ └── prometheus.yaml │ │ │ │ │ ├── service.yaml │ │ │ │ │ ├── serviceThanosSidecar.yaml │ │ │ │ │ ├── serviceThanosSidecarExternal.yaml │ │ │ │ │ ├── serviceaccount.yaml │ │ │ │ │ ├── servicemonitor.yaml │ │ │ │ │ ├── servicemonitors.yaml │ │ │ │ │ └── serviceperreplica.yaml │ │ │ │ └── prometheus-operator/ │ │ │ │ ├── admission-webhooks/ │ │ │ │ │ ├── job-patch/ │ │ │ │ │ │ ├── clusterrole.yaml │ │ │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ │ │ ├── job-createSecret.yaml │ │ │ │ │ │ ├── job-patchWebhook.yaml │ │ │ │ │ │ ├── psp.yaml │ │ │ │ │ │ ├── role.yaml │ │ │ │ │ │ ├── rolebinding.yaml │ │ │ │ │ │ └── serviceaccount.yaml │ │ │ │ │ ├── mutatingWebhookConfiguration.yaml │ │ │ │ │ └── validatingWebhookConfiguration.yaml │ │ │ │ ├── certmanager.yaml │ │ │ │ ├── clusterrole.yaml │ │ │ │ ├── clusterrolebinding.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── psp-clusterrole.yaml │ │ │ │ ├── psp-clusterrolebinding.yaml │ │ │ │ ├── psp.yaml │ │ │ │ ├── service.yaml │ │ │ │ ├── serviceaccount.yaml │ │ │ │ └── servicemonitor.yaml │ │ │ └── values.yaml │ │ └── tapp/ │ │ ├── .helmignore │ │ ├── Chart.yaml │ │ ├── templates/ │ │ │ ├── _helpers.tpl │ │ │ ├── configmap.yaml │ │ │ ├── deployment.yaml │ │ │ ├── hpa.yaml │ │ │ ├── service.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── tests/ │ │ │ └── test-connection.yaml │ │ └── values.yaml │ ├── templates/ │ │ ├── _helpers.tpl │ │ ├── crd.yaml │ │ ├── ingress.yaml │ │ └── serviceaccount.yaml │ ├── values.test.yaml │ └── values.yaml ├── cmd/ │ ├── kstone-api/ │ │ ├── apiserver.go │ │ ├── app/ │ │ │ └── server.go │ │ └── config/ │ │ └── config.go │ └── kstone-controller/ │ ├── etcdcluster-controller/ │ │ └── controller.go │ ├── etcdinspection-controller/ │ │ └── controller.go │ └── main.go ├── deploy/ │ ├── crds/ │ │ ├── kstone.tkestack.io_etcdclusters.yaml │ │ └── kstone.tkestack.io_etcdinspections.yaml │ ├── etcd-backup-operator.yaml │ └── kstone-controller.yaml ├── docs/ │ ├── README.md │ ├── README_CN.md │ ├── backup/ │ │ └── cos/ │ │ ├── cos_en.md │ │ └── cos_zh.md │ ├── installation/ │ │ ├── kubeadm_en.md │ │ ├── minikube-amd64.md │ │ ├── minikube-macos.md │ │ └── tke.md │ ├── migration/ │ │ └── README.md │ └── proposal/ │ └── authentication-support/ │ ├── README.md │ └── proposal.yaml ├── go.mod ├── go.sum ├── hack/ │ ├── boilerplate.go.txt │ ├── custom-boilerplate.go.txt │ ├── migratev1.sh │ ├── tools.go │ ├── update-codegen.sh │ └── verify-codegen.sh ├── pkg/ │ ├── apis/ │ │ └── kstone/ │ │ ├── register.go │ │ ├── v1alpha1/ │ │ │ ├── doc.go │ │ │ ├── register.go │ │ │ ├── types.go │ │ │ ├── zz_generated.deepcopy.go │ │ │ └── zz_generated.defaults.go │ │ └── v1alpha2/ │ │ ├── doc.go │ │ ├── register.go │ │ ├── types.go │ │ ├── zz_generated.deepcopy.go │ │ └── zz_generated.defaults.go │ ├── authentication/ │ │ ├── authenticator/ │ │ │ ├── authenticator.go │ │ │ └── bearertoken/ │ │ │ └── bearertoken.go │ │ ├── helper.go │ │ ├── interfaces.go │ │ ├── plugins.go │ │ ├── providers/ │ │ │ └── providers.go │ │ ├── request/ │ │ │ └── request.go │ │ ├── store.go │ │ └── token/ │ │ └── jwt/ │ │ ├── generator.go │ │ └── jwt.go │ ├── backup/ │ │ ├── backup.go │ │ ├── plugins.go │ │ ├── providers/ │ │ │ ├── cos/ │ │ │ │ └── cos.go │ │ │ ├── providers.go │ │ │ └── s3/ │ │ │ ├── clientwrapper.go │ │ │ └── s3.go │ │ ├── storage.go │ │ └── util.go │ ├── clusterprovider/ │ │ ├── etcdcluster.go │ │ ├── helper.go │ │ ├── plugins.go │ │ └── providers/ │ │ ├── imported/ │ │ │ └── cluster.go │ │ ├── kstone/ │ │ │ └── kstone.go │ │ └── providers.go │ ├── controllers/ │ │ ├── etcdcluster/ │ │ │ └── etcdclusters_controller.go │ │ ├── etcdinspection/ │ │ │ └── etcdinspection_controller.go │ │ └── util/ │ │ └── util.go │ ├── etcd/ │ │ ├── client/ │ │ │ ├── cleint.go │ │ │ ├── version.go │ │ │ └── versions/ │ │ │ ├── providers.go │ │ │ ├── v2/ │ │ │ │ └── client.go │ │ │ └── v3/ │ │ │ └── client.go │ │ ├── client.go │ │ ├── encoding.go │ │ ├── health.go │ │ ├── helper.go │ │ └── stats.go │ ├── featureprovider/ │ │ ├── feature.go │ │ ├── plugins.go │ │ ├── providers/ │ │ │ ├── alarm/ │ │ │ │ └── alarm.go │ │ │ ├── backup/ │ │ │ │ └── backup.go │ │ │ ├── backupcheck/ │ │ │ │ └── backupcheck.go │ │ │ ├── consistency/ │ │ │ │ └── consistency.go │ │ │ ├── healthy/ │ │ │ │ └── healthy.go │ │ │ ├── monitor/ │ │ │ │ └── monitor.go │ │ │ ├── providers.go │ │ │ └── request/ │ │ │ └── request.go │ │ └── util/ │ │ └── util.go │ ├── generated/ │ │ ├── clientset/ │ │ │ └── versioned/ │ │ │ ├── clientset.go │ │ │ ├── doc.go │ │ │ ├── fake/ │ │ │ │ ├── clientset_generated.go │ │ │ │ ├── doc.go │ │ │ │ └── register.go │ │ │ ├── scheme/ │ │ │ │ ├── doc.go │ │ │ │ └── register.go │ │ │ └── typed/ │ │ │ └── kstone/ │ │ │ ├── v1alpha1/ │ │ │ │ ├── doc.go │ │ │ │ ├── etcdcluster.go │ │ │ │ ├── etcdinspection.go │ │ │ │ ├── fake/ │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── fake_etcdcluster.go │ │ │ │ │ ├── fake_etcdinspection.go │ │ │ │ │ └── fake_kstone_client.go │ │ │ │ ├── generated_expansion.go │ │ │ │ └── kstone_client.go │ │ │ └── v1alpha2/ │ │ │ ├── doc.go │ │ │ ├── etcdcluster.go │ │ │ ├── etcdinspection.go │ │ │ ├── fake/ │ │ │ │ ├── doc.go │ │ │ │ ├── fake_etcdcluster.go │ │ │ │ ├── fake_etcdinspection.go │ │ │ │ └── fake_kstone_client.go │ │ │ ├── generated_expansion.go │ │ │ └── kstone_client.go │ │ ├── informers/ │ │ │ └── externalversions/ │ │ │ ├── factory.go │ │ │ ├── generic.go │ │ │ ├── internalinterfaces/ │ │ │ │ └── factory_interfaces.go │ │ │ └── kstone/ │ │ │ ├── interface.go │ │ │ ├── v1alpha1/ │ │ │ │ ├── etcdcluster.go │ │ │ │ ├── etcdinspection.go │ │ │ │ └── interface.go │ │ │ └── v1alpha2/ │ │ │ ├── etcdcluster.go │ │ │ ├── etcdinspection.go │ │ │ └── interface.go │ │ └── listers/ │ │ └── kstone/ │ │ ├── v1alpha1/ │ │ │ ├── etcdcluster.go │ │ │ ├── etcdinspection.go │ │ │ └── expansion_generated.go │ │ └── v1alpha2/ │ │ ├── etcdcluster.go │ │ ├── etcdinspection.go │ │ └── expansion_generated.go │ ├── inspection/ │ │ ├── alarm.go │ │ ├── backupcheck.go │ │ ├── consistency.go │ │ ├── healthy.go │ │ ├── inspection.go │ │ ├── metrics/ │ │ │ └── metrics.go │ │ └── request.go │ ├── k8s/ │ │ └── client.go │ ├── middlewares/ │ │ ├── auth.go │ │ └── cors.go │ ├── monitor/ │ │ └── prometheus.go │ ├── router/ │ │ └── router.go │ └── signals/ │ ├── signal.go │ ├── signal_posix.go │ └── signal_windows.go ├── test/ │ ├── e2e/ │ │ ├── e2e_test.go │ │ └── etcdcluster_test.go │ ├── fixtures/ │ │ ├── fixtures.go │ │ └── manifests/ │ │ ├── etcd_service.yaml │ │ ├── etcd_statefulset.yaml │ │ └── etcdcluster_imported.yaml │ ├── scripts/ │ │ ├── kstone.sh │ │ ├── minikube.sh │ │ └── pre.sh │ └── testfiles/ │ └── testfiles.go └── third_party/ └── etcd-operator/ ├── .github/ │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── DCO ├── Dockerfile ├── Gopkg.toml ├── LICENSE ├── MAINTAINERS ├── Makefile ├── NOTICE ├── README.md ├── ROADMAP.md ├── cmd/ │ ├── backup-operator/ │ │ ├── doc.go │ │ └── main.go │ ├── operator/ │ │ └── main.go │ └── restore-operator/ │ ├── doc.go │ ├── main.go │ └── service.go ├── code-of-conduct.md ├── codecov.yaml ├── doc/ │ ├── alpha-features.md │ ├── best_practices.md │ ├── design/ │ │ ├── abs_backup.md │ │ ├── backup_operator.md │ │ ├── cluster_creation.md │ │ ├── cluster_lifecycle.md │ │ ├── cluster_restore.md │ │ ├── cluster_status.md │ │ ├── cluster_tls.md │ │ ├── cluster_upgrade.md │ │ ├── disaster_recovery.md │ │ ├── dynamic_tls.md │ │ ├── gcs_backup.md │ │ ├── operator_recovery.md │ │ ├── oss_backup.md │ │ ├── persistent_volumes_etcd_data.md │ │ ├── reconciliation.md │ │ ├── resource_ownership_and_GC.md │ │ ├── restore_operator.md │ │ └── s3_backup.md │ ├── dev/ │ │ ├── debug_e2e_flake.md │ │ ├── developer_guide.md │ │ └── release.md │ └── user/ │ ├── abs_backup.md │ ├── backup_cronjob/ │ │ ├── README.md │ │ ├── configmap.yaml │ │ └── cronjob.yaml │ ├── client_service.md │ ├── cluster_tls.md │ ├── clusterwide.md │ ├── conditions_and_events.md │ ├── gcs_backup.md │ ├── install_guide.md │ ├── oss_backup.md │ ├── rbac.md │ ├── resource_labels.md │ ├── spec_examples.md │ ├── upgrade/ │ │ ├── migrate_cr_070.md │ │ └── upgrade_guide.md │ └── walkthrough/ │ ├── backup-operator.md │ └── restore-operator.md ├── example/ │ ├── deployment.yaml │ ├── deployment_psp.yaml │ ├── etcd-backup-operator/ │ │ ├── backu_cr_qcloud.yaml │ │ ├── backup.sh │ │ ├── backup_cr.yaml │ │ ├── deployment.yaml │ │ ├── deployment_qcloud.yaml │ │ ├── periodic_backup_cr.yaml │ │ └── secrets.yaml │ ├── etcd-restore-operator/ │ │ ├── deployment.yaml │ │ ├── deployment_qcloud.yaml │ │ ├── restore_cr.yaml │ │ └── restore_cr_qcloud.yaml │ ├── example-etcd-cluster-nodeport-service.json │ ├── example-etcd-cluster.yaml │ ├── rbac/ │ │ ├── cluster-role-binding-template.yaml │ │ ├── cluster-role-template.yaml │ │ ├── create_role.sh │ │ ├── role-binding-template.yaml │ │ └── role-template.yaml │ └── tls/ │ ├── certs/ │ │ ├── ca-config.json │ │ ├── ca-csr.json │ │ ├── etcd-client-ca.crt │ │ ├── etcd-client.crt │ │ ├── etcd-client.json │ │ ├── etcd-client.key │ │ ├── gen-cert.sh │ │ ├── peer-ca.crt │ │ ├── peer.crt │ │ ├── peer.json │ │ ├── peer.key │ │ ├── server-ca.crt │ │ ├── server.crt │ │ ├── server.json │ │ └── server.key │ └── example-tls-cluster.yaml ├── go.mod ├── go.sum ├── hack/ │ ├── build/ │ │ ├── Dockerfile │ │ ├── backup-operator/ │ │ │ └── build │ │ ├── build │ │ ├── docker_push │ │ ├── e2e/ │ │ │ ├── builder/ │ │ │ │ ├── Dockerfile │ │ │ │ └── build │ │ │ └── docker_push │ │ ├── logcollector/ │ │ │ └── Dockerfile │ │ ├── operator/ │ │ │ └── build │ │ └── restore-operator/ │ │ └── build │ ├── ci/ │ │ ├── get_dep │ │ ├── get_kube.sh │ │ ├── rbac_utils.sh │ │ ├── run_e2e │ │ └── run_unit │ ├── fmt_pass │ ├── k8s/ │ │ └── codegen/ │ │ ├── README.md │ │ ├── boilerplate.go.txt │ │ ├── update-generated.sh │ │ └── verify-generated.sh │ ├── lib/ │ │ ├── build.sh │ │ └── test_lib.sh │ ├── release/ │ │ └── bump_version.sh │ ├── test │ ├── unit_test │ └── update_vendor.sh ├── pkg/ │ ├── apis/ │ │ └── etcd/ │ │ └── v1beta2/ │ │ ├── backup_types.go │ │ ├── cluster.go │ │ ├── cluster_tls.go │ │ ├── doc.go │ │ ├── register.go │ │ ├── restore_types.go │ │ ├── status.go │ │ └── zz_generated.deepcopy.go │ ├── backup/ │ │ ├── backup_manager.go │ │ ├── backupapi/ │ │ │ └── http.go │ │ ├── reader/ │ │ │ ├── abs_reader.go │ │ │ ├── cos_reader.go │ │ │ ├── gcs_reader.go │ │ │ ├── hostPath_reader.go │ │ │ ├── oss_reader.go │ │ │ ├── reader.go │ │ │ └── s3_reader.go │ │ ├── util/ │ │ │ ├── constants.go │ │ │ └── util.go │ │ └── writer/ │ │ ├── abs_writer.go │ │ ├── cos_writer.go │ │ ├── gcs_writer.go │ │ ├── hostPath_writer.go │ │ ├── oss_writer.go │ │ ├── s3_writer.go │ │ └── writer.go │ ├── chaos/ │ │ └── chaos.go │ ├── client/ │ │ └── client.go │ ├── cluster/ │ │ ├── cluster.go │ │ ├── cluster_test.go │ │ ├── error.go │ │ ├── error_test.go │ │ ├── member.go │ │ ├── metrics.go │ │ ├── reconcile.go │ │ └── upgrade.go │ ├── controller/ │ │ ├── backup-operator/ │ │ │ ├── abs_backup.go │ │ │ ├── controller.go │ │ │ ├── cos_backup.go │ │ │ ├── gcs_backup.go │ │ │ ├── hostPath_backup.go │ │ │ ├── operator.go │ │ │ ├── oss_backup.go │ │ │ ├── s3_backup.go │ │ │ ├── sync.go │ │ │ ├── sync_test.go │ │ │ └── util.go │ │ ├── controller.go │ │ ├── controller_test.go │ │ ├── informer.go │ │ ├── metrics.go │ │ ├── restore-operator/ │ │ │ ├── controller.go │ │ │ ├── http.go │ │ │ ├── operator.go │ │ │ └── sync.go │ │ └── util.go │ ├── generated/ │ │ ├── clientset/ │ │ │ └── versioned/ │ │ │ ├── clientset.go │ │ │ ├── doc.go │ │ │ ├── fake/ │ │ │ │ ├── clientset_generated.go │ │ │ │ ├── doc.go │ │ │ │ └── register.go │ │ │ ├── scheme/ │ │ │ │ ├── doc.go │ │ │ │ └── register.go │ │ │ └── typed/ │ │ │ └── etcd/ │ │ │ └── v1beta2/ │ │ │ ├── doc.go │ │ │ ├── etcd_client.go │ │ │ ├── etcdbackup.go │ │ │ ├── etcdcluster.go │ │ │ ├── etcdrestore.go │ │ │ ├── fake/ │ │ │ │ ├── doc.go │ │ │ │ ├── fake_etcd_client.go │ │ │ │ ├── fake_etcdbackup.go │ │ │ │ ├── fake_etcdcluster.go │ │ │ │ └── fake_etcdrestore.go │ │ │ └── generated_expansion.go │ │ ├── informers/ │ │ │ └── externalversions/ │ │ │ ├── etcd/ │ │ │ │ ├── interface.go │ │ │ │ └── v1beta2/ │ │ │ │ ├── etcdbackup.go │ │ │ │ ├── etcdcluster.go │ │ │ │ ├── etcdrestore.go │ │ │ │ └── interface.go │ │ │ ├── factory.go │ │ │ ├── generic.go │ │ │ └── internalinterfaces/ │ │ │ └── factory_interfaces.go │ │ └── listers/ │ │ └── etcd/ │ │ └── v1beta2/ │ │ ├── etcdbackup.go │ │ ├── etcdcluster.go │ │ ├── etcdrestore.go │ │ └── expansion_generated.go │ └── util/ │ ├── alibabacloudutil/ │ │ └── ossfactory/ │ │ └── client.go │ ├── awsutil/ │ │ └── s3factory/ │ │ ├── client.go │ │ └── client_test.go │ ├── azureutil/ │ │ └── absfactory/ │ │ └── client.go │ ├── constants/ │ │ └── constants.go │ ├── etcdutil/ │ │ ├── etcdutil.go │ │ ├── etcdutil_test.go │ │ ├── member.go │ │ ├── member_test.go │ │ └── tls.go │ ├── gcputil/ │ │ └── gcsfactory/ │ │ └── client.go │ ├── k8sutil/ │ │ ├── crd.go │ │ ├── events_util.go │ │ ├── k8sutil.go │ │ ├── k8sutils_test.go │ │ ├── node_util.go │ │ ├── pod_util.go │ │ └── tls.go │ ├── probe/ │ │ └── readyz.go │ ├── retryutil/ │ │ └── retry_util.go │ ├── tencentcloudutil/ │ │ ├── cosfactory/ │ │ │ └── client.go │ │ └── metadata/ │ │ └── credential/ │ │ └── secret.go │ └── util.go ├── test/ │ ├── container/ │ │ ├── Dockerfile │ │ ├── docker_push │ │ └── run │ ├── e2e/ │ │ ├── README.md │ │ ├── basic_test.go │ │ ├── cluster_status_test.go │ │ ├── e2eslow/ │ │ │ ├── backup_restore_test.go │ │ │ ├── disruptive_test.go │ │ │ └── main_test.go │ │ ├── e2eutil/ │ │ │ ├── crd_util.go │ │ │ ├── etcd_util.go │ │ │ ├── spec_util.go │ │ │ ├── tls.go │ │ │ ├── util.go │ │ │ └── wait_util.go │ │ ├── framework/ │ │ │ ├── framework.go │ │ │ └── main_entry.go │ │ ├── main_test.go │ │ ├── pv_test.go │ │ ├── recovery_test.go │ │ ├── resize_test.go │ │ ├── tls_test.go │ │ ├── upgradetest/ │ │ │ ├── README.md │ │ │ ├── framework/ │ │ │ │ └── framework.go │ │ │ ├── main_test.go │ │ │ └── upgrade_test.go │ │ └── util.go │ ├── logcollector/ │ │ └── main.go │ └── pod/ │ ├── Dockerfile │ ├── README.md │ ├── docker_push │ ├── run-test-pod │ ├── simple/ │ │ ├── Dockerfile │ │ ├── run-e2e │ │ └── simple-pod-templ.yaml │ └── test-pod-templ.yaml └── version/ └── version.go