Kubernetes 如何在cloud composer集群中启动云代理

Kubernetes 如何在cloud composer集群中启动云代理,kubernetes,google-cloud-platform,google-cloud-composer,cloud-sql-proxy,Kubernetes,Google Cloud Platform,Google Cloud Composer,Cloud Sql Proxy,如何为cloud composer群集启动云代理 目前,我们使用气流管理作业和动态DAG创建。为此,编写了一个单独的Dag来检查PostgreSQL中的数据库表中是否存在现有规则&如果PostgreSQL中的规则处于活动/非活动状态,我们将在Airflow中手动设置为关闭/打开动态Dag。现在,我们将使用Google的自管理云编写器,但问题是我们无法访问云编写器的数据库。我们如何使用cloud sql proxy来解决这个问题?cloud Composer数据库实际上已经可以访问了,因为有一个c

如何为cloud composer群集启动云代理


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

cloud Composer数据库实际上已经可以访问了,因为有一个cloud sql proxy正在连接的GKE集群中运行。您可以使用其服务名称
sqlproxy服务
,使用
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
您可以看到其中一个worker Pod名为
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服务。默认值
,不带密码。这将通过已在Composer环境中运行的Cloud SQL代理连接到Airflow元数据数据库



如果您需要连接到一个不是在Cloud SQL中运行的Airflow数据库的数据库,那么您可以通过在GKE中部署一个新的代理吊舱来启动另一个代理(就像您将其他任何东西部署到Kubernetes集群中一样)。

Cloud Composer数据库实际上已经可以访问,因为在环境连接的GKE集群中运行着一个云SQL代理。您可以使用其服务名称
sqlproxy服务
,使用
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
您可以看到其中一个worker Pod名为
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服务。默认值
,不带密码。这将通过已在Composer环境中运行的Cloud SQL代理连接到Airflow元数据数据库



如果您需要连接到一个不是在Cloud SQL中运行的Airflow数据库的数据库,那么您可以通过在GKE中部署一个新的代理吊舱来启动另一个代理(就像您将其他任何东西部署到Kubernetes集群中一样)。

谢谢,这非常有帮助。有没有办法找到“myproject:myregion:myinstance”从外部连接到它?(通过另一个代理)谢谢,这非常有帮助。有没有办法找到“myproject:myregion:myinstance”从外部连接到它?(通过另一个代理)