default-env.sh#
# exports for EKS
export EDB_PLATFORM_VERSION="v1.2.0"
export CONTAINER_REGISTRY_URI="docker.enterprisedb.com/pgai-platform"
export IMAGESET_REGISTRY_URI=$CONTAINER_REGISTRY_URI
export IMAGESET_AUTHTYPE="token"
export PORTAL_DOMAIN_NAME="portal.foo.network"
export TRANSPORTER_RW_SERVICE_DOMAIN_NAME="transporter.foo.network"
export BEACON_SERVICE_DOMAIN_NAME="beacon.foo.network"
export AUTHENTICATION_EMAIL="owner@mycompany.com"
export AUTHENTICATION_USER="owner@mycompany.com"
export LOCATION_NAME="default-location"
export STORAGE_CLASS="gp2"
export TRANSPORTER_FIPS_ENABLED=false
# Set a password hash for the user or pass a password to have it hashed for you.
# If you pass a password, you will need to remove it from your history.
# You can hash a password using the following command:
# echo -n "password" | htpasswd -BinC 10 admin | cut -d: -f2
#
# export AUTHENTICATION_PASSWORD="password"
# If setting AUTHENTICATION_PASSWORD_HASH, ensure it is single quoted to prevent variable expansion (e.g. $2y$10$...).
export AUTHENTICATION_PASSWORD_HASH=$2y$10$vKOAXfLHbeV1OQxMpxlLdOIwnX.JAN.ZrD9ZU//ocrNQwhQIMtXhy
eks-fix-auto.sh#
# !/bin/bash
# Reprovision nodepools for HM workloads
cat <<EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: edbpgai
spec:
disruption:
budgets:
- nodes: 10%
consolidateAfter: 30s
consolidationPolicy: WhenEmptyOrUnderutilized
template:
metadata:
labels:
edbaiplatform.io/control-plane: "true"
spec:
expireAfter: 336h
nodeClassRef:
group: eks.amazonaws.com
kind: NodeClass
name: default
taints:
- key: edbaiplatform.io/control-plane
value: "true"
effect: NoSchedule
requirements:
- key: karpenter.sh/capacity-type
operator: In
values:
- on-demand
- key: eks.amazonaws.com/instance-category
operator: In
values:
- c
- m
- r
- key: eks.amazonaws.com/instance-generation
operator: Gt
values:
- "4"
- key: eks.amazonaws.com/instance-cpu
operator: Gt
values:
- "4"
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: kubernetes.io/os
operator: In
values:
- linux
terminationGracePeriod: 24h0m0s
EOF
# Reprovision gp2 storage class
kubectl delete storageclass gp2
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
name: gp2
parameters:
encrypted: "true"
type: gp2
provisioner: ebs.csi.eks.amazonaws.com
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
EOF
# Create a gp3 storage class for EKS
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp3
annotations:
storageclass.kubernetes.io/is-default-class: "false"
provisioner: ebs.csi.eks.amazonaws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
encrypted: "true"
EOF
# Create a VolumeSnapshotClass for EKS
cat <<EOF | kubectl apply -f -
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: ebs-snapshotclass
annotations:
snapshot.storage.kubernetes.io/is-default-class: "true"
driver: ebs.csi.eks.amazonaws.com
deletionPolicy: Delete
EOF
eks-install-operator.sh#
registry="docker.enterprisedb.com"
username="pgai-platform"
password=""
echo "Enter the password for ${username}@${registry}"
read -s password
if [ -z "$password" ]; then
echo 1>&2 "Error: password is required" >&2
echo 1>&2
usage
exit 1
fi
kubectl create namespace edb-hcp-operator-system
helm repo add enterprisedb-edbpgai "https://downloads.enterprisedb.com/${password}/${RELEASE}pgai-platform/helm/charts/"
helm repo update
kubectl create secret docker-registry edb-hcp-operator-pull-secret \
--docker-server="${registry}" \
--docker-username="${RELEASE}${username}" \
--docker-password="${password}" \
--namespace edb-hcp-operator-system
helm upgrade \
-n edb-hcp-operator-system \
--install \
--set "imagePullSecrets[0].name=edb-hcp-operator-pull-secret" \
--set controllerManager.manager.image.tag=$OPERATOR_VERSION \
--set controllerManager.manager.image.repository=docker.enterprisedb.com/${RELEASE}pgai-platform/edb-hcp-operator/manager \
--version $OPERATOR_VERSION \
edb-hcp-operator enterprisedb-edbpgai/edb-hcp-operator
eks-install-secrets.sh#
registry="docker.enterprisedb.com"
username="pgai-platform"
password=""
echo "Enter the password for ${username}@${registry}"
read -s password
if [ -z "$password" ]; then
echo 1>&2 "Error: password is required" >&2
echo 1>&2
usage
exit 1
fi
kubectl create ns edbpgai-bootstrap
kubectl create ns upm-replicator
kubectl create secret docker-registry edb-cred \
-n edbpgai-bootstrap \
--docker-server="${registry}" \
--docker-username="${username}" \
--docker-password="${password}"
kubectl create secret docker-registry edb-cred \
-n upm-replicator \
--docker-server="${registry}" \
--docker-username="${username}" \
--docker-password="${password}"
kubectl annotate secret -n upm-replicator edb-cred replicator.v1.mittwald.de/replicate-to="*" --overwrite
kubectl create namespace upm-griptape
FERNET_KEY=$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: fernet-secret
namespace: upm-griptape
stringData:
FERNET_KEY: ${FERNET_KEY}
EOF
kubectl create namespace upm-lakekeeper
PG_CONFOUNDING_KEY=$(dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: pg-confounding-key
namespace: upm-lakekeeper
stringData:
PG_CONFOUNDING_KEY: ${PG_CONFOUNDING_KEY}
EOF
echo "PG_CONFOUNDING_KEY is ${PG_CONFOUNDING_KEY} - store safely"
hm-default.yaml#
apiVersion: edbpgai.edb.com/v1alpha1
kind: HybridControlPlane
metadata:
name: edbpgai
spec:
source:
useLocalKustomizations: true
flavour: eks
version: v1.2.0+appl
imageRegistry: ${CONTAINER_REGISTRY_URI}
imagePullSecrets:
- name: edb-cred
namespace: edbpgai-bootstrap
globalParameters:
internal_backup_folder: 4befab698c8d
portal_domain_name: ${PORTAL_DOMAIN_NAME}
storage_class: ${STORAGE_CLASS}
componentsParameters:
edb-migration-portal:
enable_pdb: "false"
transporter-data-operator:
fips_enabled: "${TRANSPORTER_FIPS_ENABLED}"
transporter-dp-agent:
rw_service_url: https://${TRANSPORTER_RW_SERVICE_DOMAIN_NAME}/transporter
transporter-rw-service:
domain_name: ${TRANSPORTER_RW_SERVICE_DOMAIN_NAME}
upm-api-pnxt-metric:
log_level: info
tsdb_host: thanos-query.monitoring.svc.cluster.local
tsdb_port: "9090"
upm-api-pnxt-pd:
log_level: info
upm-beaco-ff-base:
usage_generator_interval: 24h
upm-beaco-usages:
usage_generator_interval: 24h
upm-beacon:
server_host: ${BEACON_SERVICE_DOMAIN_NAME}
beacon_server_replicas: "1"
external_metrics_replicas: "1"
beacon_db_hibernation: "\"off\""
upm-istio-gateway:
cookie_aeskey: ${AES_256_KEY}
upm-prometheus:
memory: 4Gi
pgai:
portal:
authentication:
idpConnectors: []
staticPasswords:
- email: ${AUTHENTICATION_EMAIL}
hash: ${AUTHENTICATION_HASH}
username: ${AUTHENTICATION_USERNAME}
userID: ${AUTHENTICATION_USER_ID}
beaconAgent:
applianceProviderEnabled: true
plaintext: true
beaconServerAddress: "upm-beacon-server-ingestion.upm-beacon.svc.cluster.local:8080"
tlsInsecure: false
location: "devspatcher"
logLevel: "debug"
beaconDBConnected: true
inCluster: true
provisioning:
loadBalancersEnabled: true
nodePortDomain: "nodeportdomain.com"
imageDiscovery: true
imagesetDiscoveryAuthenticationType: "eks_managed_identity"
imagesetDiscoveryContainerRegistryURL: 123456079902.dkr.ecr.us-east-1.amazonaws.com
providers:
- appliance
prepare-op.sh#
# !/bin/bash
echo "HM Operator values.yaml preparation\n"
# Import the eks-default-env file
source ./default-env.sh
# If EDB_PLATFORM_VERSION is not set, error and exit
if [ -z "$EDB_PLATFORM_VERSION" ]; then
echo "EDB_PLATFORM_VERSION is not set, please set it to the version of EDB Platform you are deploying"
exit
fi
# Test for the presence of yq
if ! command -v yq &> /dev/null
then
echo "yq could not be found, please install it"
exit
fi
cp hm-default.yaml hm-values.yaml
# Prepare values.yaml for EKS
export AES_256_KEY=$(openssl rand -base64 32)
# if AUTHENTICATION_PASSWORD_HASH is not set, generate it
if [ -z "$AUTHENTICATION_PASSWORD_HASH" ]; then
echo "Generating password hash - please ensure you remove the password from your history"
export AUTHENTICATION_PASSWORD_HASH=$(echo -n $AUTHENTICATION_PASSWORD | htpasswd -BinC 10 admin | cut -d: -f2)
else
echo "Using prehashed password"
fi
if [[ "$EDB_PLATFORM_VERSION" == v1.2.* ]]; then
echo "EDB Platform version is v1.2.*"
yq -i .spec.imageRegistry = env(CONTAINER_REGISTRY_URI) |
.spec.componentsParameters.upm-istio-gateway.cookie_aeskey = env(AES_256_KEY) |
.spec.globalParameters.portal_domain_name = env(PORTAL_DOMAIN_NAME) |
.spec.globalParameters.storage_class = env(STORAGE_CLASS) |
.spec.componentsParameters.transporter-data-operator.fips_enabled = (env(TRANSPORTER_FIPS_ENABLED)|tostring) |
.spec.componentsParameters.transporter-rw-service.domain_name = env(TRANSPORTER_RW_SERVICE_DOMAIN_NAME) |
.spec.componentsParameters.transporter-dp-agent.rw_service_url= "https://"+env(TRANSPORTER_RW_SERVICE_DOMAIN_NAME)+"/transporter" |
.spec.componentsParameters.upm-beacon.server_host= env(BEACON_SERVICE_DOMAIN_NAME) |
.spec.pgai.portal.authentication.staticPasswords[0].email=env(AUTHENTICATION_EMAIL) |
.spec.pgai.portal.authentication.staticPasswords[0].hash=env(AUTHENTICATION_PASSWORD_HASH) |
.spec.pgai.portal.authentication.staticPasswords[0].username=env(AUTHENTICATION_USER) |
.spec.pgai.portal.authentication.staticPasswords[0].userID="c5998173-a605-449a-a9a5-4a9c33e26df" |
.spec.beaconAgent.provisioning.imagesetDiscoveryContainerRegistryURL= env(IMAGESET_REGISTRY_URI) |
.spec.beaconAgent.provisioning.imagesetDiscoveryAuthenticationType= env(IMAGESET_AUTHTYPE) |
.spec.beaconAgent.location=env(LOCATION_NAME) hm-values.yaml
fi
echo "Your hm-values.yaml file is ready"