Repository navigation
feat: Profile for AKS - #161
AdminTurnedDevOps wants to merge 10 commits into
Conversation
Add a profile field to the install config and a --profile flag on install, upgrade and uninstall. generic keeps the current behavior. aks adds an aks section. Its acr field pulls every image install deploys from an Azure Container Registry: it sets global.imageRegistry on the charts and renames the bundled PostgreSQL image. The wizard asks for the cluster type unless --profile is given. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
An AKS cluster created without --network-policy accepts NetworkPolicy objects and ignores them, which leaves the ate-system policies and the per-WorkerPool policies without effect. With profile: aks, install and upgrade now fail unless a cilium, azure-npm or calico-node DaemonSet exists. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
storageClass sets the StorageClass of the bundled PostgreSQL and RustFS volumes, which otherwise use the cluster's default. The substrate chart gets a rustfs.storageClassName value for it. On AKS the wizard suggests managed-csi-premium. An existing PostgreSQL keeps its StorageClass, since a StatefulSet's volumeClaimTemplates can't change. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
aks.nodePool restricts atelet to one node pool through its kubernetes.azure.com/agentpool label. Install checks that the pool has nodes, and with microvm enabled, that one of them advertises ate.dev/kvm, which needs a VM size with nested virtualization. WorkerPools need the same node selector, and install prints a note saying so. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
aks.acrCredentialProvider lets atelet pull actor images from Azure Container Registry. atelet runs the node's acr-credential-provider with the kubelet's own config. The provider reads /etc/kubernetes/azure.json, which the charts now mount through a new atelet.imageCredentialProviderHostFiles value. It is off by default, since atelet can then pull from every registry the kubelet identity can. With profile aks, turning it off resets those values, so an earlier install's access goes away. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
otelEndpoint points atelet and the control plane at an existing OTLP collector by setting otel.endpoint on the atelet and substrate releases. The wizard asks for it. Install doesn't deploy a collector. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
aks.managedPrometheus has Azure Managed Prometheus scrape atelet and the control plane. It enables a new podMonitors chart value with the azmonitoring.coreos.com/v1 API. The charts then render PodMonitors for the /metrics endpoints of atelet, ate-api-server, ate-controller, atenet-router and atenet-egress. Preflight fails if the cluster doesn't serve that API. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
Install's cluster check only looked for podcertificaterequests in certificates.k8s.io/v1beta1. Kubernetes 1.37 clusters like AKS serve it only at v1, so install failed there, though the certificate controller already prefers v1. The check now accepts either version. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
1ad05c9 to
e8a1d5d
Compare
| # Other host files the providers read, mounted read-only at the same path | ||
| # (AKS: /etc/kubernetes/azure.json). | ||
| imageCredentialProviderHostFiles: [] |
There was a problem hiding this comment.
Can we just expose extra volumes + extra volume mounts for this?
| limitations under the License. | ||
| */}} | ||
|
|
||
| {{- /* atelet's PodMonitor is in atelet.yaml, so substrate-atelet renders it too. */}} |
There was a problem hiding this comment.
Atelet should be installed via substrate-atelet chart. this is just here for compatibility for one release
There was a problem hiding this comment.
The substrate chart's atelet template is back to upstream's version, and extraVolumes/extraVolumeMounts and the atelet PodMonitor are now only in substrate-atelet.
| # Other host files the providers read, mounted read-only at the same path | ||
| # (AKS: /etc/kubernetes/azure.json). | ||
| imageCredentialProviderHostFiles: [] |
|
Thanks for this. Direction I'd like: a profile is just a well-known install config file that we embed, and So for AKS:
Could you also split out the generic pieces as their own PRs first: the PodCertificateRequest v1 fix, Comment left by Claude on behalf of @EItanya |
|
@EItanya Gotcha, makes sense! So you're thinking more of like a config file/YAML that someone points to with the specific configs they need for the cluster they're targeting vs having it has a flag/sub-command like |
atelet.extraVolumes and atelet.extraVolumeMounts add any volume to the atelet pod, so the charts don't need a value just for credential provider files. With aks.acrCredentialProvider on, install now mounts /etc/kubernetes/azure.json through them, after any the config sets. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
The substrate chart's atelet template stays only for one release, for compatibility. It goes back to upstream, and atelet.extraVolumes, atelet.extraVolumeMounts and the atelet PodMonitor stay in the substrate-atelet chart. The installer already installs atelet with that chart. Signed-off-by: adminturneddevops <mlevan1992@gmail.com>
|
Sort of, i was imagining profiles are just shortcuts for a well known set of yaml configs that we bake in at build time. Like istioctl |
@EItanya - let me know if you like this approach to simplifying the profiles:
|
|
We shouldn't need |
Are you saying it shouldn't be a key inside the config file? If so, the workflow would be that the profile is chosen by |
Resolves #160
The goal is a universal installer.
As people use the universal installer, however, they will need the ability to specify certain configurations for where they are installing. For example, if someone is installing on Azure Kubernetes Service (AKS), they may want to point to Azure Container Registry (ACR) or managed grafana (it's the primary monitoring option when you're creating an AKS cluster).
Therefore, the Profiles feature works if you want to have specific configurations for certain cluster types (like AKS).
Right now, this is just for AKS. However, if the proposed design/architecture is approved, we can use it as a "standard" to create profiles for other types of clusters as well (GKE, EKS, etc.).
2026-11-08_16-53-25.mp4
This PR also contains a fix for the installer.