Passing endpoint, access and secret key to logical-backup container (#628)
* Added possibility to add custom annotations to LoadBalancer service. * Added parameters for custom endpoint, access and secret key for logical backup. * Modified dump.sh so it knows how to handle new features. Configurable S3 SSE
This commit is contained in:
		
							parent
							
								
									2ce602fcd7
								
							
						
					
					
						commit
						5f87384d7f
					
				|  | @ -184,12 +184,20 @@ configAwsOrGcp: | ||||||
| 
 | 
 | ||||||
| # configure K8s cron job managed by the operator | # configure K8s cron job managed by the operator | ||||||
| configLogicalBackup: | configLogicalBackup: | ||||||
|   # backup schedule in the cron format |  | ||||||
|   logical_backup_schedule: "30 00 * * *" |  | ||||||
|   # image for pods of the logical backup job (example runs pg_dumpall) |   # image for pods of the logical backup job (example runs pg_dumpall) | ||||||
|   logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" |   logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" | ||||||
|  |   # S3 Access Key ID   | ||||||
|  |   logical_backup_s3_access_key_id: "" | ||||||
|   # S3 bucket to store backup results |   # S3 bucket to store backup results | ||||||
|   logical_backup_s3_bucket: "my-bucket-url" |   logical_backup_s3_bucket: "my-bucket-url" | ||||||
|  |   # S3 endpoint url when not using AWS | ||||||
|  |   logical_backup_s3_endpoint: "" | ||||||
|  |   # S3 Secret Access Key | ||||||
|  |   logical_backup_s3_secret_access_key: "" | ||||||
|  |   # S3 server side encription  | ||||||
|  |   logical_backup_s3_sse: "AES256" | ||||||
|  |   # backup schedule in the cron format | ||||||
|  |   logical_backup_schedule: "30 00 * * *" | ||||||
| 
 | 
 | ||||||
| # automate creation of human users with teams API service | # automate creation of human users with teams API service | ||||||
| configTeamsApi: | configTeamsApi: | ||||||
|  |  | ||||||
|  | @ -178,12 +178,20 @@ configAwsOrGcp: | ||||||
| 
 | 
 | ||||||
| # configure K8s cron job managed by the operator | # configure K8s cron job managed by the operator | ||||||
| configLogicalBackup: | configLogicalBackup: | ||||||
|   # backup schedule in the cron format |  | ||||||
|   logical_backup_schedule: "30 00 * * *" |  | ||||||
|   # image for pods of the logical backup job (example runs pg_dumpall) |   # image for pods of the logical backup job (example runs pg_dumpall) | ||||||
|   logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" |   logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" | ||||||
|  |   # S3 Access Key ID   | ||||||
|  |   logical_backup_s3_access_key_id: "" | ||||||
|   # S3 bucket to store backup results |   # S3 bucket to store backup results | ||||||
|   logical_backup_s3_bucket: "my-bucket-url" |   logical_backup_s3_bucket: "my-bucket-url" | ||||||
|  |   # S3 endpoint url when not using AWS | ||||||
|  |   logical_backup_s3_endpoint: "" | ||||||
|  |   # S3 Secret Access Key | ||||||
|  |   logical_backup_s3_secret_access_key: "" | ||||||
|  |   # S3 server side encription  | ||||||
|  |   logical_backup_s3_sse: "AES256" | ||||||
|  |   # backup schedule in the cron format | ||||||
|  |   logical_backup_schedule: "30 00 * * *" | ||||||
| 
 | 
 | ||||||
| # automate creation of human users with teams API service | # automate creation of human users with teams API service | ||||||
| configTeamsApi: | configTeamsApi: | ||||||
|  |  | ||||||
|  | @ -38,11 +38,13 @@ function aws_upload { | ||||||
|     # NB: $LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX already contains the leading "/" when set by the Postgres Operator |     # NB: $LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX already contains the leading "/" when set by the Postgres Operator | ||||||
|     PATH_TO_BACKUP=s3://$LOGICAL_BACKUP_S3_BUCKET"/spilo/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$(date +%s).sql.gz |     PATH_TO_BACKUP=s3://$LOGICAL_BACKUP_S3_BUCKET"/spilo/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/"$(date +%s).sql.gz | ||||||
| 
 | 
 | ||||||
|     if [ -z "$EXPECTED_SIZE" ]; then |     args=() | ||||||
|         aws s3 cp - "$PATH_TO_BACKUP" --debug --sse="AES256" | 
 | ||||||
|     else |     [[ ! -z "$EXPECTED_SIZE" ]] && args+=("--expected-size=$EXPECTED_SIZE") | ||||||
|         aws s3 cp - "$PATH_TO_BACKUP" --debug --expected-size "$EXPECTED_SIZE" --sse="AES256" |     [[ ! -z "$LOGICAL_BACKUP_S3_ENDPOINT" ]] && args+=("--endpoint-url=\"$LOGICAL_BACKUP_S3_ENDPOINT\"") | ||||||
|     fi; |     [[ ! "$LOGICAL_BACKUP_S3_SSE" == "" ]] && args+=("--sse=\"$LOGICAL_BACKUP_S3_SSE\"") | ||||||
|  | 
 | ||||||
|  |     aws s3 cp - "$PATH_TO_BACKUP" "${args[@]//\'/}" --debug | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function get_pods { | function get_pods { | ||||||
|  |  | ||||||
|  | @ -441,6 +441,19 @@ grouped under the `logical_backup` key. | ||||||
|   S3 bucket to store backup results. The bucket has to be present and |   S3 bucket to store backup results. The bucket has to be present and | ||||||
|   accessible by Postgres pods. Default: empty. |   accessible by Postgres pods. Default: empty. | ||||||
| 
 | 
 | ||||||
|  | * **logical_backup_s3_endpoint** | ||||||
|  |   When using non-AWS S3 storage, endpoint can be set as a ENV variable. | ||||||
|  | 
 | ||||||
|  | * **logical_backup_s3_sse** | ||||||
|  |   Specify server side encription that S3 storage is using. If empty string | ||||||
|  |   is specified, no argument will be passed to `aws s3` command. Default: "AES256". | ||||||
|  | 
 | ||||||
|  | * **logical_backup_s3_access_key_id** | ||||||
|  |   When set, value will be in AWS_ACCESS_KEY_ID env variable. The Default is empty. | ||||||
|  | 
 | ||||||
|  | * **logical_backup_s3_secret_access_key** | ||||||
|  |   When set, value will be in AWS_SECRET_ACCESS_KEY env variable. The Default is empty. | ||||||
|  | 
 | ||||||
| ## Debugging the operator | ## Debugging the operator | ||||||
| 
 | 
 | ||||||
| Options to aid debugging of the operator itself. Grouped under the `debug` key. | Options to aid debugging of the operator itself. Grouped under the `debug` key. | ||||||
|  |  | ||||||
|  | @ -35,7 +35,11 @@ data: | ||||||
|   # kube_iam_role: "" |   # kube_iam_role: "" | ||||||
|   # log_s3_bucket: "" |   # log_s3_bucket: "" | ||||||
|   # logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" |   # logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" | ||||||
|  |   # logical_backup_s3_access_key_id: "" | ||||||
|   # logical_backup_s3_bucket: "my-bucket-url" |   # logical_backup_s3_bucket: "my-bucket-url" | ||||||
|  |   # logical_backup_s3_endpoint: "" | ||||||
|  |   # logical_backup_s3_secret_access_key: "" | ||||||
|  |   # logical_backup_s3_sse: "AES256" | ||||||
|   # logical_backup_schedule: "30 00 * * *" |   # logical_backup_schedule: "30 00 * * *" | ||||||
|   master_dns_name_format: "{cluster}.{team}.staging.{hostedzone}" |   master_dns_name_format: "{cluster}.{team}.staging.{hostedzone}" | ||||||
|   # master_pod_move_timeout: 10m |   # master_pod_move_timeout: 10m | ||||||
|  |  | ||||||
|  | @ -74,9 +74,14 @@ configuration: | ||||||
|     # log_s3_bucket: "" |     # log_s3_bucket: "" | ||||||
|     # wal_s3_bucket: "" |     # wal_s3_bucket: "" | ||||||
|   logical_backup: |   logical_backup: | ||||||
|     logical_backup_schedule: "30 00 * * *" |     log_s3_bucket: "" | ||||||
|     logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" |     logical_backup_docker_image: "registry.opensource.zalan.do/acid/logical-backup" | ||||||
|  |     logical_backup_s3_access_key_id: "" | ||||||
|     logical_backup_s3_bucket: "my-bucket-url" |     logical_backup_s3_bucket: "my-bucket-url" | ||||||
|  |     logical_backup_s3_endpoint: "" | ||||||
|  |     logical_backup_s3_secret_access_key: "" | ||||||
|  |     logical_backup_s3_sse: "AES256" | ||||||
|  |     logical_backup_schedule: "30 00 * * *" | ||||||
|   debug: |   debug: | ||||||
|     debug_logging: true |     debug_logging: true | ||||||
|     enable_database_access: true |     enable_database_access: true | ||||||
|  |  | ||||||
|  | @ -184,8 +184,13 @@ type OperatorConfigurationUsers struct { | ||||||
| //Duration shortens this frequently used name
 | //Duration shortens this frequently used name
 | ||||||
| type Duration time.Duration | type Duration time.Duration | ||||||
| 
 | 
 | ||||||
|  | // OperatorLogicalBackupConfiguration defines configration for logical backup
 | ||||||
| type OperatorLogicalBackupConfiguration struct { | type OperatorLogicalBackupConfiguration struct { | ||||||
| 	Schedule    string `json:"logical_backup_schedule,omitempty"` | 	Schedule          string `json:"logical_backup_schedule,omitempty"` | ||||||
| 	DockerImage string `json:"logical_backup_docker_image,omitempty"` | 	DockerImage       string `json:"logical_backup_docker_image,omitempty"` | ||||||
| 	S3Bucket    string `json:"logical_backup_s3_bucket,omitempty"` | 	S3Bucket          string `json:"logical_backup_s3_bucket,omitempty"` | ||||||
|  | 	S3Endpoint        string `json:"logical_backup_s3_endpoint,omitempty"` | ||||||
|  | 	S3AccessKeyID     string `json:"logical_backup_s3_access_key_id,omitempty"` | ||||||
|  | 	S3SecretAccessKey string `json:"logical_backup_s3_secret_access_key,omitempty"` | ||||||
|  | 	S3SSE             string `json:"logical_backup_s3_sse,omitempty"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1575,6 +1575,14 @@ func (c *Cluster) generateLogicalBackupPodEnvVars() []v1.EnvVar { | ||||||
| 			Name:  "LOGICAL_BACKUP_S3_BUCKET", | 			Name:  "LOGICAL_BACKUP_S3_BUCKET", | ||||||
| 			Value: c.OpConfig.LogicalBackup.LogicalBackupS3Bucket, | 			Value: c.OpConfig.LogicalBackup.LogicalBackupS3Bucket, | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Name:  "LOGICAL_BACKUP_S3_ENDPOINT", | ||||||
|  | 			Value: c.OpConfig.LogicalBackup.LogicalBackupS3Endpoint, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Name:  "LOGICAL_BACKUP_S3_SSE", | ||||||
|  | 			Value: c.OpConfig.LogicalBackup.LogicalBackupS3SSE, | ||||||
|  | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			Name:  "LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX", | 			Name:  "LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX", | ||||||
| 			Value: getBucketScopeSuffix(string(c.Postgresql.GetUID())), | 			Value: getBucketScopeSuffix(string(c.Postgresql.GetUID())), | ||||||
|  | @ -1613,8 +1621,15 @@ func (c *Cluster) generateLogicalBackupPodEnvVars() []v1.EnvVar { | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	c.logger.Debugf("Generated logical backup env vars %v", envVars) | 	if c.OpConfig.LogicalBackup.LogicalBackupS3AccessKeyID != "" { | ||||||
|  | 		envVars = append(envVars, v1.EnvVar{Name: "AWS_ACCESS_KEY_ID", Value: c.OpConfig.LogicalBackup.LogicalBackupS3AccessKeyID}) | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if c.OpConfig.LogicalBackup.LogicalBackupS3SecretAccessKey != "" { | ||||||
|  | 		envVars = append(envVars, v1.EnvVar{Name: "AWS_SECRET_ACCESS_KEY", Value: c.OpConfig.LogicalBackup.LogicalBackupS3SecretAccessKey}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	c.logger.Debugf("Generated logical backup env vars %v", envVars) | ||||||
| 	return envVars | 	return envVars | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -101,6 +101,10 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result.LogicalBackupSchedule = fromCRD.LogicalBackup.Schedule | 	result.LogicalBackupSchedule = fromCRD.LogicalBackup.Schedule | ||||||
| 	result.LogicalBackupDockerImage = fromCRD.LogicalBackup.DockerImage | 	result.LogicalBackupDockerImage = fromCRD.LogicalBackup.DockerImage | ||||||
| 	result.LogicalBackupS3Bucket = fromCRD.LogicalBackup.S3Bucket | 	result.LogicalBackupS3Bucket = fromCRD.LogicalBackup.S3Bucket | ||||||
|  | 	result.LogicalBackupS3Endpoint = fromCRD.LogicalBackup.S3Endpoint | ||||||
|  | 	result.LogicalBackupS3AccessKeyID = fromCRD.LogicalBackup.S3AccessKeyID | ||||||
|  | 	result.LogicalBackupS3SecretAccessKey = fromCRD.LogicalBackup.S3SecretAccessKey | ||||||
|  | 	result.LogicalBackupS3SSE = fromCRD.LogicalBackup.S3SSE | ||||||
| 
 | 
 | ||||||
| 	// debug config
 | 	// debug config
 | ||||||
| 	result.DebugLogging = fromCRD.OperatorDebug.DebugLogging | 	result.DebugLogging = fromCRD.OperatorDebug.DebugLogging | ||||||
|  |  | ||||||
|  | @ -68,11 +68,15 @@ type Scalyr struct { | ||||||
| 	ScalyrMemoryLimit   string `name:"scalyr_memory_limit" default:"1Gi"` | 	ScalyrMemoryLimit   string `name:"scalyr_memory_limit" default:"1Gi"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // LogicalBackup
 | // LogicalBackup defines configration for logical backup
 | ||||||
| type LogicalBackup struct { | type LogicalBackup struct { | ||||||
| 	LogicalBackupSchedule    string `name:"logical_backup_schedule" default:"30 00 * * *"` | 	LogicalBackupSchedule          string `name:"logical_backup_schedule" default:"30 00 * * *"` | ||||||
| 	LogicalBackupDockerImage string `name:"logical_backup_docker_image" default:"registry.opensource.zalan.do/acid/logical-backup"` | 	LogicalBackupDockerImage       string `name:"logical_backup_docker_image" default:"registry.opensource.zalan.do/acid/logical-backup"` | ||||||
| 	LogicalBackupS3Bucket    string `name:"logical_backup_s3_bucket" default:""` | 	LogicalBackupS3Bucket          string `name:"logical_backup_s3_bucket" default:""` | ||||||
|  | 	LogicalBackupS3Endpoint        string `name:"logical_backup_s3_endpoint" default:""` | ||||||
|  | 	LogicalBackupS3AccessKeyID     string `name:"logical_backup_s3_access_key_id" default:""` | ||||||
|  | 	LogicalBackupS3SecretAccessKey string `name:"logical_backup_s3_secret_access_key" default:""` | ||||||
|  | 	LogicalBackupS3SSE             string `name:"logical_backup_s3_sse" default:"AES256"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Config describes operator config
 | // Config describes operator config
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue