Kubernetes¶
Sunet offers Kubernetes as a service to all customers. Kubernetes is an open-source container orchestration system for deploying, scaling, and managing containerized applications across a cluster of machines.
Introduction¶
Sunet's Kubernetes service is designed to be accessible to researchers across all experience levels with containerization. It follows industry-standard GitOps principles using ArgoCD, letting you manage applications and infrastructure declaratively through Git repositories.
Ordering¶
Order the service via the Sunet website. When ordering, specify:
- Initial cluster size (small, medium, large, XL)
- Initial users
- Whether ArgoCD should run on a sunet.se subdomain or your own custom domain
- Any optional add-ons you want to include (block storage, object storage, backup and disaster recovery, DNS management API)
If you choose a custom domain, you'll need to set up a CNAME record pointing to the cluster's ingress controller. We'll then provision the cluster with Gateway API, ArgoCD, and cert-manager, and deliver credentials to your team.
What's Always Included¶
- A managed Kubernetes cluster sized to your specification
- ArgoCD for GitOps-based application and infrastructure management
- Gateway API for ingress traffic
- cert-manager for TLS certificates
- External load balancing, with routing handled by the Gateway API
- A DNS name (sunet.se subdomain or your custom domain)
- Regular maintenance and updates to the underlying infrastructure
Optional Add-ons¶
Optional services are billed in addition to the base cluster cost.
- Block storage as persistent volumes - billed at standard block storage rates.
- S3-compatible object storage - billed at standard object storage rates.
- Backup and disaster recovery via Velero, with regular backup schedules. Storage is billed at standard object storage rates based on backup volume and retention. We'll work with you to determine the right backup strategy for your applications.
- DNS management API for automating DNS record creation and updates. This is currently free of charge, but we reserve the right to introduce pricing if demand grows significantly.
Getting Started¶
Once your order is complete, you'll receive a kubeconfig file with
everything needed to connect: API server endpoint, authentication
credentials, and configuration details. Use it with kubectl or any
other Kubernetes tooling.
Your account is scoped via RBAC to the argocd namespace, where you
manage applications and resources through ArgoCD. Other namespaces and
cluster-wide resources remain isolated for security.
Credentials are delivered via PGP-encrypted email to all users specified
in the order, unless otherwise agreed. Make sure your team has kubectl
and a PGP client ready before delivery.
GitOps with ArgoCD¶
To use GitOps you'll need a Git repository - GitHub, GitLab, Codeberg, or any other host - containing YAML files that describe your cluster's desired state. ArgoCD continuously monitors the repository and applies changes automatically, keeping the cluster in sync.
You can configure ArgoCD to:
- Watch specific branches or directories - useful for managing multiple applications or environments from a single repository.
- Require signed commits before applying changes, adding an extra layer of authorization.
Namespaces¶
Although your kubectl access is scoped to the argocd namespace,
ArgoCD itself runs with the permissions needed to create and manage
resources elsewhere in the cluster. To deploy into another namespace,
commit an Application (or ApplicationSet) manifest to your Git
repository that targets the destination namespace; ArgoCD will create
the namespace if it doesn't already exist (using
syncOptions: CreateNamespace=true) and deploy your resources into it.
High Availability and Scalability¶
Design your applications to take advantage of Kubernetes' availability and scaling features: Deployments, StatefulSets, multiple replicas, and Horizontal Pod Autoscaling. Keep applications stateless and use external storage for persistent data so they can scale and recover gracefully. The Twelve-Factor App methodology is a solid starting point.
Sunet handles maintenance and rolling updates of the underlying infrastructure without prior notice. We never perform updates that bring down the entire cluster, but individual nodes may briefly restart during the process - your applications need to handle this.
Pod Disruption Budgets and the rolling-restart contract¶
Kubernetes lets you protect workloads from voluntary disruption with a
PodDisruptionBudget (PDB). PDBs are useful, but the platform reserves
the right to drain any node at any time for maintenance - and drain
must be able to succeed. A PDB that can never let a pod be evicted
will block the entire cluster's maintenance schedule.
Not allowed - these PDBs cannot tolerate eviction and will be treated as a configuration error during maintenance windows:
# A single-replica Deployment + minAvailable: 1.
# Eviction is never allowed; drain fails forever.
apiVersion: apps/v1
kind: Deployment
metadata: {name: my-app}
spec:
replicas: 1
...
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata: {name: my-app}
spec:
minAvailable: 1
selector: {matchLabels: {app: my-app}}
Recommended patterns:
# Multi-replica + relative budget - drain can take one pod at a time.
spec:
replicas: 3
---
spec:
maxUnavailable: 1 # or minAvailable: 2
# Single-replica workload that genuinely cannot be HA (legacy app etc.):
# omit the PDB entirely. The pod will be restarted on another node
# during drain; expect a brief outage. Use a readiness probe so
# traffic stops before the pod is killed.
If you operate a stateful workload that requires multiple replicas to
remain available (a database with quorum, for example), set the PDB to
maxUnavailable: 1 against an N≥3 StatefulSet. That tolerates drain
and protects the quorum.
Summary: every workload on the platform must be drain-tolerant. Either run multiple replicas with a PDB that allows at least one disruption, or accept eviction on a single replica with no PDB. PDBs that block all eviction are not supported.
Secrets Management¶
We recommend Sealed Secrets for managing sensitive data. It encrypts secrets so they can be safely committed to a Git repository - only your cluster can decrypt them.
Load Balancing and Gateway API¶
External traffic is handled by an external load balancer, with the Gateway API routing requests to services inside the cluster based on hostname or path. In practice, your external services use a CNAME record pointing to the load balancer.
Your cluster gets a DNS name as a sunet.se subdomain, or you can use a custom domain (just point a CNAME record at the load balancer).
We can also provide a DNS management API to automate record creation and updates - particularly useful for large deployments or frequent DNS changes. To use this with a custom domain, delegate the zone to Sunet by updating your domain's NS records to point to our nameservers.
Backup and Disaster Recovery¶
Backup and disaster recovery is an optional service. If you don't order it, you're responsible for backing up your own applications and data - for example with Velero for Kubernetes resources and persistent volumes. Establish backup schedules and test recovery procedures regularly.
If you use Sunet's S3-compatible object storage or block storage for application data, note that these services are not backed up by default. Plan your own backup strategy accordingly.