From 26b686128e7db2624d847d8ac6d55557023164c7 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Tue, 12 Dec 2023 14:58:36 +0000 Subject: [PATCH 1/6] BYOC documentation Added a section for Quix BYOC. This section details BYOC requirements, the installation process and its benefits. --- .gitignore | 1 + docs/deploy/byoc/byoc-vs-cloud.md | 29 +++++ docs/deploy/byoc/installation.md | 107 ++++++++++++++++++ docs/deploy/byoc/overview.md | 18 +++ docs/deploy/byoc/release-filtering.md | 74 ++++++++++++ docs/deploy/byoc/requirements.md | 53 +++++++++ .../deploy/byoc/byoc-successful-install.png | Bin 0 -> 73183 bytes docs/images/deploy/byoc/push-variables.png | Bin 0 -> 39550 bytes .../deploy/byoc/using-quixplatform-cli.jpg | Bin 0 -> 62297 bytes mkdocs.yml | 7 ++ 10 files changed, 289 insertions(+) create mode 100644 docs/deploy/byoc/byoc-vs-cloud.md create mode 100644 docs/deploy/byoc/installation.md create mode 100644 docs/deploy/byoc/overview.md create mode 100644 docs/deploy/byoc/release-filtering.md create mode 100644 docs/deploy/byoc/requirements.md create mode 100644 docs/images/deploy/byoc/byoc-successful-install.png create mode 100644 docs/images/deploy/byoc/push-variables.png create mode 100644 docs/images/deploy/byoc/using-quixplatform-cli.jpg diff --git a/.gitignore b/.gitignore index bd382e03..91f86d7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ site/ +lib/ .idea/ .vscode/ .DS_Store diff --git a/docs/deploy/byoc/byoc-vs-cloud.md b/docs/deploy/byoc/byoc-vs-cloud.md new file mode 100644 index 00000000..82bb0da3 --- /dev/null +++ b/docs/deploy/byoc/byoc-vs-cloud.md @@ -0,0 +1,29 @@ +# When to choose Quix Brign Your Own Cloud Enterprise Edition? + +Our cloud offering is a great way to work with the Quix Platform for most use cases. Teams who do not have specific requirements regarding security or underlying infrastructure may choose to build on our cloud offering and scale it to meet their needs. BYOC goes one step further than cloud and offers you all the powers of the Quix Platform, along with the ability to control and scale the underlying services, infrastructure to fit your exact needs. + +| | Quix Cloud | Quix BYOC | +|----|----|----| +| Analyse data streams | Yes | Yes | +| Quickly deploy real-time apps | Yes | Yes | +| Iso 27001 certified | Yes | No[^1] | +| Data stored by you| No| Yes[^2]| +| On-prem cost savings| No | Possible[^3] | +| Consume cloud reservations | No | Possible[^3] | +| Bespoke Networking | No | Yes | +| Bespoke Storage | No | Yes | +| Private CA certificates | No | Yes | +| Can be scaled to your needs | Yes | Yes | + + + +[^1]: + The process of creating Quix Platform deliverables continues to be ISO 27001 certified. What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies. + +[^2]: + Exclusively. Quix BYOC Enterprise Editions are self-contained. _Only_ you store your data. + +[^3]: + Running your own infrastructure on your own premises (or co-located) tends to be more cost efficient than most cloud offerings. This is especially true if you have hardware requirements not easily fulfilled in the cloud including GPUs, FPGAs, very high-speed storage or networking, CPU architectures other than AMD64 and so on. If you know exactly what you're running and why, cloud tends to fall to second choice when deciding where to host your application, and Quix. + + The same is true for cloud reservations. If you have an existing preservation or other agreement with a cloud provider, you may want to choose running Quix yourself on capacity you already own. \ No newline at end of file diff --git a/docs/deploy/byoc/installation.md b/docs/deploy/byoc/installation.md new file mode 100644 index 00000000..1c0078df --- /dev/null +++ b/docs/deploy/byoc/installation.md @@ -0,0 +1,107 @@ +# How to install BYOC + +## Overview + +The short story of deployment is as follows: + +1. Create a [Kubernetes cluster](#1-create-a-kubernetes-cluster) +2. Obtain a Quix Container Registry [API key](#2-obtain-an-api-key-to-pull-quix-platform-containers) to pull Quix Platform containers +3. Obtain a copy of the Quix Platform [BYOC installer](#3-obtain-a-copy-of-the-quix-platform-byoc-installer-ansible-recipe--docker-image) (Ansible Recipe + Docker Image) +4. Run the [installer container](#4-run-the-installer-container) +5. [Prepare Secrets](#5-prepare-secrets-and-platform-configuration) and platform configuration +6. [Push Secrets](#6-push-secrets-and-platform-configuration-to-the-cluster) and platform configuration to the cluster +7. Optional: [Initialise ArgoCD](#7-optional-initialise-argocd) +8. [Install Quix Platform](#8-install-quix-platform) for the first time + +## Step By Step + +### 1. Create a Kubernetes cluster + +This step is where you have the most freedom of choice. The assumption this guide works with is that you have an operational Kubernetes cluster ready to schedule pods and create the requirement dependencies. Any Kubernetes installation should work as long as it clears the requirements in the [Requirements](requirements.md) section. + +In short, if your Kubernetes cluster configuration isn't _particularly_ niche, it should work without any extra configuration. + +We recommend a production ready Kubernetes cluster, with HA control plane and multiple worker nodes, as this makes maintenance and scaling easier. + +### 2. Obtain an API key to pull Quix Platform containers + +In this step you will be receiving a username / API token and docker registry URL. These will be provided to you by Quix before you start the installation process. + +### 3. Obtain a copy of the Quix Platform BYOC installer (Ansible Recipe + Docker Image) + +Once you have an API key, you can download the installer from our private Container Registry. The installer is a Docker image that contains an Ansible recipe and all the required dependencies to run it. This way you don't need to install Ansible (and its particular Python version dependencies), Helm and all the other programs and libraries required to run the installer. We have packaged it all to offer a turn-key, convenient experience for you. + +### 4. Run the installer container + +The container is built and tested with Docker. On any system capable of running Docker, you can run the installer with the following command: + +```bash +./quixplatform container quix -V 1.1.1 +``` + +This will run the Quix Platform Installer using the Quix Platform CLI tool provided to you ahead of the installation process. + +![Quixplatform CLI](../../images/deploy/byoc/using-quixplatform-cli.jpg){width=80%} + +### 5. Prepare Secrets and platform configuration + +A successful installation of the Quix Platform requires a few secrets and variables to be set. Secrets are used to store sensitive information about your Platform Installation. API keys, usernames, passwords for all the services, dependencies and integrations are stored in Secrets which the Installer will use to configure the Platform. By storing secrets in a Kubernetes native way we ensure that any subsequent successful installations of the Quix Platform do not depend on the machine used for installation. After a successful initialisation of the Secrets and Platform configuration, anyone with the correct permissions should be able to maintain the platform. + +If ArgoCD is used -- of which we supply an opinionated installation, if you choose to use it --, it will be able to utilise these secrets and configuration to maintain the platform. + +### 6. Push Secrets and platform configuration to the cluster + +The Quixplatform CLI tools help you push the Secrets and Platform configuration to the cluster. + +1. Ensure you have everything set correctly in `vars/platform-variables.yaml` and `vars/platform-secrets-human.yaml` + +Then, from inside the Installer container started in step 4, run the following command: + + +```bash +namespace=quix +./secrets.sh encode platform-secrets-human.yaml platform-secrets.yaml +./secrets.sh push ${namespace} platform-secrets.yaml +./quixplatform config ${namespace} -f vars/platform-variables.yaml +``` +As a general rule, commands and steps are designed to be idempotent wherever possible. This is also the case when manipulating secrets and platform configuration: +any subsequent pushes that make no changes will look like this: +![Quixplatform CLI Config Push](../../images/deploy/byoc/push-variables.png){width=80%} + +### 7. Optional: Initialise ArgoCD +Inside the installer container, run the following command: + +Change values in `init-scripts/application.yaml.template` to meet your requirements. +The following lines are of particular interest: + +```yaml + repoURL: '' + targetRevision: staging + path: releases/ +``` +These define what release 'train' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise in the `init-scripts/quix-version-filter.yaml` file. + + +```bash +argo_namespace=argo +init-scripts/init.sh ${argo_namespace} ${quix_namespace} +``` + +This will initialise ArgoCD and create the Quix application in the namespace you specify. If you do not specify a namespace, it will default to `argocd` and `quix`. + + +### 8. Install Quix Platform + +Inside the installer container, run the following command: + +```bash +./quixplatform install +``` +or if ArgoCD is installed +```bash +./quixplatform install --context= +``` + +This will install the Quix Platform on your Kubernetes cluster. The installation process will take 3-5 minutes. The progress of the installation will be displayed as Ansible roles initialise and set up the various components and then the Quix Platform itself. + +![Quixplatform Successful Installation](../../images/deploy/byoc/byoc-successful-install.png){width=80%} \ No newline at end of file diff --git a/docs/deploy/byoc/overview.md b/docs/deploy/byoc/overview.md new file mode 100644 index 00000000..6cff434e --- /dev/null +++ b/docs/deploy/byoc/overview.md @@ -0,0 +1,18 @@ +# Bring Your Own Cluster + +BYOC is Quix packaged to run on your own Kubernetes cluster. Bring Your Own Cluster, control its resources and make them work efficiently by deploying Quix Platform to it. + +!!! Info "Glossary" + **Kubernetes** is a container orchestration platform tailored to offer great flexibility and power. You can run Kubernetes on a variety of different computers ranging from your laptop to hundreds of Virtual Machine nodes in data centres distributed around the world. + +The driving force behind the design of **Quix BYOC Enterprise Edition** was to enable the installation of the Quix Platform in as many different configurations of Kubernetes as technology allows. This enables us to offer Quix on a range of platforms, from minimal-viable clusters functioning as pilot projects on spare bare-metal hardware, to extensive production clusters managed within AKS, EKS, GCP, Proxmox, and similar environments. These advanced setups can include hundreds of CPU cores and terabytes of RAM, utilise container engines off the beaten path and provide storage through a multitude of means. + +We have developed Quix BYOC to deliver a safe, opinionated default configuration, designed to ensure our platform operates effectively across a diverse range of Kubernetes cluster setups. Additionally, it's crafted for easy integration with existing components and technologies you currently employ and wish to continue using. + +We have also made a conscious effort to ensure Quix works well with clusters that already run workloads. We do not require a dedicated empty cluster for Quix to run on, although you may want to consider this for proof-of-concept deployments. + + + +## Next steps + +See the requirements of the [Quix platform](requirements.md) \ No newline at end of file diff --git a/docs/deploy/byoc/release-filtering.md b/docs/deploy/byoc/release-filtering.md new file mode 100644 index 00000000..0d97b784 --- /dev/null +++ b/docs/deploy/byoc/release-filtering.md @@ -0,0 +1,74 @@ +# What are Quix BYOC Release Filters? + +We recommend using ArgoCD or Flux to orchestrate releases and updates to your BYOC environment. We publish multiple branches, or "streams", of releases, but you may choose to only deploy a subset of these releases to your environment. This is where release filters become useful. + +ArgoCD does not natively support picking and choosing the parts of an application you wish to deploy. So we built a tool for it ourselves. + +A filter is a powerful tool you can use to determine what versions of our services or chart to accept or reject, based on multiple possible criteria. + +We ship ArgoCD with our BYOC distribution, and if you should choose to deploy it, with it we provide the functionality to define what releases you accept. We recommend this for testing purposes or to comply with version constraints of your underlying infrastructure. + + +## How do I use filters? + +A Release filter is a Configmap containing a YAML file, which describes the conditions under which a release should be accepted or rejected. + +By default the filter is empty, and your platform will deploy any release your platform subscribes to, to your environment automatically. + +The following example shows the various ways in which you may filter releases: +```yaml +--- +platform_release: + - type: versionBelow + key: version + value: "2.0.0" + - type: versionBelow + key: minSupportedKubernetes + value: "1.24.19" + - type: includeKeyword + key: requiredStorageBackend + value: + - "nfsclient" +auth: + - type: dateBefore + key: imagetag + value: "20231111" + - type: excludeKeyword + key: imagetag + value: + - "cactus" + - "beta" + - "test" + - type: includeKeyword + key: imagetag + value: + - "bamboo" + - type: exact + key: imagetag + value: "20231116.2-2023-11-03-promocode" + - type: highestMinorVersion + key: imagetag + value: "1" +``` + +Any release chart rejected because of the `platform_release` filter will cause the entire chart to be rejected. This means that if you reject a release because of the `platform_release` filter, the entire chart will be rejected, even if the `auth` filter would have accepted it. + +A rejected service (or chart) will not be deployed to your environment either at the time of us pushing it to the branch your environment is subscribed to, or at the time of your environment syncing with the branch. If you wish to install a release anyway, you may at any time change your filter and manually sync your ArgoCD Quix application. + +!!! note + We recommend that if you set a filter, it only applies to the platform_release service. Any more granular filtering should be done at the recommendation of a Quix support engineer during a troubleshooting session. During normal operation, keeping the minSupportedKubernetes key filtered is a good idea, as it will prevent you from deploying a release that is not compatible with your Kubernetes cluster. Otherwise, we recommend you keep the filter, at least initially, empty. + +## How do I know what was filtered out? + +In your Kubernetes cluster, you can find the Configmap containing a chart (essentially a service version matrix) of all the services your platform was meant to deploy. In case of a filter-induced rejection, you will see a Configmap called `containerversions` receive a new annotation at `.metadata.annotations.rejectedServices` containing a json array of all the services and reasons they were rejected. Or it may be empty in case no such event occurred. + +``` +> kubectl -n quix get cm containerversions -o jsonpath='{.metadata.annotations.rejectedServices}' | base64 -d +{} + + +- or - + +{ "auth": { "type": "excludeKeyword", "key": "imagetag", "value": [ "cactus", "promocode" ] }, "platform_release": { "type": "versionBelow", "key": "version", "value": "1.0.0" } } +``` + diff --git a/docs/deploy/byoc/requirements.md b/docs/deploy/byoc/requirements.md new file mode 100644 index 00000000..eb08ed9e --- /dev/null +++ b/docs/deploy/byoc/requirements.md @@ -0,0 +1,53 @@ +# Requirements for BYOC + +The BYOC installation method assumes that some resources are available and meet version or quantity criteria. We have conducted extensive testing on a variety of Kubernetes cluster configurations and have validated the platform on a number of different setups. + +The requirements are designed to ensure that the platform will run effectively and efficiently. Most default installations in managed kubernetes environments will meet these requirements, as well as any opinionated installation of Kubernetes on on-prem VMs running any modern linux operating system. + + +## Essentials + +To ensure the success of the installation process, the following essential requirements must be fulfilled: +- For running the installer: A computer capable of running Linux containers. It may be either a physical or a virtual machine. This computer should run Linux, MacOS, or Windows (using Docker Desktop or WSL), and it may have either an aarch64 (arm64, Apple Silicon in most cases) or amd64 architecture. This will only be used to run the installation scripts. +- For running the installer: A kubectl client that has already been configured to communicate with this cluster. This client must be able to communicate with the cluster from the computer running the installation scripts. +- To run the platform: A Kubernetes cluster that has already been set up. +- Sufficient permissions to create a service account, manage limited tokens, and create new namespaces and other resources. + +## Kubernetes cluster minimum requirements +- AMD64 architecture.[^1] +- Three nodes with at least 2 CPU cores and 16GB of RAM each[^2]. +- Kubernetes version 1.24.1 or later. +- A container runtime capable of handling Linux containers, MongoDB and Kafka. (containerd, cri-o etc.) +- A storage class capable of handling dynamic provisioning of Persistent Volumes. (nfs with nfs-subdir-external-provisioner, Ceph, Longhorn, EBS/EFS, azurefile, Google filestore, Isilon etc) +- One standard RWX storage class and one standard RWO storage class. +- The ability of exposing services outside of the Kubernetes cluster. (either LoadBalancer compatible Load Balancer or NodePorts) +- Network ingres and egress permissive enough for the kubelet to pull platform containers from the Quix Container Registry. + +## Kubernetes cluster recommended requirements +- Everything in the minimum requirements +- Three separate control plane nodes (or managed control plane) for high availability and easy maintenance. +- A nodepool sufficient for your requirements, but at least 16GB of RAM and 4 CPU cores each. +- Kubernetes version 1.28 or later. +- Optional: Premium RWO storage class +- A Load Balancer capable of exposing a LoadBalancer type service (such as AWS ELB or MetalLB) + + +!!! warning + + You may re-use existing services, such as Kafka and MongoDB. If you do not, Quix BYOC will install its own versions of these services. Your underlying infrastructure must be able to run these services, which may require enabling AVX, AVX2 and XSAVE instructions on your CPU, or passed through for it in the Hypervisor. This is not a default in some hypervisors and may be the source of issues. + +## Support requirements + +For the purposes of installing Quix BYOC Enterprise Edition, an engineer comfortable with using kubectl (or Lens) and the linux terminal is required to attend the initial setup. We also provide live support during this. + +You are in full ownership and control of the underlying infrastructure running the platform, therefore scaling, patching and other administrative tasks will be performed by your team to your requirements and specifications. We are always happy to help with any issues you may encounter and will be delivering container and application level security patches to the Quix Platform. + +## Next steps +Follow the [installation](installation.md) process to find out how to install the Quix Platform on your Kubernetes cluster. + + +[^1]: + We are excited about ARM64 cpus as well! They are fast becoming a serious contender for building distributed computational platforms, especially on AWS. Unfortunately, some of our dependencies are not yet available for aarch64 and therefore we are not able to ship Quix for aarch64 Kubernetes clusters. When we do, this document will change. You are welcome to run the installation scripts and the container delivering them on aarch64 computers from the native image. + +[^2]: + We recommend nodes at least 16GB of RAM each to err on the safe side. Quix has been tested on 3 x 8GB nodes and has been found to work well. This however leaves very little room for your other workloads and isn't an experience we wish for you to have with Quix. diff --git a/docs/images/deploy/byoc/byoc-successful-install.png b/docs/images/deploy/byoc/byoc-successful-install.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc079e8ef57fb67b95a8754fe238e99ef02a238 GIT binary patch literal 73183 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 literal 0 HcmV?d00001 diff --git a/docs/images/deploy/byoc/push-variables.png b/docs/images/deploy/byoc/push-variables.png new file mode 100644 index 0000000000000000000000000000000000000000..584f432d80cbdd99fb009687ffbc496b4a0323bb GIT binary patch literal 39550 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�rQ`ZJ;adaTi0K%t3 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 Q)IBPrO9=h97m?xr0ojm0WdHyG literal 0 HcmV?d00001 diff --git a/docs/images/deploy/byoc/using-quixplatform-cli.jpg b/docs/images/deploy/byoc/using-quixplatform-cli.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fe75d06baa4584b399ebfd128d9adaec55d9c12 GIT binary patch literal 62297 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 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index c7d2fa8c..958c40ec 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -81,6 +81,12 @@ nav: - 'YAML variables': 'deploy/yaml-variables.md' - 'State management': 'deploy/state-management.md' - 'Deploy public services': 'deploy/deploy-public-page.md' + - 'Bring your own cluster': + - 'Overview': 'deploy/byoc/overview.md' + - 'Requirements': 'deploy/byoc/requirements.md' + - 'Installation': 'deploy/byoc/installation.md' + - 'BYOC vs. Cloud': 'deploy/byoc/byoc-vs-cloud.md' + - 'Release filtering': 'deploy/byoc/release-filtering.md' - 'Manage': - 'Overview': 'manage/overview.md' - 'Troubleshooting': 'manage/troubleshooting.md' @@ -342,6 +348,7 @@ markdown_extensions: - pymdownx.tabbed: alternate_style: true - admonition + - footnotes - pymdownx.critic - pymdownx.caret - pymdownx.keys From 4156b2d4245d64e7db1977daa218e571275faec3 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Tue, 12 Dec 2023 16:22:04 +0000 Subject: [PATCH 2/6] Suggestions implemented - Improved wording, grammar and communication of benefits and values of Quix BYOC - Moved BYOC to a top-level menu item. --- docs/byoc/byoc-vs-cloud.md | 35 +++++++++++++++++++++ docs/{deploy => }/byoc/installation.md | 28 +++++++++-------- docs/{deploy => }/byoc/overview.md | 0 docs/{deploy => }/byoc/release-filtering.md | 5 ++- docs/{deploy => }/byoc/requirements.md | 8 ++--- docs/deploy/byoc/byoc-vs-cloud.md | 29 ----------------- mkdocs.yml | 12 +++---- 7 files changed, 62 insertions(+), 55 deletions(-) create mode 100644 docs/byoc/byoc-vs-cloud.md rename docs/{deploy => }/byoc/installation.md (82%) rename docs/{deploy => }/byoc/overview.md (100%) rename docs/{deploy => }/byoc/release-filtering.md (85%) rename docs/{deploy => }/byoc/requirements.md (88%) delete mode 100644 docs/deploy/byoc/byoc-vs-cloud.md diff --git a/docs/byoc/byoc-vs-cloud.md b/docs/byoc/byoc-vs-cloud.md new file mode 100644 index 00000000..5257762f --- /dev/null +++ b/docs/byoc/byoc-vs-cloud.md @@ -0,0 +1,35 @@ +# When to choose Quix Brign Your Own Cloud Enterprise Edition? + +Our cloud offering is a great way to work with the Quix Platform for most use cases. We think of Quix in the cloud as the perfect way to use the platform if you prefer and require the managed experience. + +BYOC goes one step further than cloud by offering all the powers of the Quix Platform, along with the ability to control and scale the underlying services, infrastructure to fit your needs. + +When hosting your own Quix platform, you are in full control of how all parts operate. We provide safe and sane defaults, but it is ready to fit your exact use case. + +| | Quix Cloud | Quix BYOC | +|----|----|----| +| Analyse data streams | Yes | Yes | +| Quickly deploy real-time apps | Yes | Yes | +| Iso 27001 certified | Yes | No[^1] | +| Data stored by you| No| Yes[^2]| +| On-prem cost savings| No | Possible[^3] | +| Consume cloud reservations | No | Possible[^3] | +| Bespoke Networking | No | Yes | +| Bespoke Storage | No | Yes | +| Private CA certificates | No | Yes | +| Can be scaled to your needs | Yes | Yes | + + + +[^1]: + The process of creating Quix Platform deliverables continues to be ISO 27001 certified. What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies. + + What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies and therefore may or may not be ISO (and ISO27001 specifically) compliant. + +[^2]: + Exclusively. Quix BYOC Enterprise Editions are self-contained. _Only_ you store your data. + +[^3]: + Running your own infrastructure on your premises (or in a co-location) is often more cost-efficient than most cloud offerings. This is particularly true if you have specific hardware requirements that are not easily met in the cloud, such as GPUs, FPGAs, ultra-high-speed storage or networking. However, for most use cases, Quix Cloud provides the best managed experience we offer. + + You may choose to run Quix BYOC in your own cloud environment, consuming reservations or quotas established in prior agreements with cloud providers. This has the potential to lower your operational costs, while maintaining a cloud presence with Quix. \ No newline at end of file diff --git a/docs/deploy/byoc/installation.md b/docs/byoc/installation.md similarity index 82% rename from docs/deploy/byoc/installation.md rename to docs/byoc/installation.md index 1c0078df..c474366d 100644 --- a/docs/deploy/byoc/installation.md +++ b/docs/byoc/installation.md @@ -7,8 +7,8 @@ The short story of deployment is as follows: 1. Create a [Kubernetes cluster](#1-create-a-kubernetes-cluster) 2. Obtain a Quix Container Registry [API key](#2-obtain-an-api-key-to-pull-quix-platform-containers) to pull Quix Platform containers 3. Obtain a copy of the Quix Platform [BYOC installer](#3-obtain-a-copy-of-the-quix-platform-byoc-installer-ansible-recipe--docker-image) (Ansible Recipe + Docker Image) -4. Run the [installer container](#4-run-the-installer-container) -5. [Prepare Secrets](#5-prepare-secrets-and-platform-configuration) and platform configuration +4. [Prepare Secrets](#5-prepare-secrets-and-platform-configuration) and platform configuration +5. Run the [installer container](#4-run-the-installer-container) 6. [Push Secrets](#6-push-secrets-and-platform-configuration-to-the-cluster) and platform configuration to the cluster 7. Optional: [Initialise ArgoCD](#7-optional-initialise-argocd) 8. [Install Quix Platform](#8-install-quix-platform) for the first time @@ -31,7 +31,13 @@ In this step you will be receiving a username / API token and docker registry UR Once you have an API key, you can download the installer from our private Container Registry. The installer is a Docker image that contains an Ansible recipe and all the required dependencies to run it. This way you don't need to install Ansible (and its particular Python version dependencies), Helm and all the other programs and libraries required to run the installer. We have packaged it all to offer a turn-key, convenient experience for you. -### 4. Run the installer container +### 4. Prepare Secrets and platform configuration + +A successful installation of the Quix Platform requires a few secrets and variables to be set. Secrets are used to store sensitive information about your Platform Installation. API keys, usernames, passwords for all the services, dependencies and integrations are stored in Secrets which the Installer will use to configure the Platform. By storing secrets in a Kubernetes native way we ensure that any subsequent successful installations of the Quix Platform do not depend on the machine used for installation. After a successful initialisation of the Secrets and Platform configuration, anyone with the correct permissions should be able to maintain the platform. + +If ArgoCD is used -- of which we supply an opinionated installation, if you choose to use it --, it will be able to utilise these secrets and configuration to maintain the platform. + +### 5. Run the installer container The container is built and tested with Docker. On any system capable of running Docker, you can run the installer with the following command: @@ -41,13 +47,7 @@ The container is built and tested with Docker. On any system capable of running This will run the Quix Platform Installer using the Quix Platform CLI tool provided to you ahead of the installation process. -![Quixplatform CLI](../../images/deploy/byoc/using-quixplatform-cli.jpg){width=80%} - -### 5. Prepare Secrets and platform configuration - -A successful installation of the Quix Platform requires a few secrets and variables to be set. Secrets are used to store sensitive information about your Platform Installation. API keys, usernames, passwords for all the services, dependencies and integrations are stored in Secrets which the Installer will use to configure the Platform. By storing secrets in a Kubernetes native way we ensure that any subsequent successful installations of the Quix Platform do not depend on the machine used for installation. After a successful initialisation of the Secrets and Platform configuration, anyone with the correct permissions should be able to maintain the platform. - -If ArgoCD is used -- of which we supply an opinionated installation, if you choose to use it --, it will be able to utilise these secrets and configuration to maintain the platform. +![Quixplatform CLI](../images/deploy/byoc/using-quixplatform-cli.jpg){width=80%} ### 6. Push Secrets and platform configuration to the cluster @@ -66,7 +66,7 @@ namespace=quix ``` As a general rule, commands and steps are designed to be idempotent wherever possible. This is also the case when manipulating secrets and platform configuration: any subsequent pushes that make no changes will look like this: -![Quixplatform CLI Config Push](../../images/deploy/byoc/push-variables.png){width=80%} +![Quixplatform CLI Config Push](../images/deploy/byoc/push-variables.png){width=80%} ### 7. Optional: Initialise ArgoCD Inside the installer container, run the following command: @@ -79,7 +79,7 @@ The following lines are of particular interest: targetRevision: staging path: releases/ ``` -These define what release 'train' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise in the `init-scripts/quix-version-filter.yaml` file. +These define what release 'stream' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise in the `init-scripts/quix-version-filter.yaml` file. ```bash @@ -89,6 +89,8 @@ init-scripts/init.sh ${argo_namespace} ${quix_namespace} This will initialise ArgoCD and create the Quix application in the namespace you specify. If you do not specify a namespace, it will default to `argocd` and `quix`. +!!! tip + You may host your own release repository to subscribe to with ArgoCD. This allows you to be in ultimate control of the entire release process. ### 8. Install Quix Platform @@ -104,4 +106,4 @@ or if ArgoCD is installed This will install the Quix Platform on your Kubernetes cluster. The installation process will take 3-5 minutes. The progress of the installation will be displayed as Ansible roles initialise and set up the various components and then the Quix Platform itself. -![Quixplatform Successful Installation](../../images/deploy/byoc/byoc-successful-install.png){width=80%} \ No newline at end of file +![Quixplatform Successful Installation](../images/deploy/byoc/byoc-successful-install.png){width=80%} \ No newline at end of file diff --git a/docs/deploy/byoc/overview.md b/docs/byoc/overview.md similarity index 100% rename from docs/deploy/byoc/overview.md rename to docs/byoc/overview.md diff --git a/docs/deploy/byoc/release-filtering.md b/docs/byoc/release-filtering.md similarity index 85% rename from docs/deploy/byoc/release-filtering.md rename to docs/byoc/release-filtering.md index 0d97b784..c417ed3e 100644 --- a/docs/deploy/byoc/release-filtering.md +++ b/docs/byoc/release-filtering.md @@ -6,8 +6,7 @@ ArgoCD does not natively support picking and choosing the parts of an applicatio A filter is a powerful tool you can use to determine what versions of our services or chart to accept or reject, based on multiple possible criteria. -We ship ArgoCD with our BYOC distribution, and if you should choose to deploy it, with it we provide the functionality to define what releases you accept. We recommend this for testing purposes or to comply with version constraints of your underlying infrastructure. - +Our BYOC distribution comes bundled with ArgoCD. If you decide to deploy it, you'll gain the ability to specify which releases are acceptable. This feature is particularly useful for testing or adhering to the version constraints of your underlying infrastructure. ## How do I use filters? @@ -51,7 +50,7 @@ auth: value: "1" ``` -Any release chart rejected because of the `platform_release` filter will cause the entire chart to be rejected. This means that if you reject a release because of the `platform_release` filter, the entire chart will be rejected, even if the `auth` filter would have accepted it. +Any release chart rejected because of the `platform_release` service matching a filter will cause the entire chart to be rejected. This happens even if the `auth` filter would have accepted the auth service otherwise. Platform_release supersedes individual service filters. A rejected service (or chart) will not be deployed to your environment either at the time of us pushing it to the branch your environment is subscribed to, or at the time of your environment syncing with the branch. If you wish to install a release anyway, you may at any time change your filter and manually sync your ArgoCD Quix application. diff --git a/docs/deploy/byoc/requirements.md b/docs/byoc/requirements.md similarity index 88% rename from docs/deploy/byoc/requirements.md rename to docs/byoc/requirements.md index eb08ed9e..34fba6aa 100644 --- a/docs/deploy/byoc/requirements.md +++ b/docs/byoc/requirements.md @@ -15,18 +15,18 @@ To ensure the success of the installation process, the following essential requi ## Kubernetes cluster minimum requirements - AMD64 architecture.[^1] -- Three nodes with at least 2 CPU cores and 16GB of RAM each[^2]. +- Multiple nodes with 6 cpu cores and 48GB RAM total.[^2]. - Kubernetes version 1.24.1 or later. - A container runtime capable of handling Linux containers, MongoDB and Kafka. (containerd, cri-o etc.) - A storage class capable of handling dynamic provisioning of Persistent Volumes. (nfs with nfs-subdir-external-provisioner, Ceph, Longhorn, EBS/EFS, azurefile, Google filestore, Isilon etc) - One standard RWX storage class and one standard RWO storage class. - The ability of exposing services outside of the Kubernetes cluster. (either LoadBalancer compatible Load Balancer or NodePorts) -- Network ingres and egress permissive enough for the kubelet to pull platform containers from the Quix Container Registry. +- Network ingress and egress permissive enough for the kubelet to pull platform containers from the Quix Container Registry. ## Kubernetes cluster recommended requirements - Everything in the minimum requirements - Three separate control plane nodes (or managed control plane) for high availability and easy maintenance. -- A nodepool sufficient for your requirements, but at least 16GB of RAM and 4 CPU cores each. +- A nodepool sufficient for your requirements, but at least 40 CPU cores and 200GB memory total. - Kubernetes version 1.28 or later. - Optional: Premium RWO storage class - A Load Balancer capable of exposing a LoadBalancer type service (such as AWS ELB or MetalLB) @@ -50,4 +50,4 @@ Follow the [installation](installation.md) process to find out how to install th We are excited about ARM64 cpus as well! They are fast becoming a serious contender for building distributed computational platforms, especially on AWS. Unfortunately, some of our dependencies are not yet available for aarch64 and therefore we are not able to ship Quix for aarch64 Kubernetes clusters. When we do, this document will change. You are welcome to run the installation scripts and the container delivering them on aarch64 computers from the native image. [^2]: - We recommend nodes at least 16GB of RAM each to err on the safe side. Quix has been tested on 3 x 8GB nodes and has been found to work well. This however leaves very little room for your other workloads and isn't an experience we wish for you to have with Quix. + We recommend nodes at least 16GB of RAM each node to err on the safe side. Quix has been tested on 3 x 8GB nodes and has been found to work well. This however leaves very little room for your other workloads and isn't a production experience we wish for you to have with Quix. diff --git a/docs/deploy/byoc/byoc-vs-cloud.md b/docs/deploy/byoc/byoc-vs-cloud.md deleted file mode 100644 index 82bb0da3..00000000 --- a/docs/deploy/byoc/byoc-vs-cloud.md +++ /dev/null @@ -1,29 +0,0 @@ -# When to choose Quix Brign Your Own Cloud Enterprise Edition? - -Our cloud offering is a great way to work with the Quix Platform for most use cases. Teams who do not have specific requirements regarding security or underlying infrastructure may choose to build on our cloud offering and scale it to meet their needs. BYOC goes one step further than cloud and offers you all the powers of the Quix Platform, along with the ability to control and scale the underlying services, infrastructure to fit your exact needs. - -| | Quix Cloud | Quix BYOC | -|----|----|----| -| Analyse data streams | Yes | Yes | -| Quickly deploy real-time apps | Yes | Yes | -| Iso 27001 certified | Yes | No[^1] | -| Data stored by you| No| Yes[^2]| -| On-prem cost savings| No | Possible[^3] | -| Consume cloud reservations | No | Possible[^3] | -| Bespoke Networking | No | Yes | -| Bespoke Storage | No | Yes | -| Private CA certificates | No | Yes | -| Can be scaled to your needs | Yes | Yes | - - - -[^1]: - The process of creating Quix Platform deliverables continues to be ISO 27001 certified. What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies. - -[^2]: - Exclusively. Quix BYOC Enterprise Editions are self-contained. _Only_ you store your data. - -[^3]: - Running your own infrastructure on your own premises (or co-located) tends to be more cost efficient than most cloud offerings. This is especially true if you have hardware requirements not easily fulfilled in the cloud including GPUs, FPGAs, very high-speed storage or networking, CPU architectures other than AMD64 and so on. If you know exactly what you're running and why, cloud tends to fall to second choice when deciding where to host your application, and Quix. - - The same is true for cloud reservations. If you have an existing preservation or other agreement with a cloud provider, you may want to choose running Quix yourself on capacity you already own. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 958c40ec..cfb9f13d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -81,12 +81,12 @@ nav: - 'YAML variables': 'deploy/yaml-variables.md' - 'State management': 'deploy/state-management.md' - 'Deploy public services': 'deploy/deploy-public-page.md' - - 'Bring your own cluster': - - 'Overview': 'deploy/byoc/overview.md' - - 'Requirements': 'deploy/byoc/requirements.md' - - 'Installation': 'deploy/byoc/installation.md' - - 'BYOC vs. Cloud': 'deploy/byoc/byoc-vs-cloud.md' - - 'Release filtering': 'deploy/byoc/release-filtering.md' + - 'Bring your own cluster': + - 'Overview': 'byoc/overview.md' + - 'Requirements': 'byoc/requirements.md' + - 'Installation': 'byoc/installation.md' + - 'BYOC vs. Cloud': 'byoc/byoc-vs-cloud.md' + - 'Release filtering': 'byoc/release-filtering.md' - 'Manage': - 'Overview': 'manage/overview.md' - 'Troubleshooting': 'manage/troubleshooting.md' From e88688ae83f7bf45e783ab9d256f45eb42c81e53 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Wed, 13 Dec 2023 23:24:47 +0000 Subject: [PATCH 3/6] Various fixes to ordering and linking - BYOC now placed at the bottom of the root-node of the menu - essentials unordered list was rendering incorrectly --- docs/byoc/installation.md | 6 +++--- docs/byoc/requirements.md | 1 + mkdocs.yml | 13 +++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/byoc/installation.md b/docs/byoc/installation.md index c474366d..b4658b22 100644 --- a/docs/byoc/installation.md +++ b/docs/byoc/installation.md @@ -7,8 +7,8 @@ The short story of deployment is as follows: 1. Create a [Kubernetes cluster](#1-create-a-kubernetes-cluster) 2. Obtain a Quix Container Registry [API key](#2-obtain-an-api-key-to-pull-quix-platform-containers) to pull Quix Platform containers 3. Obtain a copy of the Quix Platform [BYOC installer](#3-obtain-a-copy-of-the-quix-platform-byoc-installer-ansible-recipe--docker-image) (Ansible Recipe + Docker Image) -4. [Prepare Secrets](#5-prepare-secrets-and-platform-configuration) and platform configuration -5. Run the [installer container](#4-run-the-installer-container) +4. [Prepare Secrets](#4-prepare-secrets-and-platform-configuration) and platform configuration +5. Run the [installer container](#5-run-the-installer-container) 6. [Push Secrets](#6-push-secrets-and-platform-configuration-to-the-cluster) and platform configuration to the cluster 7. Optional: [Initialise ArgoCD](#7-optional-initialise-argocd) 8. [Install Quix Platform](#8-install-quix-platform) for the first time @@ -42,7 +42,7 @@ If ArgoCD is used -- of which we supply an opinionated installation, if you choo The container is built and tested with Docker. On any system capable of running Docker, you can run the installer with the following command: ```bash -./quixplatform container quix -V 1.1.1 +./quixplatform container quix -V 1.1.2 ``` This will run the Quix Platform Installer using the Quix Platform CLI tool provided to you ahead of the installation process. diff --git a/docs/byoc/requirements.md b/docs/byoc/requirements.md index 34fba6aa..8a156a89 100644 --- a/docs/byoc/requirements.md +++ b/docs/byoc/requirements.md @@ -8,6 +8,7 @@ The requirements are designed to ensure that the platform will run effectively a ## Essentials To ensure the success of the installation process, the following essential requirements must be fulfilled: + - For running the installer: A computer capable of running Linux containers. It may be either a physical or a virtual machine. This computer should run Linux, MacOS, or Windows (using Docker Desktop or WSL), and it may have either an aarch64 (arm64, Apple Silicon in most cases) or amd64 architecture. This will only be used to run the installation scripts. - For running the installer: A kubectl client that has already been configured to communicate with this cluster. This client must be able to communicate with the cluster from the computer running the installation scripts. - To run the platform: A Kubernetes cluster that has already been set up. diff --git a/mkdocs.yml b/mkdocs.yml index cfb9f13d..4788ac90 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -81,12 +81,7 @@ nav: - 'YAML variables': 'deploy/yaml-variables.md' - 'State management': 'deploy/state-management.md' - 'Deploy public services': 'deploy/deploy-public-page.md' - - 'Bring your own cluster': - - 'Overview': 'byoc/overview.md' - - 'Requirements': 'byoc/requirements.md' - - 'Installation': 'byoc/installation.md' - - 'BYOC vs. Cloud': 'byoc/byoc-vs-cloud.md' - - 'Release filtering': 'byoc/release-filtering.md' + - 'Manage': - 'Overview': 'manage/overview.md' - 'Troubleshooting': 'manage/troubleshooting.md' @@ -183,6 +178,12 @@ nav: - 'Quix Streams': - 'v0.5 (stable)': '!import https://github.com/quixio/quix-streams?branch=release/v0.5' - 'v2.0+ (latest)': '!import https://github.com/quixio/quix-streams?branch=main' + - 'Bring your own cluster': + - 'Overview': 'byoc/overview.md' + - 'Requirements': 'byoc/requirements.md' + - 'Installation': 'byoc/installation.md' + - 'BYOC vs. Cloud': 'byoc/byoc-vs-cloud.md' + - 'Release filtering': 'byoc/release-filtering.md' # Exclude build scripts from v2.0+ From 4ff7beb8495e1c1b156201f9f1457d5cc3d9f036 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Wed, 13 Dec 2023 23:41:53 +0000 Subject: [PATCH 4/6] Wording fix Small fix to wording in the byoc/cloud section --- docs/byoc/byoc-vs-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/byoc/byoc-vs-cloud.md b/docs/byoc/byoc-vs-cloud.md index 5257762f..35625121 100644 --- a/docs/byoc/byoc-vs-cloud.md +++ b/docs/byoc/byoc-vs-cloud.md @@ -4,7 +4,7 @@ Our cloud offering is a great way to work with the Quix Platform for most use ca BYOC goes one step further than cloud by offering all the powers of the Quix Platform, along with the ability to control and scale the underlying services, infrastructure to fit your needs. -When hosting your own Quix platform, you are in full control of how all parts operate. We provide safe and sane defaults, but it is ready to fit your exact use case. +When hosting your own Quix platform, you are in full control of how all its parts operate. We provide safe and sane defaults, but it is ready to be configured to fit your exact use case. | | Quix Cloud | Quix BYOC | |----|----|----| From 9fadd60fb9d091a86b8a364791429255e12e7e34 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Mon, 8 Jan 2024 14:58:58 +0000 Subject: [PATCH 5/6] Spelling and wording - Americanized most spellings - Wording tightened - Commas wrangled --- docs/byoc/byoc-vs-cloud.md | 18 +++++++++--------- docs/byoc/installation.md | 27 ++++++++++++++++----------- docs/byoc/overview.md | 8 ++++---- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/docs/byoc/byoc-vs-cloud.md b/docs/byoc/byoc-vs-cloud.md index 35625121..b682146c 100644 --- a/docs/byoc/byoc-vs-cloud.md +++ b/docs/byoc/byoc-vs-cloud.md @@ -8,11 +8,11 @@ When hosting your own Quix platform, you are in full control of how all its part | | Quix Cloud | Quix BYOC | |----|----|----| -| Analyse data streams | Yes | Yes | -| Quickly deploy real-time apps | Yes | Yes | -| Iso 27001 certified | Yes | No[^1] | -| Data stored by you| No| Yes[^2]| -| On-prem cost savings| No | Possible[^3] | +| Analyze data streams | Yes | Yes | +| Quickly deploy real-time apps | Yes | Yes | +| Iso 27001 certified | Yes | No[^1] | +| You store the data | No | Yes[^2] | +| On-premise cost savings| No | Possible[^3] | | Consume cloud reservations | No | Possible[^3] | | Bespoke Networking | No | Yes | | Bespoke Storage | No | Yes | @@ -22,14 +22,14 @@ When hosting your own Quix platform, you are in full control of how all its part [^1]: - The process of creating Quix Platform deliverables continues to be ISO 27001 certified. What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies. - - What this means is that the containers and services inside them you receive are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. Once you install them on your environment, they become part of your processes and fall under your data security policies and therefore may or may not be ISO (and ISO27001 specifically) compliant. + The process of creating Quix Platform deliverables continues to be ISO 27001 certified. This means that the containers and services inside them that you receive as part of the BYOC offering are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. + + Once you install them on your environment, they become part of your processes and fall under your data security policies, and therefore may or may not be ISO (and ISO27001 specifically) compliant. [^2]: Exclusively. Quix BYOC Enterprise Editions are self-contained. _Only_ you store your data. [^3]: - Running your own infrastructure on your premises (or in a co-location) is often more cost-efficient than most cloud offerings. This is particularly true if you have specific hardware requirements that are not easily met in the cloud, such as GPUs, FPGAs, ultra-high-speed storage or networking. However, for most use cases, Quix Cloud provides the best managed experience we offer. + Running your own infrastructure on your premises (or in a co-location) is often more cost-efficient than most cloud offerings. This is particularly true if you have specific hardware requirements that are not easily met in the cloud, such as GPUs, FPGAs, ultra-high-speed storage or networking. However, Quix Cloud provides the best managed experience we offer. You may choose to run Quix BYOC in your own cloud environment, consuming reservations or quotas established in prior agreements with cloud providers. This has the potential to lower your operational costs, while maintaining a cloud presence with Quix. \ No newline at end of file diff --git a/docs/byoc/installation.md b/docs/byoc/installation.md index b4658b22..f4738907 100644 --- a/docs/byoc/installation.md +++ b/docs/byoc/installation.md @@ -10,7 +10,7 @@ The short story of deployment is as follows: 4. [Prepare Secrets](#4-prepare-secrets-and-platform-configuration) and platform configuration 5. Run the [installer container](#5-run-the-installer-container) 6. [Push Secrets](#6-push-secrets-and-platform-configuration-to-the-cluster) and platform configuration to the cluster -7. Optional: [Initialise ArgoCD](#7-optional-initialise-argocd) +7. Optional: [Initialize ArgoCD](#7-optional-initialize-argocd) 8. [Install Quix Platform](#8-install-quix-platform) for the first time ## Step By Step @@ -29,13 +29,13 @@ In this step you will be receiving a username / API token and docker registry UR ### 3. Obtain a copy of the Quix Platform BYOC installer (Ansible Recipe + Docker Image) -Once you have an API key, you can download the installer from our private Container Registry. The installer is a Docker image that contains an Ansible recipe and all the required dependencies to run it. This way you don't need to install Ansible (and its particular Python version dependencies), Helm and all the other programs and libraries required to run the installer. We have packaged it all to offer a turn-key, convenient experience for you. +With the provided API key you can download the installer from our private Container Registry. The installer is a Docker image that contains an Ansible recipe and all the required dependencies to run it. This way you don't need to install Ansible (and its particular Python version dependencies), Helm and all the other programs and libraries required to run the installer. We have packaged it all to offer a turn-key, convenient experience. ### 4. Prepare Secrets and platform configuration A successful installation of the Quix Platform requires a few secrets and variables to be set. Secrets are used to store sensitive information about your Platform Installation. API keys, usernames, passwords for all the services, dependencies and integrations are stored in Secrets which the Installer will use to configure the Platform. By storing secrets in a Kubernetes native way we ensure that any subsequent successful installations of the Quix Platform do not depend on the machine used for installation. After a successful initialisation of the Secrets and Platform configuration, anyone with the correct permissions should be able to maintain the platform. -If ArgoCD is used -- of which we supply an opinionated installation, if you choose to use it --, it will be able to utilise these secrets and configuration to maintain the platform. +If ArgoCD is used -- of which we supply an opinionated installation, if you choose to use it --, it will be able to utilize these secrets and configuration to maintain the platform. ### 5. Run the installer container @@ -60,34 +60,39 @@ Then, from inside the Installer container started in step 4, run the following c ```bash namespace=quix -./secrets.sh encode platform-secrets-human.yaml platform-secrets.yaml -./secrets.sh push ${namespace} platform-secrets.yaml +./secrets.sh init vars/platform-secrets-human.yaml.template vars/platform-secrets-human.yaml +# Add your secrets to vars/platform-secrets-human.yaml +./secrets.sh encode vars/platform-secrets-human.yaml vars/platform-secrets.yaml +./secrets.sh push ${namespace} vars/platform-secrets.yaml ./quixplatform config ${namespace} -f vars/platform-variables.yaml ``` As a general rule, commands and steps are designed to be idempotent wherever possible. This is also the case when manipulating secrets and platform configuration: any subsequent pushes that make no changes will look like this: ![Quixplatform CLI Config Push](../images/deploy/byoc/push-variables.png){width=80%} -### 7. Optional: Initialise ArgoCD -Inside the installer container, run the following command: +### 7. Optional: Initialize ArgoCD +Run the following commands inside the installer container: Change values in `init-scripts/application.yaml.template` to meet your requirements. The following lines are of particular interest: ```yaml repoURL: '' - targetRevision: staging + targetRevision: stable path: releases/ ``` These define what release 'stream' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise in the `init-scripts/quix-version-filter.yaml` file. +Any release by us will have been put through our QA process and validated. That said, we operate multiple branches to allow testing leading-edge features on your test environments before they are added to the stable branch. + ```bash argo_namespace=argo +quix_namespace=quix init-scripts/init.sh ${argo_namespace} ${quix_namespace} ``` -This will initialise ArgoCD and create the Quix application in the namespace you specify. If you do not specify a namespace, it will default to `argocd` and `quix`. +This will initialize ArgoCD and create the Quix application in the namespace you specify. If you do not specify a namespace, it will default to `argocd` and `quix`. !!! tip You may host your own release repository to subscribe to with ArgoCD. This allows you to be in ultimate control of the entire release process. @@ -99,11 +104,11 @@ Inside the installer container, run the following command: ```bash ./quixplatform install ``` -or if ArgoCD is installed +or if ArgoCD is installed, but you want to manually trigger the installation: ```bash ./quixplatform install --context= ``` -This will install the Quix Platform on your Kubernetes cluster. The installation process will take 3-5 minutes. The progress of the installation will be displayed as Ansible roles initialise and set up the various components and then the Quix Platform itself. +This will install the Quix Platform on your Kubernetes cluster. The installation process will take 3-5 minutes. The progress of the installation will be displayed as Ansible roles initialize and set up the various components and then the Quix Platform itself. ![Quixplatform Successful Installation](../images/deploy/byoc/byoc-successful-install.png){width=80%} \ No newline at end of file diff --git a/docs/byoc/overview.md b/docs/byoc/overview.md index 6cff434e..61d63e6d 100644 --- a/docs/byoc/overview.md +++ b/docs/byoc/overview.md @@ -1,15 +1,15 @@ # Bring Your Own Cluster -BYOC is Quix packaged to run on your own Kubernetes cluster. Bring Your Own Cluster, control its resources and make them work efficiently by deploying Quix Platform to it. +BYOC is Quix, packaged to run on your own Kubernetes cluster. Bring Your Own Cluster, control its resources and make them work efficiently by deploying the Quix Platform to it. !!! Info "Glossary" **Kubernetes** is a container orchestration platform tailored to offer great flexibility and power. You can run Kubernetes on a variety of different computers ranging from your laptop to hundreds of Virtual Machine nodes in data centres distributed around the world. -The driving force behind the design of **Quix BYOC Enterprise Edition** was to enable the installation of the Quix Platform in as many different configurations of Kubernetes as technology allows. This enables us to offer Quix on a range of platforms, from minimal-viable clusters functioning as pilot projects on spare bare-metal hardware, to extensive production clusters managed within AKS, EKS, GCP, Proxmox, and similar environments. These advanced setups can include hundreds of CPU cores and terabytes of RAM, utilise container engines off the beaten path and provide storage through a multitude of means. +The driving force behind the design of **Quix BYOC Enterprise Edition** was to enable the installation of the Quix Platform in as many different configurations of Kubernetes as technology allows. This enables us to offer Quix on a range of platforms, from minimal-viable clusters functioning as pilot projects on spare bare-metal hardware, to extensive production clusters managed within AKS, EKS, GCP, Proxmox and similar environments. These advanced setups can include hundreds of CPU cores and terabytes of RAM, utilize container engines off the beaten path and provide storage through a multitude of means. -We have developed Quix BYOC to deliver a safe, opinionated default configuration, designed to ensure our platform operates effectively across a diverse range of Kubernetes cluster setups. Additionally, it's crafted for easy integration with existing components and technologies you currently employ and wish to continue using. +We have developed Quix BYOC to deliver a safe, opinionated default configuration, designed to ensure our platform operates effectively across a diverse range of Kubernetes cluster setups. Additionally, it is crafted for easy integration with existing components and technologies you currently employ and wish to continue using. -We have also made a conscious effort to ensure Quix works well with clusters that already run workloads. We do not require a dedicated empty cluster for Quix to run on, although you may want to consider this for proof-of-concept deployments. +We have also made a conscious effort to ensure Quix works well with clusters that already run workloads. We do not require a dedicated empty cluster for Quix to run on, although you may want to consider operating BYOC in its own environment for a variety of reasons. From bffd041af29a641e7e133addc3a52615d14c2055 Mon Sep 17 00:00:00 2001 From: Lajos Nagy Date: Mon, 8 Jan 2024 16:33:42 +0000 Subject: [PATCH 6/6] More spelling and wording changes. This is another attempt to further simplify and clarify the language used in BYOC documentation. --- docs/byoc/byoc-vs-cloud.md | 6 +++--- docs/byoc/installation.md | 4 ++-- docs/byoc/release-filtering.md | 2 +- docs/byoc/requirements.md | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/byoc/byoc-vs-cloud.md b/docs/byoc/byoc-vs-cloud.md index b682146c..d87b256d 100644 --- a/docs/byoc/byoc-vs-cloud.md +++ b/docs/byoc/byoc-vs-cloud.md @@ -12,7 +12,7 @@ When hosting your own Quix platform, you are in full control of how all its part | Quickly deploy real-time apps | Yes | Yes | | Iso 27001 certified | Yes | No[^1] | | You store the data | No | Yes[^2] | -| On-premise cost savings| No | Possible[^3] | +| On-premise cost savings | No | Possible[^3] | | Consume cloud reservations | No | Possible[^3] | | Bespoke Networking | No | Yes | | Bespoke Storage | No | Yes | @@ -24,12 +24,12 @@ When hosting your own Quix platform, you are in full control of how all its part [^1]: The process of creating Quix Platform deliverables continues to be ISO 27001 certified. This means that the containers and services inside them that you receive as part of the BYOC offering are built to stringent security standards. You can expect them to follow best industry practices and safe defaults. - Once you install them on your environment, they become part of your processes and fall under your data security policies, and therefore may or may not be ISO (and ISO27001 specifically) compliant. + Once you install them on your environment, they become part of your processes and fall under your data security policies. Therefore these software packages may or may not be ISO (and ISO27001 specifically) compliant when deployed outside of Quix Cloud. [^2]: Exclusively. Quix BYOC Enterprise Editions are self-contained. _Only_ you store your data. [^3]: - Running your own infrastructure on your premises (or in a co-location) is often more cost-efficient than most cloud offerings. This is particularly true if you have specific hardware requirements that are not easily met in the cloud, such as GPUs, FPGAs, ultra-high-speed storage or networking. However, Quix Cloud provides the best managed experience we offer. + Running your own infrastructure on your premises (or in a co-location) is often more cost-efficient than most cloud offerings. This is particularly true if you have specific hardware requirements that are not easily met in the cloud, such as GPUs, FPGAs, ultra-high-speed storage or networking. However, Quix Cloud remains the best managed experience we offer. You may choose to run Quix BYOC in your own cloud environment, consuming reservations or quotas established in prior agreements with cloud providers. This has the potential to lower your operational costs, while maintaining a cloud presence with Quix. \ No newline at end of file diff --git a/docs/byoc/installation.md b/docs/byoc/installation.md index f4738907..29ba3a34 100644 --- a/docs/byoc/installation.md +++ b/docs/byoc/installation.md @@ -81,9 +81,9 @@ The following lines are of particular interest: targetRevision: stable path: releases/ ``` -These define what release 'stream' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise in the `init-scripts/quix-version-filter.yaml` file. +These define what release 'stream' your environment is subscribed to. When running ArgoCD connected to our release branches, any updates we deploy to the repository your environment follows will be automatically applied, based on GitOps principles. There's a [little more to it](release-filtering.md), but generally speaking your environment will deploy the latest version of the platform, unless you specify otherwise. -Any release by us will have been put through our QA process and validated. That said, we operate multiple branches to allow testing leading-edge features on your test environments before they are added to the stable branch. +Any software package we release for the BYOC offering will have been put through our QA process and validated. That said, we operate multiple external branches to facilitate testing leading-edge features on your test environments before we add them to the stable branch. ```bash diff --git a/docs/byoc/release-filtering.md b/docs/byoc/release-filtering.md index c417ed3e..70790f15 100644 --- a/docs/byoc/release-filtering.md +++ b/docs/byoc/release-filtering.md @@ -12,7 +12,7 @@ Our BYOC distribution comes bundled with ArgoCD. If you decide to deploy it, you A Release filter is a Configmap containing a YAML file, which describes the conditions under which a release should be accepted or rejected. -By default the filter is empty, and your platform will deploy any release your platform subscribes to, to your environment automatically. +By default the filter is empty, and your platform will deploy any release to which your platform subscribes, to your environment automatically. The following example shows the various ways in which you may filter releases: ```yaml diff --git a/docs/byoc/requirements.md b/docs/byoc/requirements.md index 8a156a89..e351660a 100644 --- a/docs/byoc/requirements.md +++ b/docs/byoc/requirements.md @@ -29,13 +29,13 @@ To ensure the success of the installation process, the following essential requi - Three separate control plane nodes (or managed control plane) for high availability and easy maintenance. - A nodepool sufficient for your requirements, but at least 40 CPU cores and 200GB memory total. - Kubernetes version 1.28 or later. -- Optional: Premium RWO storage class +- Optional: additional Premium RWO storage class - A Load Balancer capable of exposing a LoadBalancer type service (such as AWS ELB or MetalLB) !!! warning - You may re-use existing services, such as Kafka and MongoDB. If you do not, Quix BYOC will install its own versions of these services. Your underlying infrastructure must be able to run these services, which may require enabling AVX, AVX2 and XSAVE instructions on your CPU, or passed through for it in the Hypervisor. This is not a default in some hypervisors and may be the source of issues. + You may re-use existing services, such as Kafka and MongoDB. If you do not, Quix BYOC will install its own versions of these services. Your underlying infrastructure must be able to run these services, which may require enabling AVX, AVX2 and XSAVE instructions on your CPU, or passed through for it in the Hypervisor. This is not the default in some hypervisors and may be the source of issues. ## Support requirements @@ -48,7 +48,7 @@ Follow the [installation](installation.md) process to find out how to install th [^1]: - We are excited about ARM64 cpus as well! They are fast becoming a serious contender for building distributed computational platforms, especially on AWS. Unfortunately, some of our dependencies are not yet available for aarch64 and therefore we are not able to ship Quix for aarch64 Kubernetes clusters. When we do, this document will change. You are welcome to run the installation scripts and the container delivering them on aarch64 computers from the native image. + We are excited about ARM64 CPUs as well! They are fast becoming a serious contender for building distributed computational platforms, especially on AWS. Unfortunately, some of our dependencies are not yet available for aarch64 and therefore prevent us from shipping Quix for aarch64 Kubernetes clusters. When we do, this document will change. You are welcome to run the installation scripts and the container delivering them on aarch64 computers from the native multi-arch image. [^2]: We recommend nodes at least 16GB of RAM each node to err on the safe side. Quix has been tested on 3 x 8GB nodes and has been found to work well. This however leaves very little room for your other workloads and isn't a production experience we wish for you to have with Quix.