Cześć,
mam wystawiony klaster redisa (jako serwisy zdjęcie na dole jak to wygląda) i próbuję go podłączyć pod helm chart argocd, niestety da się tam wpisać jeden adres ip (po wpisaniu adresu Master A działa, są wrzucane dane na Master A i leci replikacja na Slave A. Macie jakiś pomysł jak podpiąć cały klaster, żeby na każdy master zapisywał dane i replikował je na slave? Może jakiś LB,proxy przed tym ma stać? albo inna konfiguracja typu 1x master 3x slave?

Konfiguracja argocd z klastrem redisa
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2384
Co to znaczy, że masz wystawiony klaster redisa? Chcesz wykorzystać jakąś współdzieloną instancję klastra do argocd?
- Tego redisa to masz w trybie HA czy w trybie cluster mode?
- Jeśli w trybie cluster mode, to klient klastra redisowego musi mieć świadomość, że pracuje z klastrem. Możliwe, że argocd jeszcze nie wspiera (https://github.com/argoproj/argo-cd/pull/14001)
- Jeśli w trybie HA, to argocd powinien ogarnąć via redis sentinel.
Czy Twoim celem jest deployment argocd w trybie HA, czy może celem jest wykorzystanie istniejącego klastra redisowego? Co chcesz osiągnąć?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Aktualnie mam postawione argocd z redisem (po kilka replik dla argo i redisa) na klastrze HA k8s. Helm chart https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/values.yaml pozwala wybrać albo redis-ha (teraz go używam) w klastrze k8s albo externalRedis). Chcę wykorzystać właśnie ten externalRedis, który i tak będzie mi potrzebny jeszcze do innych rzeczy więc chciałem go spróbować połączyć również z argo. I się zastanawiam jaką konfigurację redisa przyjąć, aktualnie mam w configu redisa włączone cluster-enabled yes (tutaj myślałem że cluster-enabled yes = HA) no i ten klaster jest skonfigurowany żeby działał tak jak na zdjęciu powyżej. I problem jest w tym, że w argocd w tej konfiguracji externalRedis nie mogę podać kilka adresów ip dla każdego mastera. Odpowiadając na twoje pytanie moim celem jest wykorzystanie istniejącego klastra redisa i podpięcie go pod argocd. Jeżeli się nie da w takiej konfiguracji co mam teraz to może masz jakiś pomysł jak inaczej do tego podejść?
# External Redis parameters
externalRedis:
# -- External Redis server host
host: ""
# -- External Redis username
username: ""
# -- External Redis password
password: ""
# -- External Redis server port
port: 6379
# -- The name of an existing secret with Redis (must contain key `redis-password`) and Sentinel credentials.
# When it's set, the `externalRedis.password` parameter is ignored
existingSecret: ""
# -- External Redis Secret annotations
secretAnnotations: {}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2384
redis ha != redis cluster mode i jeśli Twój exsternalRedis to cluster, to argocd jeszcze tego nie wspiera (podlinkowany pull request do argocd).
Gdybyś miał Redis HA, to będziesz miał też redis sentinel i wówczas można się pokusić i próbę konfiguracji, tak by argocd łączyło się via sentinele.
W sekrecie dla redisa masz na to przewidziane osobne propertiesy.
- name: REDIS_USERNAME
valueFrom:
secretKeyRef:
name: {{ default "argocd-redis" .Values.externalRedis.existingSecret }}
key: redis-username
optional: true
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ default "argocd-redis" .Values.externalRedis.existingSecret }}
optional: true
{{- if .Values.externalRedis.host }}
key: redis-password
{{- else }}
key: auth
{{- end }}
- name: REDIS_SENTINEL_USERNAME
valueFrom:
secretKeyRef:
name: {{ default (include "argo-cd.redis.fullname" .) .Values.externalRedis.existingSecret }}
key: redis-sentinel-username
optional: true
- name: REDIS_SENTINEL_PASSWORD
valueFrom:
secretKeyRef:
name: {{ default (include "argo-cd.redis.fullname" .) .Values.externalRedis.existingSecret }}
key: redis-sentinel-password
optional: true
Dla argocd-application-controller, argocd-repo-server, argocd-server mógłbyś skorzystać z extraArgs: [] i tam przekazać namiary na sentinele i wskazać mastera:
extraArgs:
- --redis
- --redis-sentinel=twoj-sentinel1:26379
- --redis-sentinel=twoj-sentinel2:26379
- --redis-sentinel=twoj-sentinel3:26379
- --redis-sentinel-master=nazwa-twojeo-mastera
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Widzę, że ten sentinel też łapie się pod wersję community to pewnie przetestuję go.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Ok, postawiłem klaster ha z sentinelem, sprawdziłem działa. (https://docs.vultr.com/set-up-high-availability-redis-using-sentinel-in-ubuntu)
Dodałem taki config, zmieniony bo przy komendach --redis-sentinel wyskakiwał CrashLoopBackOff przez złą komendę. Przy tej na dole pody się odpalają.
extraArgs:
- --sentinel=twoj-sentinel1:26379
- --sentinel=twoj-sentinel2:26379
- --sentinel=twoj-sentinel3:26379
- --sentinelmaster=nazwa-twojeo-mastera
Taki secret (na redis master utworzyłem użytkownika z hasłem i wpisałem do secretu, na pierwszym sentinel tak samo utworzony i wpisany w secret, pytanie czy tego użytkownika trzeba utworzyć wszędzie czy na master wystarczy)
apiVersion: v1
kind: Secret
metadata:
name: secret-sa-sample
namespace: argocd
type: Opaque
data:
REDIS_USERNAME: haslo w base64
REDIS_PASSWORD: haslo w base64
REDIS_SENTINEL_USERNAME: haslo w base64
REDIS_SENTINEL_PASSWORD: haslo w base64
Natomiast teraz jakby nie mógł się połączyć
Failed to resync revoked tokens. retrying again in 1 minute: NOAUTH Authentication required.
Zastanawiam się czy nie odpuścić przez słabe wsparcie ze strony argo i pozostać przy internal redisie w klastrze k8s.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 291
Ok, zadziałało trzeba było inne klucze w sekrecie podać, nie spojrzałem na key wcześniej.
apiVersion: v1
kind: Secret
metadata:
name: secret-sa-sample
namespace: argocd
type: Opaque
data:
redis-username: haslo w base64
redis-password: haslo w base64
redis-sentinel-username: haslo w base64
redis-sentinel-password: haslo w base64
extraArgs:
- --sentinel=twoj-sentinel1:26379
- --sentinel=twoj-sentinel2:26379
- --sentinel=twoj-sentinel3:26379
- --sentinelmaster=nazwa-twojeo-mastera
# External Redis parameters
externalRedis:
# -- External Redis server host
host: "ip hosta"
# -- External Redis username
username: ""
# -- External Redis password
password: ""
# -- External Redis server port
port: 6379
# -- The name of an existing secret with Redis (must contain key `redis-password`) and Sentinel credentials.
# When it's set, the `externalRedis.password` parameter is ignored
existingSecret: "secret-sa-sample"