Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply Add-Ons again after cluster upgrade #208

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
89 changes: 89 additions & 0 deletions providers/docker/scs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Cluster Stacks

## Getting started

```sh
# Create bootstrap cluster
echo "
---
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
ipFamily: dual
nodes:
- role: control-plane
extraMounts:
- hostPath: /var/run/docker.sock
containerPath: /var/run/docker.sock" | kind create cluster --config -

# Init Cluster API
export CLUSTER_TOPOLOGY=true
export EXP_CLUSTER_RESOURCE_SET=true
export EXP_RUNTIME_SDK=true
clusterctl init --infrastructure docker

kubectl -n capi-system rollout status deployment
kubectl -n capd-system rollout status deployment

# Install CSO and CSPO
helm upgrade -i cso \
-n cso-system \
--create-namespace \
oci://registry.scs.community/cluster-stacks/cso \
--set clusterStackVariables.ociRepository=registry.scs.community/kaas/cluster-stacks

kubectl create namespace cluster
```

clusterstack.yaml

```yaml
apiVersion: clusterstack.x-k8s.io/v1alpha1
kind: ClusterStack
metadata:
name: docker
namespace: cluster
spec:
provider: docker
name: scs
kubernetesVersion: "1.30"
channel: custom
autoSubscribe: false
noProvider: true
versions:
- v0-sha.rwvgrna
```

Check if ClusterClasses exist

```sh
kubectl get clusterclass -n cluster
```

cluster.yaml

```yaml
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: docker-testcluster
namespace: cluster
labels:
managed-secret: cloud-config
spec:
topology:
class: docker-scs-1-30-v0-sha.rwvgrna
controlPlane:
replicas: 1
version: v1.30.10
workers:
machineDeployments:
- class: default-worker
name: md-0
replicas: 1
```

```sh
clusterctl get kubeconfig -n cluster docker-testcluster > /tmp/kubeconfig
kubectl get nodes --kubeconfig /tmp/kubeconfig
```
4 changes: 4 additions & 0 deletions providers/docker/scs/cluster-addon-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
values: |
metrics-server:
commonLabels:
domain: "{{ .Cluster.spec.controlPlaneEndpoint.host }}"
6 changes: 6 additions & 0 deletions providers/docker/scs/cluster-addon/cni/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: cilium
repository: https://helm.cilium.io/
version: 1.16.6
digest: sha256:e6a746a27a71acab49c5d54cba2d37eed32e04f8b74af5651e2266ae251c55d8
generated: "2025-02-13T12:55:17.200292016+01:00"
10 changes: 10 additions & 0 deletions providers/docker/scs/cluster-addon/cni/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: Croquette CNI
name: CNI
version: v1
dependencies:
- alias: cilium
name: cilium
repository: https://helm.cilium.io/
version: 1.16.6
Binary file not shown.
Empty file.
23 changes: 23 additions & 0 deletions providers/docker/scs/cluster-addon/metrics-server/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
6 changes: 6 additions & 0 deletions providers/docker/scs/cluster-addon/metrics-server/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: metrics-server
repository: https://kubernetes-sigs.github.io/metrics-server/
version: 3.12.2
digest: sha256:b79715342d7c10e97664b5f4d79199044f5da6ef40cca906218cff05ca891122
generated: "2025-01-13T15:40:51.780206883+01:00"
10 changes: 10 additions & 0 deletions providers/docker/scs/cluster-addon/metrics-server/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v2
type: application
description: Croquette Metrics Server
name: yorizonpoc-metrics-server
version: v1
dependencies:
- name: "metrics-server"
version: "3.12.2"
repository: "https://kubernetes-sigs.github.io/metrics-server/"
alias: "metrics-server"
Binary file not shown.
5 changes: 5 additions & 0 deletions providers/docker/scs/cluster-addon/metrics-server/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
metrics-server:
fullnameOverride: metrics-server

args:
- --kubelet-insecure-tls
23 changes: 23 additions & 0 deletions providers/docker/scs/cluster-class/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
5 changes: 5 additions & 0 deletions providers/docker/scs/cluster-class/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
apiVersion: v2
description: Croquette Cluster Class
name: docker-scs-1-30-cluster-class
type: application
version: v1
62 changes: 62 additions & 0 deletions providers/docker/scs/cluster-class/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "cluster-class.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "cluster-class.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "cluster-class.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "cluster-class.labels" -}}
helm.sh/chart: {{ include "cluster-class.chart" . }}
{{ include "cluster-class.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "cluster-class.selectorLabels" -}}
app.kubernetes.io/name: {{ include "cluster-class.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Create the name of the service account to use
*/}}
{{- define "cluster-class.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "cluster-class.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
101 changes: 101 additions & 0 deletions providers/docker/scs/cluster-class/templates/cluster-class.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
name: {{ .Release.Name }}-{{ .Chart.Version }}
namespace: {{.Release.Namespace}}
spec:
controlPlane:
ref:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlaneTemplate
name: {{ .Release.Name }}-{{ .Chart.Version }}-control-plane
namespace: {{ .Release.Namespace }}
machineInfrastructure:
ref:
kind: DockerMachineTemplate
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
name: {{ .Release.Name }}-{{ .Chart.Version }}-machinetemplate-docker
namespace: {{ .Release.Namespace }}
infrastructure:
ref:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerClusterTemplate
name: {{ .Release.Name }}-{{ .Chart.Version }}-cluster
namespace: {{ .Release.Namespace }}
workers:
machineDeployments:
- class: default-worker
template:
bootstrap:
ref:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: {{ .Release.Name }}-{{ .Chart.Version }}-worker-bootstraptemplate-docker
namespace: {{ .Release.Namespace }}
infrastructure:
ref:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
name: {{ .Release.Name }}-{{ .Chart.Version }}-machinetemplate-docker
namespace: {{ .Release.Namespace }}
variables:
- name: imageRepository
required: true
schema:
openAPIV3Schema:
type: string
default: ""
example: "registry.k8s.io"
description: "imageRepository sets the container registry to pull images from. If empty, nothing will be set and the from of kubeadm will be used."
patches:
- name: imageRepository
description: "Sets the imageRepository used for the KubeadmControlPlane."
enabledIf: '{{ ne .imageRepository "" }}'
definitions:
- selector:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlaneTemplate
matchResources:
controlPlane: true
jsonPatches:
- op: add
path: "/spec/template/spec/kubeadmConfigSpec/clusterConfiguration/imageRepository"
valueFrom:
variable: imageRepository
- name: customImage
description: "Sets the container image that is used for running dockerMachines for the controlplane and worker machineDeployments."
definitions:
- selector:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
matchResources:
machineDeploymentClass:
names:
- default-worker
jsonPatches:
- op: add
path: "/spec/template/spec/customImage"
value: {{ (index .Values.images.controlPlane 0).name }}
- selector:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
matchResources:
controlPlane: true
jsonPatches:
- op: add
path: "/spec/template/spec/customImage"
value: {{ (index .Values.images.controlPlane 0).name }}
- name: DockerMachineTemplateWorker
description: "Sets the container image that is used for running dockerMachines for the worker machineDeployments."
definitions:
- selector:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
matchResources:
machineDeploymentClass:
names:
- default-worker
jsonPatches:
- op: add
path: "/spec/template/spec/customImage"
value: {{ (index .Values.images.worker 0).name }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerClusterTemplate
metadata:
name: {{ .Release.Name }}-{{ .Chart.Version }}-cluster
namespace: {{ .Release.Namespace }}
spec:
template:
spec: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: DockerMachineTemplate
metadata:
name: {{ .Release.Name }}-{{ .Chart.Version }}-machinetemplate-docker
namespace: {{ .Release.Namespace }}
spec:
template:
spec:
extraMounts:
- containerPath: "/var/run/docker.sock"
hostPath: "/var/run/docker.sock"
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
metadata:
name: {{ .Release.Name }}-{{ .Chart.Version }}-worker-bootstraptemplate-docker
namespace: {{ .Release.Namespace }}
spec:
template:
spec:
joinConfiguration:
nodeRegistration:
# We have to set the criSocket to containerd as kubeadm defaults to docker runtime if both containerd and docker sockets are found
criSocket: unix:///var/run/containerd/containerd.sock
kubeletExtraArgs:
eviction-hard: 'nodefs.available<0%,nodefs.inodesFree<0%,imagefs.available<0%'
fail-swap-on: "false"
Loading