Install Ryax on Kubernetes¶
We assume that you are comfortable with Kubernetes. To keep this guide short, we leave out details on the Kubernetes commands.
Requirements¶
All you need to install Ryax is a Kubernetes cluster and Docker installed on your machine. You can get a managed Kubernetes instance from any Cloud provider. For a local development installation please refers the Getting Started Guide.
Supported Kubernetes versions:
kubernetes > 1.19
Hardware:
At least 2 CPU core
4GB or memory
40GB of disk available
Note that depending on the Actions that you run on your cluster you might need more resources.
Preparatory Steps¶
Make sure your configuration point to the intended cluster:
kubectl config current-context
.Your Kubernetes cluster dedicated to Ryax: we offer no guarantee that Ryax runs smoothly alongside other applications.
Make sure you have complete admin access to the cluster. Try to run
kubectl auth can-i create ns
orkubectl auth can-i create pc
, for instance.$ kubectl auth can-i create ns Warning: resource 'namespaces' is not namespace scoped yes
Have access to a DNS server where you can add a new
A
orCNAME
entry for your cluster.
Configure your Installation¶
Installing Ryax is analogous to installing a Helm chart. To begin we will start with a default configuration, and make a few tweaks so that everything is compatible with your Kubernetes provider. Be assured however that you will be able to fine-tune your installation later on.
Warning
Special warning for EKS (AWS Elastic Kubernetes Service)
Ryax requires persistent storage and by default, EKS does not provide any storage driver. Please, install the EBS CSI plugin with:
cluster_name=<My cluster name>
AWS_ACCOUNT_ID=<My AWS account id e.g. 111122223333>
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster $cluster_name \
--role-name AmazonEKS_EBS_CSI_DriverRole \
--role-only \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve
eksctl utils associate-iam-oidc-provider --cluster=$cluster_name --approve
eksctl create addon --name aws-ebs-csi-driver --cluster $cluster-name --service-account-role-arn arn:aws:iam::$AWS_ACCOUNT_ID:role/AmazonEKS_EBS_CSI_DriverRole --force
See the the official documentation for more details.
Also be aware that you cannot use Fargate because it does not support persistent storage
Initialize¶
First create a directory to organize the Ryax installation and initialize it with the default configuration:
mkdir ryax_install
cd ryax_install
docker run \
-v $PWD:/data/volume \
ryaxtech/ryax-adm:latest init --values volume/values.yaml
You are now in the ryax_install
folder and the values.yaml
containing the
default config was created.
Note
All the following commands assume that you are in the ryax_install directory.
To explain the configuration fields, here is an example of simple configuration file for Ryax:
# The Ryax version
version: 24.06.0
# Cluster DNS
clusterName: myclustername
domainName: example.com
# Log level for all Ryax services
logLevel: info
# Set the storage size for each stateful service
datastore:
pvcSize: 10Gi
minio:
pvcSize: 40Gi
registry:
pvcSize: 20Gi
# Enable Prometheus + Grafana monitoring
monitoring:
enabled: true
# Use HTTPS by default
tls:
enabled: true
# Automate HTTPS with Let's Encrypt
certManager:
enabled: false
# Depends on your Kubernetes instance. Leave it empty to use the default
storageClass: ""
The Ryax installation is based on Helm charts, one for each service with a helmfile
to define the whole cluster configuration.
To customize your installation. You can set any configuration field using the values
keyword. A detailed description of all the values can be found in ryax-adm/helm-charts/values.yaml.
Settings¶
Set the version
field with the Ryax version, for example: 23.10.0
. The latest stable version can be found in the releases page.
The clusterName
and domainName
defines the name you give to your cluster, which is used in various places. One of those places is the URL of your cluster that will be <clusterName>.<domainName>, therefore it has to be consistent with your DNS.
If you do not intend to configure a DNS cluster, just leave this to the default value and disable the certManager, and in this case be aware you will access Ryax through the IP address directly and https certificate will be self-signed.
Warning
Depending on your Kubernetes cluster setup, you might have issue with Cert Manager which is use to get a valid HTTPS certificate. See the Cert Manager compatibility documentation for more details.
If you want to deal with the certificate yourself, you can disable it with:
certManager:
enabled: false
An important configuration is the storageClass
. If not set, Ryax will use the
default one provided by the Kubernetes cluster for all services. But, the
volumes are used to store the internal database (datastore
), object store for
workflows IO (filestore
), and a container registry for the Ryax Actions
containers (registry
) which all affect your Ryax instance performance, so it
is recommended to have SSD backed storage for all services to avoid delays
state persistence, deployments, and runs.
For more fine grained settings you can set each storage class independently
with the storageClass
inside each service.
Regarding the volume size, we recommend that you start small, you can extend them later
on with most Storage providers. The default values give comfortable volume sizes to start working on the platform.
Install Ryax¶
First, be sure that your Kubernetes context is set properly. Make sure that either your KUBECONFIG
variable is set and point to you cluster, or that the ~/.kube/config
file contains you cluster configuration. See Preparatory steps to check you cluster access.
Warning
Depending on the Cloud provider you are using you might have to mount its configuration inside the container. For the following providers add the associated option:
Microsoft Azure:
-v $HOME/.azure:/root/.azure
Google Cloud:
-v $HOME/.config/gcloud:/root/.config/gcloud
AWS:
-v $HOME/.aws:/root/.aws
Once you have customized your configuration you can install Ryax on your cluster (don’t forget to add extra option, see previous warning):
docker run \
-v $PWD:/data/volume \
-v $HOME/.kube/config:/data/kubeconfig.yml \
ryaxtech/ryax-adm:latest apply --values volume/values.yaml --suppress-diff
Note
Optionally you can populate your cluster with some first action to use in your workflows (don’t forget to add extra option, see previous warning):
docker run \
-v $PWD:/data/volume \
-v $HOME/.kube/config:/data/kubeconfig.yml \
--entrypoint=helm \
ryaxtech/ryax-adm:latest \
upgrade --install ryax-init ./helm-charts/ryax-init -n ryaxns
If the installation fails, check the logs, check your configuration and try again. If you are lost, or have any questions, please join our Discord server. We will be happy to help!
Configure your DNS¶
The last step is configuring your DNS so that you can connect to your cluster. The address you should register is <clusterName>.<domainName>.
To retrieve the external IP of your cluster, run this one-liner
kubectl -n kube-system get svc traefik -o jsonpath='{.status.loadBalancer.ingress[].ip}'
# OR dpending on your provider
kubectl -n kube-system get svc traefik -o jsonpath='{.status.loadBalancer.ingress[].hostname}'
Or simply look at the response of kubectl -n kube-system get svc traefik
, under “External IP”.
Depending on your Cloud provider you will have an IP address which requires a A
entry, or a DNS (AWS) that requires you to create a CNAME
entry.
Once your entry is created, and only if tls is enabled, you will have to wait for Let’s Encrypt to provide you a valid certificate. You can check with:
kubectl get certificates -n ryaxns
The state should be READY: true
.
Access to your cluster¶
Now you can access to you cluster with https://<clusterName>.<domainName>
on your web browser.
Default credentials are user1/pass1
Warning
Change this password and user as soon as you’re logged in!
Cluster Update¶
The Ryax configuration is declarative, so in order to update your cluster you just have to change the configuration and apply it.
Note
You need to configure your Kubernetes cluster access and to set the Cloud provider specific otions, see installation process for more details.
The Ryax configuration is stored as a secret inside your cluster after each successful apply. You can get the actual cluster configuration from the cluster itself with:
docker run \
-v $PWD:/data/volume \
-v $HOME/.kube/config:/data/kubeconfig.yml \
ryaxtech/ryax-adm:latest init --from-cluster --values volume/ryax_values.yaml
Warning
Before any updates, do a backup <./create-backups.html> and have a look at the changelog to see if there is any extra step needed.
Now you can simply change the version
field in the configuration before applying the configuration like in the installation steps described above.