手把手带你玩转ArgoCD --- 部署sentry集群

622 阅读3分钟

本文介绍如何通过ArgoCD部署sentry集群,由于argocd同步job类型任务有已知的bug,本文将详细介绍如何迂回解决。

argocd同步job类型任务有bug,

image.png 会永久卡在“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目录下 image.png

得到渲染好的job的yaml文件

image.png

然后,直接去除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 " image.png

  1. 进入postgresql容器
  2. 登录数据库命令:psql -U user_name sentry-sentry-postgresql-0:/$ psql -U postgres
  3. 查看数据库列表 \l
  4. 切换到sentry \c sentry
  5. 查看table \dt

可以看到是没有projectkey这table

参考文章juejin.cn/post/684490…

在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…

4e6945d3-a2dd-4dd5-b16e-26579877b032.jpeg

应该是我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了。

参考

segmentfault.com/a/119000003…