1
0
Fork 0

merge prod and prod-cluster, update Makefile, readme

This commit is contained in:
Massaki Archambault 2023-02-20 10:25:16 -05:00
parent 9327f22c46
commit 4873102074
26 changed files with 86 additions and 131 deletions

View File

@ -1,81 +1,36 @@
KUSTOMIZE = KUSTOMIZE_PLUGIN_HOME=$(PWD)/plugins kustomize KUSTOMIZE = kustomize
KUSTOMIZEFLAGS = --enable-alpha-plugins KUSTOMIZEFLAGS =
KUBECTL = kubectl KUBECTL = kubectl
KUBECTLFLAGS = KUBECTLFLAGS =
KUBECTLDIFFFLAGS = KUBECTLDIFFFLAGS = --server-side=true --force-conflicts
KUBECTLAPPLYFLAGS = --server-side=true --force-conflicts --prune KUBECTLAPPLYFLAGS = --server-side=true --force-conflicts --prune
SRC := $(shell find kustomize/ -type f) SRC := $(shell find kustomize/ -type f)
OUTDIR = build OUT = build
# DEVOUT = $(OUTDIR)/dev PRODOUT = $(OUT)/prod.yaml
# DEVMANIFESTSRC = kustomize/overlays/dev PRODSRC = kustomize/env/prod
# DEVMANIFESTOUT = $(DEVOUT)/manifest.yaml
# DEVCLUSTERSRC = kustomize/overlays/dev-cluster
# DEVCLUSTEROUT = $(DEVOUT)/cluster.yaml
PRODOUT = $(OUTDIR)/prod .PHONY: prod
PRODMANIFESTOUT = $(PRODOUT)/manifest.yaml prod: prod-diff
PRODMANIFESTSRC = kustomize/overlays/prod
PRODCLUSTEROUT = $(PRODOUT)/cluster.yaml
PRODCLUSTERSRC = kustomize/overlays/prod-cluster
# ifeq ($(environment),prod)
# environment = prod
# ENVOUTDIR = $(PRODOUT)
# ENVOUTFILE = $(PRODMANIFESTOUT) $(PRODCLUSTEROUT)
# else
# environment = dev
# ENVOUTDIR = $(DEVOUT)
# ENVOUTFILE = $(DEVMANIFESTOUT) $(DEVCLUSTERTOUT)
# endif
environment=prod
ENVOUTDIR = $(PRODOUT)
ENVOUTFILE = $(PRODMANIFESTOUT) $(PRODCLUSTEROUT)
.PHONY: diff .PHONY: diff
diff: $(environment) prod-diff: $(PRODOUT)
$(KUBECTL) $(KUBECTLFLAGS) diff $(KUBECTLDIFFFLAGS) -f $(ENVOUTDIR) | highlight --out-format xterm256 --syntax diff $(KUBECTL) $(KUBECTLFLAGS) diff $(KUBECTLDIFFFLAGS) -f $(PRODOUT) | highlight --out-format xterm256 --syntax diff
.PHONY: apply .PHONY: apply
apply: $(environment) prod-apply: $(PRODOUT)
$(KUBECTL) $(KUBECTLFLAGS) apply $(KUBECTLAPPLYFLAGS) -l app.kubernetes.io/managed-by=kustomize-cluster -f $(ENVOUTDIR) $(KUBECTL) $(KUBECTLFLAGS) apply $(KUBECTLAPPLYFLAGS) -l app.kubernetes.io/managed-by=kustomize -f $(PRODOUT)
$(KUBECTL) $(KUBECTLFLAGS) apply $(KUBECTLAPPLYFLAGS) -l app.kubernetes.io/managed-by=kustomize -f $(ENVOUTDIR)
.PHONY: all dev prod $(PRODOUT): $(SRC)
all: dev prod mkdir -p $(OUT)
# dev: $(DEVMANIFESTOUT) $(DEVCLUSTEROUT) $(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(PRODSRC) >$(PRODOUT) || (rm $(PRODOUT); exit 1)
prod: $(PRODMANIFESTOUT) $(PRODCLUSTEROUT)
# $(DEVMANIFESTOUT): $(SRC)
# mkdir -p $(DEVOUT)
# $(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(DEVMANIFESTSRC) >$(DEVMANIFESTOUT) || (rm $(DEVMANIFESTOUT); exit 1)
# $(DEVCLUSTEROUT): $(SRC)
# mkdir -p $(DEVOUT)
# $(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(DEVCLUSTERSRC) >$(DEVCLUSTEROUT) || (rm $(DEVCLUSTEROUT); exit 1)
$(PRODMANIFESTOUT): $(SRC)
mkdir -p $(PRODOUT)
$(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(PRODMANIFESTSRC) >$(PRODMANIFESTOUT) || (rm $(PRODMANIFESTOUT); exit 1)
$(PRODCLUSTEROUT): $(SRC)
mkdir -p $(PRODOUT)
$(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(PRODCLUSTERSRC) >$(PRODCLUSTEROUT) || (rm $(PRODCLUSTEROUT); exit 1)
.PHONY: clean .PHONY: clean
clean: clean:
rm -r $(OUTDIR) rm -r $(OUT)
# $(KUSTOMIZEOUTALL): $(SRC)
# @mkdir -p $(dir $(KUSTOMIZEOUTALL))
# $(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(KUSTOMIZEDIRALL) >$(KUSTOMIZEOUTALL) || (rm $(KUSTOMIZEOUTALL); exit 1)
# $(KUSTOMIZEOUT): $(SRC)
# @mkdir -p $(dir $(KUSTOMIZEOUT))
# $(KUSTOMIZE) build $(KUSTOMIZEFLAGS) $(KUSTOMIZEDIR) >$(KUSTOMIZEOUT) || (rm $(KUSTOMIZEOUT); exit 1)
.PHONY: infra
infra:
terraform -chdir=terraform apply

View File

@ -4,27 +4,45 @@ Kubernetes deployment for home cluster.
## Deploying ## Deploying
Deployments are done through a `Makefile`.
Prerequisites: Prerequisites:
* make * make
* docker * terraform
* kustomize
* kubectl * kubectl
* highlight (for prettying `diff`)
For local deployment:
* k3d
### Local deployment
``` sh
./setup-local-cluster.sh
make
make apply
```
### Prod deployment ### Prod deployment
#### infra
``` sh ``` sh
make environment=prod make infra
make environment=prod apply
``` ```
This will:
1. Configure external-secret to be able to sync kubernetes secrets with the secret store in AWS.
2. Configure the DNS entries in DigitalOcean
#### diff
``` sh
make
```
*or*
``` sh
make prod-diff
```
Generated kubernetes manifest will be in [./build/prod.yaml](./build/prod.yaml).
#### apply
``` sh
make prod-apply
```
Generated kubernetes manifest will be in [./build/prod.yaml](./build/prod.yaml).
Server-side resources that are not declared in the manifest will be pruned.
## Services ## Services
| service | local | prod | | service | local | prod |

View File

@ -1,8 +1,10 @@
resources: resources:
- ../../overlays/system
# - ../../namespaces/kubernetes-dashboard # - ../../namespaces/kubernetes-dashboard
- ../../namespaces/gitea - ../../overlays/gitea
- ../../namespaces/monitoring - ../../overlays/monitoring
- ../../namespaces/nextcloud - ../../overlays/nextcloud
# resources: # resources:
# - probes/external-services-bobcat-miner.yaml # - probes/external-services-bobcat-miner.yaml
@ -36,6 +38,9 @@ configMapGenerator:
- name: replacements - name: replacements
namespace: default namespace: default
literals: literals:
- TRAEFIK_EXTERNAL_HOST=traefik.badjnet.home
- LONGHORN_EXTERNAL_HOST=longhorn.badjnet.home
- GITEA_EXTERNAL_HOST=code.badjware.dev - GITEA_EXTERNAL_HOST=code.badjware.dev
- GITEA_EXTERNAL_URL=https://code.badjware.dev - GITEA_EXTERNAL_URL=https://code.badjware.dev
@ -79,6 +84,32 @@ patches:
# - patches/blackbox-exporter-probe-patch.yaml # - patches/blackbox-exporter-probe-patch.yaml
replacements: replacements:
- source:
kind: ConfigMap
name: replacements
namespace: default
fieldPath: data.TRAEFIK_EXTERNAL_HOST
targets:
- select:
kind: Ingress
name: traefik
namespace: kube-system
fieldPaths:
- spec.rules.0.host
- source:
kind: ConfigMap
name: replacements
namespace: default
fieldPath: data.LONGHORN_EXTERNAL_HOST
targets:
- select:
kind: HelmChart
name: longhorn
namespace: kube-system
fieldPaths:
- spec.set.[ingress.host]
options:
create: true
- source: - source:
kind: ConfigMap kind: ConfigMap
name: replacements name: replacements
@ -192,4 +223,4 @@ replacements:
name: prometheus name: prometheus
namespace: monitoring namespace: monitoring
fieldPaths: fieldPaths:
- spec.rules.0.host - spec.rules.0.host

View File

@ -1,44 +0,0 @@
resources:
- ../../namespaces/kube-system
- ../../bases/longhorn
buildMetadata:
- originAnnotations
commonLabels:
app.kubernetes.io/managed-by: kustomize-cluster
configMapGenerator:
- name: cluster-replacements
namespace: default
literals:
- TRAEFIK_EXTERNAL_HOST=traefik.badjnet.home
- LONGHORN_EXTERNAL_HOST=longhorn.badjnet.home
replacements:
- source:
kind: ConfigMap
name: cluster-replacements
namespace: default
fieldPath: data.TRAEFIK_EXTERNAL_HOST
targets:
- select:
kind: Ingress
name: traefik
namespace: kube-system
fieldPaths:
- spec.rules.0.host
- source:
kind: ConfigMap
name: cluster-replacements
namespace: default
fieldPath: data.LONGHORN_EXTERNAL_HOST
targets:
- select:
kind: HelmChart
name: longhorn
namespace: kube-system
fieldPaths:
- spec.set.[ingress.host]
options:
create: true

View File

@ -1,6 +0,0 @@
apiVersion: badjware/v1
kind: SSMParameterPlaceholderTransformer
metadata:
name: ssm-parameter
resourceSelectors:
- kind: Secret

View File

@ -1,4 +1,5 @@
resources: resources:
- ../../bases/longhorn
- ../../bases/traefik - ../../bases/traefik
- ../../bases/prometheus-operator - ../../bases/prometheus-operator
- ../../bases/external-secrets - ../../bases/external-secrets