本文介绍如何通过ArgoCD部署sentry集群,由于argocd同步job类型任务有已知的bug,本文将详细介绍如何迂回解决。
argocd同步job类型任务有bug,
会永久卡在“waiting for completion of hook batch/Job/sentry-snuba-db-init and 3 more hooks”,我们需要把job类型的hook任务通过手动执行。
部署步骤
获取job任务资源清单
通过执行
helm install --dry-run sentry ./ > sentry.yaml
把对应的values值和渲染的资源清单打印出来,而不会真正的去部署一个release
job类型的hook任务在hooks目录下
得到渲染好的job的yaml文件
然后,直接去除chart里的hooks文件夹。hooks里的job我通过手动同步来解决。
创建命名空间和secret
kubectl create ns sentry
kubectl apply -f sentry-sentry-secret.yaml -n sentry
argocd 同步
apply job任务
已按注解 "helm.sh/hook-weight" 进行排序
kubectl apply -f sentry-db-check.yaml -n sentry
kubectl apply -f sentry-snuba-db-init.yaml -n sentry
kubectl apply -f sentry-snuba-migrate.yaml -n sentry
kubectl apply -f sentry-db-init.yaml -n sentry
kubectl apply -f sentry-user-create.yaml -n sentry
配置“asHook: false”后argocd同步
邮箱配置
mail:
# For example: smtp
backend: smtp
useTls: false
useSsl: false
username: "sentry-test@xxxxxx.com"
password: “admin”
port: 25
host: "smtpyyy.xxxxxx.com"
from: "sentry-test@xxxxxx.com"
修改后,argocd同步。
使用TLS报错,暂不解决。
问题
报错 django.db.utils.OperationalError: FATAL: password authentication failed for user "postgres"
进入容器sentry-web、sentry-sentry-postgresql查看环境变量里的密码是否一致。
获取postgres的密码 kubectl edit secret sentry-sentry-postgresql -n sentry bGdSdVVMUzZVRA== lgRuULS6UD
重启对应服务就好了
502 Bad Gateway
容器貌似都正确跑起来了,访问 http://<ip>:9000 时被重定向到 http://<ip>:9000/auth/login
查看sentry-web容器,
报错"
psycopg2.errors.UndefinedTable: UndefinedTable('relation "sentry_projectkey" does not exist\nLINE 1: ...te_limit_window", "sentry_projectkey"."data" FROM "sentry_pr...\n ^\n')
120
SQL: SELECT "sentry_projectkey"."id", "sentry_projectkey"."project_id", "sentry_projectkey"."label", "sentry_projectkey"."public_key", "sentry_projectkey"."secret_key", "sentry_projectkey"."roles", "sentry_projectkey"."status", "sentry_projectkey"."date_added", "sentry_projectkey"."rate_limit_count", "sentry_projectkey"."rate_limit_window", "sentry_projectkey"."data" FROM "sentry_projectkey" WHERE ("sentry_projectkey"."project_id" = %s AND "sentry_projectkey"."roles" = (("sentry_projectkey"."roles" | %s))) LIMIT 1
119
"
- 进入postgresql容器
- 登录数据库命令:psql -U user_name sentry-sentry-postgresql-0:/$ psql -U postgres
- 查看数据库列表 \l
- 切换到sentry \c sentry
- 查看table \dt
可以看到是没有projectkey这table
在sentry-web容器中执行 sentry upgrade 后解决!
数据库初始化好后,会提醒设置账号和密码。 Would you like to create a user account now? [Y/n]: y
无法创建项目
打开 http://<ip>:9000/organizations/sentry/projects/ 会报错 Unable to fetch all project stats
账号没有admin权限
强制更新用户信息 sentry createuser --no-input --superuser --email "native.wu@xxx.com" --force-update --password “”
发现密码还是不行,直接点忘记密码通过邮箱重置密码后ok。
报错“undefinedtable('relation "sentry_option" does not exist”
cloud.tencent.com/developer/a…
应该是我prod环境直接配置service为NodePort,影响了sentry服务间通信,导致初始化数据库失败
外网域名退出登陆报错
{"detail":"CSRF Failed: Referer checking failed - sentry.xxxxxx.com/settings/se… does not match any trusted origins."}
为啥内网域名没有这个问题呢? 想了想外网的路径是“网页-CLB-服务”,内网的路径是“网页-CLB-nginx-服务”,是不是外网也过一下nginx就ok了呢? 然后在kube-system命名空间下,配置了一个外网LB,转到nginx的LoadBalance上。然后再nginx上配置了下外网域名转发sentry服务。果然ok了。