diff --git a/README.md b/README.md index 2634fb60..b35113c0 100644 --- a/README.md +++ b/README.md @@ -152,5 +152,17 @@ Run [talos-bootstrap](https://github.com/aenix-io/talos-bootstrap/) to deploy cl Install cozystack system components: ``` -kubectl apply -f cozystack.yaml +kubectl apply -f cozystack-installer.yaml ``` + +### Dependencies chart + +- **core/installer** + - core/cilium + - core/kubeovn + - core/fluxcd + - **core/fluxcd-release** + - core/cilium + - core/kubeovn + - core/fluxcd + - system/* diff --git a/packages/.gitignore b/packages/.gitignore new file mode 100644 index 00000000..a12ca449 --- /dev/null +++ b/packages/.gitignore @@ -0,0 +1 @@ +repos/** diff --git a/packages/Makefile b/packages/Makefile index 10c02b78..36dbb80c 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -1,3 +1,3 @@ -apply show diff: +apply show diff repo: make -C core $@ make -C system $@ diff --git a/packages/config/Chart.yaml b/packages/config/Chart.yaml new file mode 100644 index 00000000..29d365da --- /dev/null +++ b/packages/config/Chart.yaml @@ -0,0 +1,2 @@ +name: cozystack +version: 0.0.0 diff --git a/packages/config/Makefile b/packages/config/Makefile new file mode 100644 index 00000000..fdeca167 --- /dev/null +++ b/packages/config/Makefile @@ -0,0 +1,2 @@ +collect: + diff --git a/packages/core/Makefile b/packages/core/Makefile index 8ec07201..dbda3c7e 100644 --- a/packages/core/Makefile +++ b/packages/core/Makefile @@ -1,5 +1,16 @@ -apply show diff prepare: +REPO=core + +apply show diff: make -C namespaces $@ make -C cilium $@ make -C kubeovn $@ make -C fluxcd $@ + +repo: fix-chartnames + rm -rf ../repos/$(REPO) + mkdir -p ../repos/$(REPO) + cd ../repos/$(REPO) && helm package $$(find ../../$(REPO) -mindepth 2 -maxdepth 2 -name Chart.yaml | awk 'sub("/Chart.yaml", "")') + cd ../repos/$(REPO) && helm repo index . + +fix-chartnames: + find . -name Chart.yaml -maxdepth 2 | awk -F/ '{print $$2}' | while read i; do printf "name: cozy-%s\nversion: 1.0.0\n" "$$i" > "$$i/Chart.yaml"; done diff --git a/packages/core/cilium/Chart.yaml b/packages/core/cilium/Chart.yaml index 29d365da..7d6bef13 100644 --- a/packages/core/cilium/Chart.yaml +++ b/packages/core/cilium/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-cilium +version: 1.0.0 diff --git a/packages/core/fluxcd-releases/Chart.yaml b/packages/core/fluxcd-releases/Chart.yaml new file mode 100644 index 00000000..9e16e839 --- /dev/null +++ b/packages/core/fluxcd-releases/Chart.yaml @@ -0,0 +1,2 @@ +name: cozy-fluxcd-releases +version: 1.0.0 diff --git a/packages/core/fluxcd-releases/Makefile b/packages/core/fluxcd-releases/Makefile new file mode 100644 index 00000000..39ac27e9 --- /dev/null +++ b/packages/core/fluxcd-releases/Makefile @@ -0,0 +1,19 @@ +NAMESPACE=cozy-system +NAME=fluxcd-releases + +show: + helm template -n $(NAMESPACE) $(NAME) . + +apply: + helm upgrade -i -n $(NAMESPACE) $(NAME) . + +diff: + helm diff upgrade --allow-unreleased -n $(NAMESPACE) $(NAME) . + +update: + rm -rf charts + helm repo add cilium https://helm.cilium.io/ + helm repo update cilium + helm pull cilium/cilium --untar --untardir charts + sed -i -e '/Used in iptables/d' -e '/SYS_MODULE/d' charts/cilium/values.yaml + patch -p3 < patches/fix-cgroups.patch diff --git a/packages/core/fluxcd-releases/templates/helmreleases.yaml b/packages/core/fluxcd-releases/templates/helmreleases.yaml new file mode 100644 index 00000000..59d60261 --- /dev/null +++ b/packages/core/fluxcd-releases/templates/helmreleases.yaml @@ -0,0 +1,76 @@ +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: cilium + namespace: cozy-cilium +spec: + interval: 1m + releaseName: cilium + chart: + spec: + chart: cozy-cilium + sourceRef: + kind: HelmRepository + name: cozystack-core + namespace: cozy-system +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: kubeovn + namespace: cozy-kubeovn +spec: + interval: 1m + releaseName: kubeovn + chart: + spec: + chart: cozy-kubeovn + sourceRef: + kind: HelmRepository + name: cozystack-core + namespace: cozy-system + dependsOn: + - name: cilium + namespace: cozy-cilium +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: cozy-fluxcd + namespace: cozy-fluxcd +spec: + interval: 1m + releaseName: fluxcd + chart: + spec: + chart: cozy-fluxcd + sourceRef: + kind: HelmRepository + name: cozystack-core + namespace: cozy-system + dependsOn: + - name: cilium + namespace: cozy-cilium + - name: kubeovn + namespace: cozy-kubeovn +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: cozy-telepresence + namespace: cozy-telepresence +spec: + interval: 1m + releaseName: traffic-manager + chart: + spec: + chart: cozy-telepresence + sourceRef: + kind: HelmRepository + name: cozystack-system + namespace: cozy-system + dependsOn: + - name: cilium + namespace: cozy-cilium + - name: kubeovn + namespace: cozy-kubeovn diff --git a/packages/core/fluxcd-releases/templates/helmrepos.yaml b/packages/core/fluxcd-releases/templates/helmrepos.yaml new file mode 100644 index 00000000..481a06d9 --- /dev/null +++ b/packages/core/fluxcd-releases/templates/helmrepos.yaml @@ -0,0 +1,18 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: cozystack-core + namespace: cozy-system +spec: + interval: 5m0s + url: http://cozystack.cozy-system.svc/core +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: cozystack-system + namespace: cozy-system +spec: + interval: 5m0s + url: http://cozystack.cozy-system.svc/system diff --git a/packages/core/fluxcd/Chart.yaml b/packages/core/fluxcd/Chart.yaml index f33338f9..81787d63 100644 --- a/packages/core/fluxcd/Chart.yaml +++ b/packages/core/fluxcd/Chart.yaml @@ -1,2 +1,2 @@ -name: core -version: 0.0.0 +name: cozy-fluxcd +version: 1.0.0 diff --git a/packages/core/installer/Chart.yaml b/packages/core/installer/Chart.yaml new file mode 100644 index 00000000..750dd5a6 --- /dev/null +++ b/packages/core/installer/Chart.yaml @@ -0,0 +1,2 @@ +name: cozy-installer +version: 1.0.0 diff --git a/packages/core/installer/Makefile b/packages/core/installer/Makefile new file mode 100644 index 00000000..39fd320c --- /dev/null +++ b/packages/core/installer/Makefile @@ -0,0 +1,14 @@ +NAMESPACE=cozy-installer +NAME=installer + +show: + helm template -n $(NAMESPACE) $(NAME) . + +apply: + helm template -n $(NAMESPACE) $(NAME) . | kubectl apply -f - + +diff: + helm template -n $(NAMESPACE) $(NAME) . | kubectl diff -f - + +image: + docker build -f images/installer/Dockerfile ../../.. diff --git a/packages/core/installer/images/installer/Dockerfile b/packages/core/installer/images/installer/Dockerfile new file mode 100644 index 00000000..3cf17368 --- /dev/null +++ b/packages/core/installer/images/installer/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine:3.19 + +RUN apk add --no-cache make darkhttpd +RUN apk add helm kubectl --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community + +COPY packages /cozystack/packages +RUN make -C /cozystack/packages/core repo +RUN make -C /cozystack/packages/system repo + +RUN ln -s /cozystack/packages/core/installer/images/installer/scripts /scripts + +ENTRYPOINT [ "/scripts/run.sh" ] diff --git a/packages/core/installer/images/installer/scripts/run.sh b/packages/core/installer/images/installer/scripts/run.sh new file mode 100755 index 00000000..09ffc460 --- /dev/null +++ b/packages/core/installer/images/installer/scripts/run.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -o pipefail +set -e + +run_migrations() { + return 0 +} + +flux_is_ok() { + kubectl wait --for=condition=available -n cozy-fluxcd deploy/source-controller deploy/helm-controller --timeout=10s +} + + +install_core_charts() { + make -C /cozystack/packages/core/namespaces apply + make -C /cozystack/packages/core/cilium apply + make -C /cozystack/packages/core/kubeovn apply + make -C /cozystack/packages/core/fluxcd apply +} + +if ! flux_is_ok; then + install_core_charts +fi + +run_migrations +make -C /cozystack/packages/core/fluxcd-releases apply + +tail -f /dev/null & +wait diff --git a/cozystack.yaml b/packages/core/installer/templates/cozystack.yaml similarity index 69% rename from cozystack.yaml rename to packages/core/installer/templates/cozystack.yaml index 86dd4587..e4b9b14f 100644 --- a/cozystack.yaml +++ b/packages/core/installer/templates/cozystack.yaml @@ -50,14 +50,37 @@ spec: serviceAccountName: cozystack containers: - name: cozystack - image: ghcr.io/kvaps/test:cozystack-10 - command: [ "/cozystack-system/reconcile.sh" ] + image: ghcr.io/kvaps/test:cozystack-installer-0 env: - name: KUBERNETES_SERVICE_HOST value: localhost - name: KUBERNETES_SERVICE_PORT value: "7445" + - name: darkhttpd + image: ghcr.io/kvaps/test:cozystack-installer-0 + command: + - /usr/bin/darkhttpd + - /cozystack/packages/repos + - --port + - "8123" + ports: + - name: http + containerPort: 8123 tolerations: - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoSchedule" +--- +apiVersion: v1 +kind: Service +metadata: + name: cozystack + namespace: cozy-system +spec: + ports: + - name: http + port: 80 + targetPort: 8123 + selector: + app: cozystack + type: ClusterIP diff --git a/packages/core/kubeovn/Chart.yaml b/packages/core/kubeovn/Chart.yaml index f33338f9..cc97b8db 100644 --- a/packages/core/kubeovn/Chart.yaml +++ b/packages/core/kubeovn/Chart.yaml @@ -1,2 +1,2 @@ -name: core -version: 0.0.0 +name: cozy-kubeovn +version: 1.0.0 diff --git a/packages/core/namespaces/Chart.yaml b/packages/core/namespaces/Chart.yaml index 29d365da..2b37b8d5 100644 --- a/packages/core/namespaces/Chart.yaml +++ b/packages/core/namespaces/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-namespaces +version: 1.0.0 diff --git a/packages/system/Dockerfile b/packages/system/Dockerfile deleted file mode 100644 index c2c6da78..00000000 --- a/packages/system/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM alpine:3.19 - - -ARG HELMWAVE_VERSION=0.33.0 -RUN wget -c https://github.com/helmwave/helmwave/releases/download/v$HELMWAVE_VERSION/helmwave_${HELMWAVE_VERSION}_linux_amd64.tar.gz -O - | tar -xz \ - && mv helmwave /usr/local/bin/ - -ARG KUBECTL_VERSION=1.29.0 -RUN wget https://dl.k8s.io/release/v$KUBECTL_VERSION/bin/linux/amd64/kubectl \ - && chmod +x kubectl \ - && mv kubectl /usr/local/bin/ - - -COPY . /cozystack-system -WORKDIR /cozystack-system - -CMD [ "reconcile.sh" ] diff --git a/packages/system/Makefile b/packages/system/Makefile index 7c811bf6..1db50924 100644 --- a/packages/system/Makefile +++ b/packages/system/Makefile @@ -1,4 +1,6 @@ -apply show diff prepare: +REPO=system + +apply show diff: make -C cert-manager $@ make -C cert-manager-issuers $@ make -C victoria-metrics-operator $@ @@ -16,3 +18,12 @@ apply show diff prepare: make -C telepresence $@ make -C ingress-nginx $@ make -C kubeapps $@ + +repo: fix-chartnames + rm -rf ../repos/$(REPO) + mkdir -p ../repos/$(REPO) + cd ../repos/$(REPO) && helm package $$(find ../../$(REPO) -mindepth 2 -maxdepth 2 -name Chart.yaml | awk 'sub("/Chart.yaml", "")') + cd ../repos/$(REPO) && helm repo index . + +fix-chartnames: + find . -name Chart.yaml -maxdepth 2 | awk -F/ '{print $$2}' | while read i; do printf "name: cozy-%s\nversion: 1.0.0\n" "$$i" > "$$i/Chart.yaml"; done diff --git a/packages/system/cert-manager-issuers/Chart.yaml b/packages/system/cert-manager-issuers/Chart.yaml index 29d365da..5f968971 100644 --- a/packages/system/cert-manager-issuers/Chart.yaml +++ b/packages/system/cert-manager-issuers/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-cert-manager-issuers +version: 1.0.0 diff --git a/packages/system/cert-manager/Chart.yaml b/packages/system/cert-manager/Chart.yaml index 29d365da..fe2ef8c0 100644 --- a/packages/system/cert-manager/Chart.yaml +++ b/packages/system/cert-manager/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-cert-manager +version: 1.0.0 diff --git a/packages/system/grafana-operator/Chart.yaml b/packages/system/grafana-operator/Chart.yaml index 29d365da..2aaee3c1 100644 --- a/packages/system/grafana-operator/Chart.yaml +++ b/packages/system/grafana-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-grafana-operator +version: 1.0.0 diff --git a/packages/system/ingress-nginx/Chart.yaml b/packages/system/ingress-nginx/Chart.yaml index 29d365da..4716918b 100644 --- a/packages/system/ingress-nginx/Chart.yaml +++ b/packages/system/ingress-nginx/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-ingress-nginx +version: 1.0.0 diff --git a/packages/system/kubeapps/Chart.yaml b/packages/system/kubeapps/Chart.yaml index 29d365da..21194713 100644 --- a/packages/system/kubeapps/Chart.yaml +++ b/packages/system/kubeapps/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-kubeapps +version: 1.0.0 diff --git a/packages/system/kubevirt-operator/Chart.yaml b/packages/system/kubevirt-operator/Chart.yaml index 29d365da..2bfbb7e6 100644 --- a/packages/system/kubevirt-operator/Chart.yaml +++ b/packages/system/kubevirt-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-kubevirt-operator +version: 1.0.0 diff --git a/packages/system/kubevirt/Chart.yaml b/packages/system/kubevirt/Chart.yaml index 29d365da..51a28e7c 100644 --- a/packages/system/kubevirt/Chart.yaml +++ b/packages/system/kubevirt/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-kubevirt +version: 1.0.0 diff --git a/packages/system/linstor/Chart.yaml b/packages/system/linstor/Chart.yaml index 29d365da..aefaae64 100644 --- a/packages/system/linstor/Chart.yaml +++ b/packages/system/linstor/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-linstor +version: 1.0.0 diff --git a/packages/system/mariadb-operator/Chart.yaml b/packages/system/mariadb-operator/Chart.yaml index 29d365da..6494e0d1 100644 --- a/packages/system/mariadb-operator/Chart.yaml +++ b/packages/system/mariadb-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-mariadb-operator +version: 1.0.0 diff --git a/packages/system/metallb-addresses/Chart.yaml b/packages/system/metallb-addresses/Chart.yaml index 29d365da..95b4a6d3 100644 --- a/packages/system/metallb-addresses/Chart.yaml +++ b/packages/system/metallb-addresses/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-metallb-addresses +version: 1.0.0 diff --git a/packages/system/metallb/Chart.yaml b/packages/system/metallb/Chart.yaml index 29d365da..233b617e 100644 --- a/packages/system/metallb/Chart.yaml +++ b/packages/system/metallb/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-metallb +version: 1.0.0 diff --git a/packages/system/monitoring/Chart.yaml b/packages/system/monitoring/Chart.yaml index 29d365da..4cff6296 100644 --- a/packages/system/monitoring/Chart.yaml +++ b/packages/system/monitoring/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-monitoring +version: 1.0.0 diff --git a/packages/system/piraeus-operator/Chart.yaml b/packages/system/piraeus-operator/Chart.yaml index 29d365da..1243393e 100644 --- a/packages/system/piraeus-operator/Chart.yaml +++ b/packages/system/piraeus-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-piraeus-operator +version: 1.0.0 diff --git a/packages/system/postgres-operator/Chart.yaml b/packages/system/postgres-operator/Chart.yaml index 29d365da..38d0505f 100644 --- a/packages/system/postgres-operator/Chart.yaml +++ b/packages/system/postgres-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-postgres-operator +version: 1.0.0 diff --git a/packages/system/rabbitmq-operator/Chart.yaml b/packages/system/rabbitmq-operator/Chart.yaml index 29d365da..c833c103 100644 --- a/packages/system/rabbitmq-operator/Chart.yaml +++ b/packages/system/rabbitmq-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-rabbitmq-operator +version: 1.0.0 diff --git a/packages/system/redis-operator/Chart.yaml b/packages/system/redis-operator/Chart.yaml index 29d365da..7f23bfb3 100644 --- a/packages/system/redis-operator/Chart.yaml +++ b/packages/system/redis-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-redis-operator +version: 1.0.0 diff --git a/packages/system/telepresence/Chart.yaml b/packages/system/telepresence/Chart.yaml index 29d365da..812bc7fa 100644 --- a/packages/system/telepresence/Chart.yaml +++ b/packages/system/telepresence/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-telepresence +version: 1.0.0 diff --git a/packages/system/victoria-metrics-operator/Chart.yaml b/packages/system/victoria-metrics-operator/Chart.yaml index 29d365da..3a841775 100644 --- a/packages/system/victoria-metrics-operator/Chart.yaml +++ b/packages/system/victoria-metrics-operator/Chart.yaml @@ -1,2 +1,2 @@ -name: cozystack -version: 0.0.0 +name: cozy-victoria-metrics-operator +version: 1.0.0