diff --git a/data/products/configsyncer.json b/data/products/configsyncer.json index 8c93e1a4d8..74efc506fd 100644 --- a/data/products/configsyncer.json +++ b/data/products/configsyncer.json @@ -44,12 +44,12 @@ { "title": "Configuration Syncer", "image": { - "src": "/assets/images/products/configsyncer/features/feature-3.png", - "alt": "http" + "src": "/assets/images/products/configsyncer/features/configuration-syncer.jpg", + "alt": "configuration-syncer" }, "icon": { "src": "/assets/images/products/configsyncer/features/configuration.svg", - "alt": "http" + "alt": "configuration-syncer" }, "summary": "", "description": "Keeps ConfigMaps and Secrets synchronized across Namespaces or Clusters" diff --git a/data/products/guard.json b/data/products/guard.json index e9965dbda6..418dbcea2a 100644 --- a/data/products/guard.json +++ b/data/products/guard.json @@ -49,12 +49,12 @@ { "title": "Identity Providers", "image": { - "src": "/assets/images/products/guard/features/feature-1.png", - "alt": "http" + "src": "/assets/images/products/guard/features/identify-providers.jpg", + "alt": "identify-providers" }, "icon": { "src": "/assets/images/products/guard/features/identity-providers.svg", - "alt": "http" + "alt": "identify-providers" }, "summary": "", "description": "Guard supports Github and Google as identity providers" @@ -62,12 +62,12 @@ { "title": "CLI", "image": { - "src": "/assets/images/products/guard/features/feature-2.png", - "alt": "http" + "src": "/assets/images/products/guard/features/cli", + "alt": "cli" }, "icon": { "src": "/assets/images/products/guard/features/cli.svg", - "alt": "http" + "alt": "cli" }, "summary": "", "description": "Guard comes with a cli to easily deploy in any Kubernetes cluster." @@ -75,12 +75,12 @@ { "title": "RBAC", "image": { - "src": "/assets/images/products/guard/features/feature-3.png", - "alt": "http" + "src": "/assets/images/products/guard/features/rbac.jpg", + "alt": "rbac" }, "icon": { "src": "/assets/images/products/guard/features/rbac.svg", - "alt": "http" + "alt": "rbac" }, "summary": "", "description": "This tutorial will show you how to use KubeDB in a RBAC enabled cluster." diff --git a/data/products/kubedb.json b/data/products/kubedb.json index 7aa2bda6be..47b0ad234a 100644 --- a/data/products/kubedb.json +++ b/data/products/kubedb.json @@ -55,12 +55,12 @@ "title": "Lower administrative burden", "url": "provision-databases-on-kubernetes", "image": { - "src": "/assets/images/products/kubedb/features/easy-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/easy-lg.jpg", + "alt": "Lower administrative burden" }, "icon": { "src": "/assets/images/products/kubedb/features/dumbbell.png", - "alt": "http" + "alt": "Lower administrative burden" }, "summary": "", "description": "KubeDB simplifies many of the difficult or tedious management tasks of running a production grade databases on private and public clouds. Maintain one stack for all your stateless and stateful applications and simplify the operational complexity." @@ -69,12 +69,12 @@ "title": "Native Kubernetes Support", "url": "deploy-databases-in-kubernetes-native-way", "image": { - "src": "/assets/images/products/kubedb/features/multi-cloud-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/multi-cloud-lg.jpg", + "alt": "Native Kubernetes Support" }, "icon": { "src": "/assets/images/products/kubedb/features/kubernetes.png", - "alt": "http" + "alt": "Native Kubernetes Support" }, "summary": "", "description": "Runs on any Kubernetes distribution including OpenShift, Rancher, VMware Tanzu. If you can run Kubernetes, you can provision and manage databases using KubeDB. Use standard Kubernetes CLI and API to provision and manage databases." @@ -83,12 +83,12 @@ "title": "Performance", "url": "increase-database-performance-on-kubernetes", "image": { - "src": "/assets/images/products/kubedb/features/performance-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/performance-lg.jpg", + "alt": "Performance" }, "icon": { "src": "/assets/images/products/kubedb/features/muscle.png", - "alt": "http" + "alt": "Performance" }, "summary": "", "description": "KubeDB uses Persistent Volume Claims (PVC) to dynamically provision disks for database instances. Using appropriately defined StorageClasses, KubeDB provisioned database instances are designed to scale from small development workloads up to performance-intensive workloads on private and public cloud environments." @@ -97,12 +97,12 @@ "title": "Availability and durability", "url": "backup-restore-databases-on-kubernetes", "image": { - "src": "/assets/images/products/kubedb/features/availability-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/availability-lg.jpg", + "alt": "Availability and durability" }, "icon": { "src": "/assets/images/products/kubedb/features/last-24-hours.png", - "alt": "http" + "alt": "Availability and durability" }, "summary": "", "description": "KubeDB will backup your database and transaction logs at a user defined frequency and store both for a user-specified retention period in a cloud object store (S3, GCS, etc.) or local filesystem (like NFS, etc.). You can also initiate one-off backups. KubeDB uses Stash by AppsCode to take deduplicated and encrypted backups so that you only incur the cost of incremental storage use. You can create a new instance from a database snapshots whenever you desire." @@ -111,12 +111,12 @@ "title": "Manageability", "url": "monitor-databases-on-kubernetes", "image": { - "src": "/assets/images/products/kubedb/features/monitoring-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/monitoring-lg.jpg", + "alt": "Manageability" }, "icon": { "src": "/assets/images/products/kubedb/features/prometheus.svg", - "alt": "http" + "alt": "Manageability" }, "summary": "", "description": "KubeDB comes with native support for monitoring via Prometheus. You can use builtin Prometheus scrapper or CoreOS Prometheus Operator to monitor KubeDB supported databases as well as KubeDB operator itself. You can use the Grafana to view key operational metrics, including compute/memory/storage capacity utilization, I/O activity, and instance connections. You can also use any metrics solutions like Datadog with KubeDB." @@ -125,12 +125,12 @@ "title": "Cost-effectiveness", "url": "manage-database-on-kubernetes-free", "image": { - "src": "/assets/images/products/kubedb/features/low-price-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/low-price-lg.jpg", + "alt": "Cost-effectiveness" }, "icon": { "src": "/assets/images/products/kubedb/features/low-price.png", - "alt": "http" + "alt": "Cost-effectiveness" }, "summary": "", "description": "KubeDB is free to try on any Kubernetes distribution. There is no up-front investment required, and you pay only for the resources you use to your infrastructure provider. And, when you’re finished with a database instance, you can easily delete it." @@ -139,12 +139,12 @@ "title": "Security", "url": "secure-databases-on-kubernetes", "image": { - "src": "/assets/images/products/kubedb/features/security-lg.png", - "alt": "http" + "src": "/assets/images/products/kubedb/features/security-lg.jpg", + "alt": "Security" }, "icon": { "src": "/assets/images/products/kubedb/features/security-lock.png", - "alt": "http" + "alt": "Security" }, "summary": "", "description": "You can secure your Databases with TLS using KubeDB. Also, KubeDB allows you to use encrypted storage for your databases using keys you manage through your cloud provider’s key management service." diff --git a/static/assets/images/products/configsyncer/features/configuration-syncer.jpg b/static/assets/images/products/configsyncer/features/configuration-syncer.jpg new file mode 100644 index 0000000000..5405231685 Binary files /dev/null and b/static/assets/images/products/configsyncer/features/configuration-syncer.jpg differ diff --git a/static/assets/images/products/guard/features/cli.jpg b/static/assets/images/products/guard/features/cli.jpg new file mode 100644 index 0000000000..edc2040e94 Binary files /dev/null and b/static/assets/images/products/guard/features/cli.jpg differ diff --git a/static/assets/images/products/guard/features/identify-providers.jpg b/static/assets/images/products/guard/features/identify-providers.jpg new file mode 100644 index 0000000000..73a4c28991 Binary files /dev/null and b/static/assets/images/products/guard/features/identify-providers.jpg differ diff --git a/static/assets/images/products/guard/features/rbac.jpg b/static/assets/images/products/guard/features/rbac.jpg new file mode 100644 index 0000000000..f9c8795c82 Binary files /dev/null and b/static/assets/images/products/guard/features/rbac.jpg differ diff --git a/static/assets/images/products/kubedb/features/availability-lg.jpg b/static/assets/images/products/kubedb/features/availability-lg.jpg new file mode 100644 index 0000000000..81b6c879ad Binary files /dev/null and b/static/assets/images/products/kubedb/features/availability-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/easy-lg.jpg b/static/assets/images/products/kubedb/features/easy-lg.jpg new file mode 100644 index 0000000000..d4fdf46e0b Binary files /dev/null and b/static/assets/images/products/kubedb/features/easy-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/low-price-lg.jpg b/static/assets/images/products/kubedb/features/low-price-lg.jpg new file mode 100644 index 0000000000..82330d4d66 Binary files /dev/null and b/static/assets/images/products/kubedb/features/low-price-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/monitoring-lg.jpg b/static/assets/images/products/kubedb/features/monitoring-lg.jpg new file mode 100644 index 0000000000..2ca1978768 Binary files /dev/null and b/static/assets/images/products/kubedb/features/monitoring-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/multi-cloud-lg.jpg b/static/assets/images/products/kubedb/features/multi-cloud-lg.jpg new file mode 100644 index 0000000000..5a06bc0b7e Binary files /dev/null and b/static/assets/images/products/kubedb/features/multi-cloud-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/performance-lg.jpg b/static/assets/images/products/kubedb/features/performance-lg.jpg new file mode 100644 index 0000000000..eb53ce9372 Binary files /dev/null and b/static/assets/images/products/kubedb/features/performance-lg.jpg differ diff --git a/static/assets/images/products/kubedb/features/security-lg.jpg b/static/assets/images/products/kubedb/features/security-lg.jpg new file mode 100644 index 0000000000..141b0e2205 Binary files /dev/null and b/static/assets/images/products/kubedb/features/security-lg.jpg differ diff --git a/static/files/products/appscode/aws-marketplace/ace_pay_arch.png b/static/files/products/appscode/aws-marketplace/ace_pay_arch.png new file mode 100644 index 0000000000..99259d805a Binary files /dev/null and b/static/files/products/appscode/aws-marketplace/ace_pay_arch.png differ diff --git a/static/files/products/appscode/aws-marketplace/ace_payg_aws_eula.pdf b/static/files/products/appscode/aws-marketplace/ace_payg_aws_eula.pdf new file mode 100644 index 0000000000..c98443dd68 Binary files /dev/null and b/static/files/products/appscode/aws-marketplace/ace_payg_aws_eula.pdf differ diff --git a/static/files/products/appscode/aws-marketplace/ace_payg_cf.yaml b/static/files/products/appscode/aws-marketplace/ace_payg_cf.yaml new file mode 100644 index 0000000000..3d0e75141f --- /dev/null +++ b/static/files/products/appscode/aws-marketplace/ace_payg_cf.yaml @@ -0,0 +1,355 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: CloudFormation template for creating an EC2 instance in a new VPC + +Parameters: + Architecture: + Description: "CIDR range of remote ip for ssh" + Type: String + Default: "amd64" + AllowedValues: + - "amd64" + - "arm64" + IpWhiteList: + Description: "CIDR range of remote ip for ssh" + Type: String + InstallerURL: + Description: "Download URL of the selfhost Installer" + Type: String + KeyPair: + Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. + Type: 'AWS::EC2::KeyPair::KeyName' + +Mappings: + AMIImageMap: + amd64: + ImageID: '{{resolve:ssm:/aws/service/canonical/ubuntu/server/noble/stable/current/amd64/hvm/ebs-gp3/ami-id}}' + InstanceType: "m5.xlarge" + arm64: + ImageID: '{{resolve:ssm:/aws/service/canonical/ubuntu/server/noble/stable/current/arm64/hvm/ebs-gp3/ami-id}}' + InstanceType: "m6g.xlarge" + +Resources: + VPC: + Type: AWS::EC2::VPC + Properties: + CidrBlock: 10.5.0.0/16 + EnableDnsSupport: true + EnableDnsHostnames: true + Tags: + - Key: Name + Value: !Ref AWS::StackName + + Subnet: + Type: AWS::EC2::Subnet + Properties: + VpcId: !Ref VPC + CidrBlock: 10.5.0.0/24 + Tags: + - Key: Name + Value: !Ref AWS::StackName + + ElasticIP: + Type: AWS::EC2::EIP + Properties: + Tags: + - Key: Name + Value: !Ref AWS::StackName + + InternetGateway: + Type: AWS::EC2::InternetGateway + Properties: + Tags: + - Key: Name + Value: !Ref AWS::StackName + + AttachGateway: + Type: AWS::EC2::VPCGatewayAttachment + Properties: + VpcId: !Ref VPC + InternetGatewayId: !Ref InternetGateway + + RouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref VPC + Tags: + - Key: Name + Value: !Ref AWS::StackName + + RouteToInternet: + Type: AWS::EC2::Route + DependsOn: AttachGateway + Properties: + RouteTableId: !Ref RouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + SecurityGroupIngress4222: + Type: AWS::EC2::SecurityGroupIngress + Properties: + IpProtocol: tcp + FromPort: 4222 + ToPort: 4222 + CidrIp: 0.0.0.0/0 + GroupId: !GetAtt VPC.DefaultSecurityGroup + + SecurityGroupIngress80: + Type: AWS::EC2::SecurityGroupIngress + Properties: + IpProtocol: tcp + FromPort: 80 + ToPort: 80 + CidrIp: 0.0.0.0/0 + GroupId: !GetAtt VPC.DefaultSecurityGroup + + SecurityGroupIngress443: + Type: AWS::EC2::SecurityGroupIngress + Properties: + IpProtocol: tcp + FromPort: 443 + ToPort: 443 + CidrIp: 0.0.0.0/0 + GroupId: !GetAtt VPC.DefaultSecurityGroup + + SecurityGroupIngress6443: + Type: AWS::EC2::SecurityGroupIngress + Properties: + IpProtocol: tcp + FromPort: 6443 + ToPort: 6443 + CidrIp: 0.0.0.0/0 + GroupId: !GetAtt VPC.DefaultSecurityGroup + + SecurityGroupIngress22: + Type: AWS::EC2::SecurityGroupIngress + Properties: + IpProtocol: tcp + FromPort: 22 + ToPort: 22 + CidrIp: !Ref IpWhiteList + GroupId: !GetAtt VPC.DefaultSecurityGroup + + SubnetRouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + RouteTableId: !Ref RouteTable + SubnetId: !Ref Subnet + + Instance: + Type: AWS::EC2::Instance + Properties: + ImageId: !FindInMap [ AMIImageMap, !Ref Architecture, ImageID] + InstanceType: !FindInMap [ AMIImageMap, !Ref Architecture, InstanceType] + KeyName: !Ref KeyPair + Tags: + - Key: "Name" + Value: + Ref: AWS::StackName + NetworkInterfaces: + - AssociatePublicIpAddress: "true" + DeviceIndex: "0" + SubnetId: + Ref: "Subnet" + BlockDeviceMappings: + - DeviceName: /dev/sda1 #/dev/sta1 is the device name for root volume + Ebs: + VolumeSize: 100 # Specify the size of the root volume in GB + VolumeType: gp3 + UserData: + Fn::Base64: + !Join + - "\n" + - - | + #!/bin/bash + sudo su + HOME="/root" + cd $HOME + apt-get -y update + apt upgrade -y + set -xeo pipefail + exec >/root/userdata.log 2>&1 + - !Sub 'INSTALLER_URL=${InstallerURL}' + - !Sub 'PUBLIC_IP=${ElasticIP.PublicIp}' + - !Sub 'REGION=${AWS::Region}' + - | + #constants (don't touch) + BUCKET_NAME="ace" + INSTALLER_ID=$(echo $INSTALLER_URL | awk -F '[/]' '{ print $8 }') + timestamp() { + date +"%Y/%m/%d %T" + } + log() { + local type="$1" + local msg="$2" + local script_name=${0##*/} + echo "$(timestamp) [$script_name] [$type] $msg" + } + retry() { + local retries="$1" + shift + local count=0 + local wait=5 + until "$@"; do + exit="$?" + if [ $count -lt $retries ]; then + log "INFO" "Attempt $count/$retries. Command exited with exit_code: $exit. Retrying after $wait seconds..." + sleep $wait + else + log "INFO" "Command failed in all $retries attempts with exit_code: $exit. Stopping trying any further...." + return $exit + fi + count=$(($count + 1)) + done + return 0 + } + create_k3s() { + echo 'fs.inotify.max_user_instances=100000' | sudo tee -a /etc/sysctl.conf + echo 'fs.inotify.max_user_watches=100000' | sudo tee -a /etc/sysctl.conf + sudo sysctl -p + + # Create k3s cluster + SERVER_IP=${PUBLIC_IP} + cmd="curl -sfL https://get.k3s.io" + retry 5 $cmd | INSTALL_K3S_EXEC="--disable=traefik --disable=metrics-server" sh -s - --tls-san "$SERVER_IP" + + echo 'alias k=kubectl' >> ${HOME}/.bashrc + echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' >> ${HOME}/.bashrc + source "${HOME}/.bashrc" + + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + + # wait for 2 pods to become running + cmd="kubectl wait --for=condition=ready pods --all -A --timeout=5m" + retry 5 $cmd + + # Install helm + curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash + } + download_values(){ + mkdir old + cd old + curl -L "${INSTALLER_URL}" -o "archive.tar.gz" + tar -xvzf archive.tar.gz + + #soruce azure credential file from archive.tar.gz + source env.sh + + cd .. + } + aws_cli() { + apt install unzip >/dev/null + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" >/dev/null + unzip awscliv2.zip >/dev/null + sudo ./aws/install >/dev/null + #install jq + apt-get install jq -y + BUCKET_NAME=${BUCKET_NAME}$(head /dev/urandom | tr -dc 'a-z' | head -c 6) + echo "s3 bucket name: "${BUCKET_NAME} + aws s3api create-bucket --bucket ${BUCKET_NAME} --region ${REGION} --object-ownership BucketOwnerEnforced + ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account') + #call the webhook here + resp=$(curl -X POST https://appscode.com/marketplace/api/v1/marketplaces/aws/notification/resource?secret=vstktmgwvkxyrsrfmt5tr0i66qpxkeoeaejjr3gyxkeywkm/00kyfahzvxjkfyb/qn5tgxgt9s/xb6vsamhh4w== \ + -H "Content-Type: application/json" \ + -d '{ + "eventType": "BIND", + "accountId": "'${ACCOUNT_ID}'", + "bindingInfo": { + "installerID": "'${INSTALLER_ID}'", + "options": { + "infra": { + "dns": { + "provider": "none", + "targetIPs": ["'${PUBLIC_IP}'"] + }, + "cloudServices": { + "objstore": { + "auth": { + "s3": { + "AWS_ACCESS_KEY_ID": "'${AWS_ACCESS_KEY_ID}'", + "AWS_SECRET_ACCESS_KEY": "'${AWS_SECRET_ACCESS_KEY}'" + } + }, + "bucket": "s3://'${BUCKET_NAME}'?s3ForcePathStyle=true", + "endpoint": "s3.amazonaws.com", + "prefix": "ace", + "region": "'${REGION}'" + }, + "provider": "s3" + }, + "kubestash": { + "backend": { + "provider": "s3", + "s3": { + "bucket": "s3://'${BUCKET_NAME}'", + "endpoint": "s3.amazonaws.com", + "prefix": "ace", + "region": "'${REGION}'" + } + }, + "retentionPolicy": "keep-1mo", + "schedule": "0 */2 * * *", + "storageSecret": { + "create": true + } + } + }, + "initialSetup": { + "cluster": { + "region": "'${REGION}'" + }, + "subscription": { + "aws": { + "customer-identifier": "demo-customer-identifier" + } + } + } + } + } + }') + link=$(echo ${resp} | jq -r '.link') + if [ ${link} == "null" ]; then exit ; fi + + mkdir new + cd new + curl -L "${link}" -o "archive.tar.gz" + tar -xvzf archive.tar.gz + cd .. + } + install_fluxcd() { + helm upgrade -i flux2 \ + oci://ghcr.io/appscode-charts/flux2 \ + --version ${FLUXCD_CHART_VERSION} \ + --namespace flux-system --create-namespace \ + --set helmController.create=true \ + --set sourceController.create=true \ + --set imageAutomationController.create=false \ + --set imageReflectionController.create=false \ + --set kustomizeController.create=false \ + --set notificationController.create=false \ + --set-string helmController.labels."ace\.appscode\.com/managed=true" \ + --set-string sourceController.labels."ace\.appscode\.com/managed=true" \ + --wait --debug --burst-limit=10000 + } + deploy_ace(){ + helm upgrade -i ace-installer \ + oci://ghcr.io/appscode-charts/ace-installer \ + --version ${ACE_INSTALLER_CHART_VERSION} \ + --namespace kubeops --create-namespace \ + --values=./new/values.yaml \ + --wait --debug --burst-limit=10000 + #--set helm.releases.ace.values.global.infra.dns.targetIPs={${PUBLIC_IP}} + } + init(){ + create_k3s + download_values + aws_cli + install_fluxcd + deploy_ace + } + init + + IPAssoc: + Type: AWS::EC2::EIPAssociation + Properties: + InstanceId: !Ref Instance + EIP: !GetAtt ElasticIP.PublicIp diff --git a/themes/hugo-product-theme b/themes/hugo-product-theme index f231676e69..1903af58ca 160000 --- a/themes/hugo-product-theme +++ b/themes/hugo-product-theme @@ -1 +1 @@ -Subproject commit f231676e698ee686145cd8d4ef7f26c519fa44f1 +Subproject commit 1903af58ca0ed93ec49d6aae4f971e04e8afa531