Setup Vitistack operators
Components:
- CRDS
- webhook conversion
- Vitistack-operator
- Static-ip-operator
- Manual-ip-provisioning-operator
- Kubevirt-operator
- Talos-operator
Cluster prerequisites
Cert manager helm installation if not NHN-tooling is installed:
helm repo add jetstack https://charts.jetstack.io --force-update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.20.2 \
--set crds.enabled=true
Helm Installation
The following sections describe manual installation of each component using Helm CLI.
The objects of Vitistack
- Control Plane Virtial Shared IP
- Etcd Backup
- Kubernetes Cluster
- Kubernetes Provider
- Kubevirt Config
- Machine
- Machine Class
- Machine Provider
- Network Configuration
- Network Namespace
- Proxmox Config
- Vitistack
Create the vitistack namespace
kubectl create namespace vitistack
CRDS:
Helm install
helm install vitistack-crds oci://ghcr.io/vitistack/helm/crds \
--namespace vitistack \
--create-namespace \
--version 1.0.0-alpha07
Chart default values: https://github.com/vitistack/common/blob/main/charts/vitistack-crds/values.yaml
Helm upgrade
helm upgrade --install vitistack-crds oci://ghcr.io/vitistack/helm/crds -n vitistack --reset-then-reuse-values --version 1.0.0-alpha07
Machineclasses:
Prerequisites
create machineclasses in a machineclasses folder, e.g.:
apiVersion: vitistack.io/v1alpha1
kind: MachineClass
metadata:
name: small
spec:
displayName: Small
description: Small instance with 4 cores and 8Gi memory
enabled: true
default: true
category: Standard
cpu:
cores: 4
sockets: 1
threads: 1
memory:
quantity: 8Gi
machineProviders: []
apiVersion: vitistack.io/v1alpha1
kind: MachineClass
metadata:
name: medium
spec:
displayName: Medium
description: Medium instance with 4 cores and 16Gi memory
enabled: true
default: true
category: Standard
cpu:
cores: 4
sockets: 1
threads: 1
memory:
quantity: 16Gi
machineProviders: []
apiVersion: vitistack.io/v1alpha1
kind: MachineClass
metadata:
name: large
spec:
displayName: Large
description: Large instance with 8 cores and 24Gi memory
enabled: true
default: true
category: Standard
cpu:
cores: 8
sockets: 1
threads: 1
memory:
quantity: 24Gi
machineProviders: []
Apply machineclasses
kubectl apply -f <folder with all machine classes>
Vitistack-operator:
Initial install
helm install vitistack-operator oci://ghcr.io/vitistack/helm/vitistack-operator -n vitistack \
--create-namespace \
--set name="no-central-az1" \
--set description="Vitistack Availability Zone 1" \
--set region="central" \
--set country="no" \
--set zone="az1" \
--set infrastructure="test"
Chart default values: https://github.com/vitistack/vitistack-operator/blob/main/charts/vitistack-operator/values.yaml
Upgrade
helm upgrade --install vitistack-operator oci://ghcr.io/vitistack/helm/vitistack-operator -n vitistack --reset-then-reuse-values
Static-ip-operator:
Handles static IP allocation for NetworkNamespaces with spec.ipAllocation.type: static.
Chart package: https://github.com/vitistack/static-ip-operator/pkgs/container/helm%2Fstatic-ip-operator
Initial install
helm install vitistack-static-ip-operator oci://ghcr.io/vitistack/helm/static-ip-operator \
--create-namespace \
--namespace vitistack \
--version 0.1.0-alpha06
Chart default values: https://github.com/vitistack/static-ip-operator/blob/main/charts/static-ip-operator/values.yaml
Upgrade
helm upgrade --install vitistack-static-ip-operator oci://ghcr.io/vitistack/helm/static-ip-operator -n vitistack --reset-then-reuse-values --version 0.1.0-alpha06
Manuel-ip-provisioning-operator:
Initial install
helm install vitistack-manual-ip-provisioning-operator oci://ghcr.io/vitistack/helm/manual-ip-provisioning-operator \
--namespace vitistack \
--version 0.1.0-alpha02
Chart default values: https://github.com/vitistack/nms-operator/blob/main/charts/nms-operator/values.yaml
Upgrade
helm upgrade --install vitistack-manual-ip-provisioning-operator oci://ghcr.io/vitistack/helm/manual-ip-provisioning-operator -n vitistack --reset-then-reuse-values --version 0.1.0-alpha02
KubeVirt-operator:
Prerequisites:
- kubevirtconfig
- Static-IP node networking on every KubeVirt node:
- a Linux bridge named
br0with an uplink to the L2 segment the static range lives on (the VLAN/segment from yourNetworkNamespace), - Multus installed and not disabled by the primary CNI (e.g. Cilium: set
cni.exclusive=false). kubevirt-operator creates aNetworkAttachmentDefinition(bridge-br0, orvlan<id>whenvlanIdis set) and attaches each VM through it.
You do not create a MachineProvider by hand — kubevirt-operator registers it automatically from the matching
KubevirtConfigon startup.
kubectl create secret generic kubevirt-provider -n vitistack --from-file=kubeconfig=<path to kubevirt kubeconfig file>`
Filename: kubevirtconfig.yaml
apiVersion: vitistack.io/v1alpha1
kind: KubevirtConfig
metadata:
name: kubevirt-provider
spec:
name: kubevirt-provider
secretNamespace: vitistack
kubeconfigSecretRef: kubevirt-provider
kubectl apply -f kubevirtconfig.yaml -n vitistack
Initial install
helm install vitistack-kubevirt-operator oci://ghcr.io/vitistack/helm/kubevirt-operator -n vitistack \
--create-namespace \
--set storageClassName=longhorn \
--set storageClassNameIso=longhorn \
--set ipSource=networkconfiguration \
--version 0.1.0-alpha04
Chart default values: https://github.com/vitistack/kubevirt-operator/blob/main/charts/kubevirt-operator/values.yaml
Upgrade
helm upgrade --install vitistack-kubevirt-operator oci://ghcr.io/vitistack/helm/kubevirt-operator -n vitistack --reset-then-reuse-values --version 0.1.0-alpha04
Talos-operator
You could add an configmap talos config template for you customization, other CNI, installing extra manifests, etc
configmap
Filename: talos-tenant-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: talos-tenant-config
data:
config.yaml: |
---
machine:
kubelet:
extraArgs:
rotate-server-certificates: true
features:
hostDNS:
enabled: true
forwardKubeDNSToHost: true
kubePrism:
enabled: true
port: 7445
cluster:
apiServer:
admissionControl:
- name: PodSecurity
configuration:
exemptions:
namespaces:
- argocd
network:
cni:
name: flannel
podSubnets:
- 100.124.0.0/16
- 2001:db8:124::/56
serviceSubnets:
- 100.120.0.0/16
- 2001:db8:120::/112
proxy:
disabled: true
discovery:
enabled: false
extraManifests:
- https://raw.githubusercontent.com/alex1989hu/kubelet-serving-cert-approver/main/deploy/standalone-install.yaml
- https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
---
apiVersion: v1alpha1
kind: LinkAliasConfig
name: net0 # Alias for the link.
# Selector uses CEL expression to match the physical link by its MAC address.
# #MACADDRESS# is replaced per-node with the actual MAC from Machine.Status.NetworkInterfaces.
selector:
# match: mac(link.permanent_addr) == "#MACADDRESS#"
match: "true"
---
apiVersion: v1alpha1
kind: LinkConfig
name: net0 # Name of the link (interface).
mtu: 1500
---
apiVersion: v1alpha1
kind: DHCPv4Config
name: net0
clientIdentifier: mac
kubectl apply -f talos-tenant-configmap.yaml -n vitistack
Initial install
helm install vitistack-talos-operator oci://ghcr.io/vitistack/helm/talos-operator -n vitistack \
--create-namespace \
--set tenant.configMapName=talos-tenant-config \
--set tenant.configMapNamespace=vitistack \
--set bootImageSource=bootimage \
--set endpointMode=talosvip \
--set loadBalancerProvider=static-ip-operator \
--version 0.2.0-alpha01
Chart default values: https://github.com/vitistack/talos-operator/blob/main/charts/talos-operator/values.yaml
Upgrade version:
helm upgrade --install vitistack-talos-operator oci://ghcr.io/vitistack/helm/talos-operator -n vitistack --version 0.2.0-alpha01 --reset-then-reuse-values