mirror of
https://github.com/wahyd4/home-docker.git
synced 2026-08-08 20:15:03 +10:00
Update argocd via terraform
This commit is contained in:
@@ -244,12 +244,8 @@ k apply -f wireguard.yaml -n wireguard
|
|||||||
|
|
||||||
|
|
||||||
# argo
|
# argo
|
||||||
|
# ArgoCD is now fully managed via terraform/argocd.tf (helm_release.argocd).
|
||||||
k create namespace argocd
|
# Do not apply argocd-values.yaml manually anymore - it has been retired.
|
||||||
|
|
||||||
kubectl -n argocd create secret generic redis-credentials --from-literal=redis-password="xxx"
|
|
||||||
|
|
||||||
helm upgrade --install argocd -n argocd -f argocd-values.yaml argo/argo-cd
|
|
||||||
|
|
||||||
|
|
||||||
# k8s github docker image pull
|
# k8s github docker image pull
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
redis-ha:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
externalRedis:
|
|
||||||
# existingSecret: redis-credentials
|
|
||||||
host: 192.168.1.2
|
|
||||||
|
|
||||||
controller:
|
|
||||||
enableStatefulSet: true
|
|
||||||
metrics:
|
|
||||||
enabled: true
|
|
||||||
serviceMonitor:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
configs:
|
|
||||||
cm:
|
|
||||||
# -- Timeout to discover if a new manifests version got published to the repository
|
|
||||||
timeout.reconciliation: 60s
|
|
||||||
|
|
||||||
server:
|
|
||||||
replicas: 1
|
|
||||||
extraArgs:
|
|
||||||
- --insecure
|
|
||||||
ingress:
|
|
||||||
enabled: true
|
|
||||||
annotations:
|
|
||||||
kubernetes.io/ingress.class: "nginx"
|
|
||||||
kubernetes.io/tls-acme: "true"
|
|
||||||
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
|
||||||
nginx.ingress.kubernetes.io/proxy-body-size: 102400m
|
|
||||||
nginx.ingress.kubernetes.io/auth-url: "https://pass.junv.cc/oauth2/auth"
|
|
||||||
nginx.ingress.kubernetes.io/auth-signin: "https://pass.junv.cc/oauth2/start?rd=https://$host$escaped_request_uri"
|
|
||||||
hostname: "argo.junv.cc"
|
|
||||||
tls:
|
|
||||||
- hosts:
|
|
||||||
- argo.junv.cc
|
|
||||||
secretName: argocd-tls
|
|
||||||
metrics:
|
|
||||||
enabled: false
|
|
||||||
serviceMonitor:
|
|
||||||
enabled: true
|
|
||||||
env:
|
|
||||||
- name: ARGOCD_API_SERVER_REPLICAS
|
|
||||||
value: '2'
|
|
||||||
|
|
||||||
repoServer:
|
|
||||||
replicas: 1
|
|
||||||
metrics:
|
|
||||||
enabled: false
|
|
||||||
serviceMonitor:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
applicationSet:
|
|
||||||
metrics:
|
|
||||||
enabled: false
|
|
||||||
serviceMonitor:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
redis:
|
|
||||||
enabled: false
|
|
||||||
|
|
||||||
global:
|
|
||||||
logging:
|
|
||||||
level: "warn"
|
|
||||||
|
|
||||||
ingress:
|
|
||||||
enabled: true
|
|
||||||
path: /
|
|
||||||
hosts:
|
|
||||||
- argo.junv.cc
|
|
||||||
annotations:
|
|
||||||
kubernetes.io/ingress.class: nginx
|
|
||||||
kubernetes.io/tls-acme: "true"
|
|
||||||
labels: {}
|
|
||||||
tls:
|
|
||||||
- secretName: argocc-tls
|
|
||||||
hosts:
|
|
||||||
- argo.junv.cc
|
|
||||||
+4
-5
@@ -9,7 +9,7 @@ This directory contains Kubernetes configuration files and documentation that ar
|
|||||||
- **`ai-bot-serviceaccount.yaml`** - ServiceAccount, Secret, Role, and RoleBinding for ai-bot
|
- **`ai-bot-serviceaccount.yaml`** - ServiceAccount, Secret, Role, and RoleBinding for ai-bot
|
||||||
- Creates `ai-bot` service account in `ai` namespace
|
- Creates `ai-bot` service account in `ai` namespace
|
||||||
- Grants full access to `ai` namespace only
|
- Grants full access to `ai` namespace only
|
||||||
|
|
||||||
- **`ai-bot-clusterrole.yaml`** - ClusterRole and ClusterRoleBinding for read-only access
|
- **`ai-bot-clusterrole.yaml`** - ClusterRole and ClusterRoleBinding for read-only access
|
||||||
- Grants read-only access (get, list, watch) to all namespaces
|
- Grants read-only access (get, list, watch) to all namespaces
|
||||||
- Combined with the Role above, ai-bot has:
|
- Combined with the Role above, ai-bot has:
|
||||||
@@ -71,8 +71,7 @@ scp AI-BOT-USAGE.md 192.168.1.10:~/
|
|||||||
## 📋 Related
|
## 📋 Related
|
||||||
|
|
||||||
- **AI Namespace Manifests**: `/ai/` directory (monitored by ArgoCD)
|
- **AI Namespace Manifests**: `/ai/` directory (monitored by ArgoCD)
|
||||||
- **Terraform Configuration**: `/terraform/` directory
|
- **Terraform Configuration**: `/terraform/` directory (includes ArgoCD's Helm values in `terraform/argocd.tf`)
|
||||||
- **ArgoCD Values**: `/argocd-values.yaml`
|
|
||||||
|
|
||||||
## 🔄 Setup History
|
## 🔄 Setup History
|
||||||
|
|
||||||
@@ -84,6 +83,6 @@ scp AI-BOT-USAGE.md 192.168.1.10:~/
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Maintainer**: junv (wahyd4)
|
**Maintainer**: junv (wahyd4)
|
||||||
**Cluster**: K3s on 192.168.1.2
|
**Cluster**: K3s on 192.168.1.2
|
||||||
**Management Host**: 192.168.1.10 (ai-bot user)
|
**Management Host**: 192.168.1.10 (ai-bot user)
|
||||||
|
|||||||
+69
-62
@@ -136,84 +136,91 @@ resource "null_resource" "wait_for_cert_manager_crds" {
|
|||||||
# We've already created it manually with the setup_argocd.sh script
|
# We've already created it manually with the setup_argocd.sh script
|
||||||
|
|
||||||
# Install ArgoCD
|
# Install ArgoCD
|
||||||
|
# This is the single source of truth for the ArgoCD deployment (previously
|
||||||
|
# also managed ad-hoc via `helm upgrade -f argocd-values.yaml`, which has been
|
||||||
|
# retired in favor of Terraform).
|
||||||
resource "helm_release" "argocd" {
|
resource "helm_release" "argocd" {
|
||||||
name = "argocd"
|
name = "argocd"
|
||||||
repository = "https://argoproj.github.io/argo-helm"
|
repository = "https://argoproj.github.io/argo-helm"
|
||||||
chart = "argo-cd"
|
chart = "argo-cd"
|
||||||
version = "9.5.14"
|
version = "10.1.1"
|
||||||
namespace = kubernetes_namespace.argocd.metadata[0].name
|
namespace = kubernetes_namespace.argocd.metadata[0].name
|
||||||
|
|
||||||
set {
|
# Homelab: single-node K3s, no HA needed.
|
||||||
name = "server.service.type"
|
values = [<<-EOT
|
||||||
value = "ClusterIP"
|
# Dex/notifications disabled - neither SSO federation nor notification
|
||||||
}
|
# channels are configured, so avoid running two extra pods for nothing.
|
||||||
|
dex:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
set {
|
notifications:
|
||||||
name = "server.ingress.enabled"
|
enabled: false
|
||||||
value = "true"
|
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
redis-ha:
|
||||||
name = "server.ingress.hosts[0]"
|
enabled: false
|
||||||
value = "argo.junv.cc"
|
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
redis:
|
||||||
name = "server.ingress.ingressClassName"
|
enabled: false
|
||||||
value = "nginx"
|
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
# Use the Redis instance running on the K3s host itself instead of the
|
||||||
name = "server.ingress.annotations.cert-manager\\.io/cluster-issuer"
|
# chart's bundled redis.
|
||||||
value = "letsencrypt-prod"
|
# NOTE: this Redis has no auth (`requirepass` empty) and listens on
|
||||||
}
|
# 0.0.0.0:6379 - reachable by anything on 192.168.1.0/24.
|
||||||
|
externalRedis:
|
||||||
|
host: 192.168.1.2
|
||||||
|
port: 6379
|
||||||
|
|
||||||
set {
|
controller:
|
||||||
name = "server.ingress.tls[0].hosts[0]"
|
metrics:
|
||||||
value = "argo.junv.cc"
|
enabled: true
|
||||||
}
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
set {
|
configs:
|
||||||
name = "server.ingress.tls[0].secretName"
|
cm:
|
||||||
value = "argocd-server-tls"
|
timeout.reconciliation: 60s
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
server:
|
||||||
name = "server.extraArgs[0]"
|
replicas: 1
|
||||||
value = "--insecure"
|
# Ingress terminates TLS, so the server can listen over plain HTTP.
|
||||||
}
|
extraArgs:
|
||||||
|
- --insecure
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: "nginx"
|
||||||
|
kubernetes.io/tls-acme: "true"
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: 102400m
|
||||||
|
nginx.ingress.kubernetes.io/auth-url: "https://pass.junv.cc/oauth2/auth"
|
||||||
|
nginx.ingress.kubernetes.io/auth-signin: "https://pass.junv.cc/oauth2/start?rd=https://$host$escaped_request_uri"
|
||||||
|
hostname: "argo.junv.cc"
|
||||||
|
# `tls` is a boolean for this chart (not a list) - the actual secret
|
||||||
|
# is always named `argocd-server-tls`.
|
||||||
|
tls: true
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
set {
|
repoServer:
|
||||||
name = "server.insecure"
|
replicas: 1
|
||||||
value = "true"
|
metrics:
|
||||||
}
|
enabled: true
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
# Disable components not needed for single-node homelab
|
applicationSet:
|
||||||
set {
|
metrics:
|
||||||
name = "dex.enabled"
|
enabled: true
|
||||||
value = "false"
|
serviceMonitor:
|
||||||
}
|
enabled: true
|
||||||
|
|
||||||
set {
|
global:
|
||||||
name = "notifications.enabled"
|
logging:
|
||||||
value = "false"
|
level: "warn"
|
||||||
}
|
EOT
|
||||||
|
]
|
||||||
# Use external Redis instead of the built-in one
|
|
||||||
set {
|
|
||||||
name = "redis.enabled"
|
|
||||||
value = "false"
|
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
|
||||||
name = "externalRedis.host"
|
|
||||||
value = "192.168.1.2"
|
|
||||||
}
|
|
||||||
|
|
||||||
set {
|
|
||||||
name = "externalRedis.port"
|
|
||||||
value = "6379"
|
|
||||||
}
|
|
||||||
|
|
||||||
depends_on = [
|
depends_on = [
|
||||||
helm_release.cert_manager,
|
helm_release.cert_manager,
|
||||||
|
|||||||
Reference in New Issue
Block a user