如何在Cloud Composer群集中启动云代理

时间:2019-04-03 12:31:41

标签: kubernetes google-cloud-platform google-cloud-composer cloud-sql-proxy

如何为云作曲家集群启动云代理

当前,我们使用气流来管理作业和动态DAG创建。为此,编写了一个单独的Dag来检查PostgreSQL中的数据库表是否存在现有规则,并且如果PostgreSQL中的规则是活动/非活动状态,我们将在Airflow中手动设置为关闭/打开动态DAG。现在,我们将使用Google的self管理Cloud Composer,但问题在于我们无法访问Cloud Composer的数据库。我们如何使用Cloud sql代理解决此问题?

2 个答案:

答案 0 :(得分:0)

实际上已经可以访问Cloud Composer数据库,因为在环境的附加GKE集群中运行着一个Cloud SQL代理。您可以使用airflow-sqlproxy-service在群集中使用其服务名称root连接到它。例如,在Composer 1.6.0上,并且如果您具有Kubernetes群集凭据,则可以列出正在运行的Pod:

$ kubectl get po --all-namespaces
composer-1-6-0-airflow-1-9-0-6f89fdb7   airflow-database-init-job-kprd5                                  0/1     Completed   0          1d
composer-1-6-0-airflow-1-9-0-6f89fdb7   airflow-scheduler-78d889459b-254fm                               2/2     Running     18         1d
composer-1-6-0-airflow-1-9-0-6f89fdb7   airflow-worker-569bc59df5-x6jhl                                  2/2     Running     5          1d
composer-1-6-0-airflow-1-9-0-6f89fdb7   airflow-worker-569bc59df5-xxqk7                                  2/2     Running     5          1d
composer-1-6-0-airflow-1-9-0-6f89fdb7   airflow-worker-569bc59df5-z5lnj                                  2/2     Running     5          1d
default                                 airflow-redis-0                                                  1/1     Running     0          1d
default                                 airflow-sqlproxy-668fdf6c4-vxbbt                                 1/1     Running     0          1d
default                                 composer-agent-6f89fdb7-0a7a-41b6-8d98-2dbe9f20d7ed-j9d4p        0/1     Completed   0          1d
default                                 composer-fluentd-daemon-g9mgg                                    1/1     Running     326        1d
default                                 composer-fluentd-daemon-qgln5                                    1/1     Running     325        1d
default                                 composer-fluentd-daemon-wq5z5                                    1/1     Running     326        1d

您可以看到其中一个工作容器名为airflow-worker-569bc59df5-x6jhl,并在命名空间composer-1-6-0-airflow-1-9-0-6f89fdb7中运行。如果我通过SSH连接到其中一个服务器并运行MySQL CLI,则可以访问数据库:

$ kubectl exec \
    -it airflow-worker-569bc59df5-x6jhl \
    --namespace=composer-1-6-0-airflow-1-9-0-6f89fdb7 -- \
      mysql \
        -u root \
        -h airflow-sqlproxy-service.default

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 27147
Server version: 5.7.14-google-log (Google)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

TL; DR(对于DAG中运行的任何对象),请使用root@airflow-sqlproxy-service.default进行连接而无需输入密码。这将通过Composer环境中已经运行的Cloud SQL代理连接到Airflow元数据数据库。


如果您需要连接到不是不是在Cloud SQL中运行的Airflow数据库的数据库,则可以通过将新的代理pod部署到GKE中来启动另一个代理(就像您将部署将其他所有内容放入Kubernetes集群中。

答案 1 :(得分:0)

我面临着同样的问题,但是我试图连接到PostgreSQL。 我旋转了一个代理以连接到我的PostgreSQL数据库实例,然后像上面提到的mysql服务一样公开一个服务。

现在,当我尝试使用以下命令从工作人员吊舱连接到postgres实例时

kubectl exec -it airflow-worker-868565cd98-mqtwd --namespace = composer-1-6-1-airflow-1-10-1-d6d19900-psql“ host = airflow-pgproxy-service.default dbname =提醒用户=”

我遇到错误 psql:无法连接到服务器:连接被拒绝         服务器是否在主机“ airflow-pgproxy-service.default”上运行并接受         端口5432上的TCP / IP连接? 命令以退出代码2终止

但是,我按照上述步骤连接到mysql实例,对我来说效果很好