0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Airflow on Kubernetes】メタデータDBをデフォルトのPostgreSQLからMySQLに変更する

Last updated at Posted at 2019-07-17

概要

Airflowのメタデータを管理するDBを、デフォルトのPostgreSQLからMySQLに変更する。

目次

事前準備

MySQLの用意については触れないので、別途用意してください。
また、事前にairflowという名前のDBを作成しておいてください。

変更方法

以下のファイルのsql_alchemy_connを変更する。
scripts/ci/kubernetes/kube/secrets.yaml#L25

デフォルトで設定されているsql_alchemy_connの値は、
postgresql+psycopg2://root:root@postgres-airflow:5432/airflowをbase64エンコードしたもの。

エンコード

base64でエンコードし、上記のsecrets.yamlのsql_alchemy_connの部分を書き換える。
今回は、以下の接続情報をエンコードする。

key value
user root
password Password_123
host mysql-airflow
port 3306
db airflow

Pythonでエンコード。

$ python
>>> import base64
>>> # Encode
...
>>> text = 'mysql+pymysql://root:Password_123@mysql-airflow:3306/airflow'
>>> encoded = base64.b64encode(text)
>>> print(encoded)
bXlzcWwyOi8vcm9vdDpQYXNzd29yZF8xMjNAbXlzcWwtYWlyZmxvdzo0NjY0Ni9haXJmbG93
>>>
>>> # Decode
...
>>> decoded = base64.b64decode(encoded)
>>> print(decoded)
mysql2://root:Password_123@mysql-airflow:46646/airflow
>>> quit()

secrets.yaml変更

scripts/ci/kubernetes/kube/secrets.yaml#L25を、エンコードしたMySQLの接続情報に書き換える。

scripts/ci/kubernetes/kube/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: airflow-secrets
type: Opaque
data:
  # The sql_alchemy_conn value is a base64 encoded representation of this connection string:
  # postgresql+psycopg2://root:root@postgres-airflow:5432/airflow
-  sql_alchemy_conn: cG9zdGdyZXNxbCtwc3ljb3BnMjovL3Jvb3Q6cm9vdEBwb3N0Z3Jlcy1haXJmbG93OjU0MzIvYWlyZmxvdwo=
+  sql_alchemy_conn: bXlzcWwyOi8vcm9vdDpQYXNzd29yZF8xMjNAbXlzcWwtYWlyZmxvdzo0NjY0Ni9haXJmbG93

DockerイメージにPyMySQLを追加

Airflowでpymysqlを使うためには、PyMySQLというpipモジュールをインストール必要がある。
scripts/ci/kubernetes/docker/Dockerfile#L41に以下を追記。

scripts/ci/kubernetes/docker/Dockerfile
RUN pip install PyMySQL

Dockerイメージをビルド

scripts/ci/kubernetes/docker/build.shを実行しDockerイメージを作成する。

$ sudo ./scripts/ci/kubernetes/docker/build.sh

Podを起動

postgresのコンテナを起動する必要はないので、scripts/ci/kubernetes/kube/deploy.shの以下のpostgresの部分を修正し、Podを起動する。

scripts/ci/kubernetes/kube/deploy.sh
$ git diff deploy.sh
diff --git a/deploy.sh b/deploy.sh
index e3d19d2..4a79e14 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -189,7 +189,7 @@ set -e

 kubectl apply -f $DIRNAME/secrets.yaml
 kubectl apply -f $BUILD_DIRNAME/configmaps.yaml
-kubectl apply -f $BUILD_DIRNAME/postgres.yaml
+#kubectl apply -f $BUILD_DIRNAME/postgres.yaml
 kubectl apply -f $BUILD_DIRNAME/volumes.yaml
 kubectl apply -f $BUILD_DIRNAME/airflow.yaml

@@ -220,7 +220,8 @@ do
   echo "$PODS"
   NUM_AIRFLOW_READY=$(echo $PODS | grep airflow | awk '{print $2}' | grep -E '([0-9])\/(\1)' | wc -l | xargs)
   NUM_POSTGRES_READY=$(echo $PODS | grep postgres | awk '{print $2}' | grep -E '([0-9])\/(\1)' | wc -l | xargs)
-  if [ "$NUM_AIRFLOW_READY" == "1" ] && [ "$NUM_POSTGRES_READY" == "1" ]; then
+  #if [ "$NUM_AIRFLOW_READY" == "1" ] && [ "$NUM_POSTGRES_READY" == "1" ]; then
+  if [ "$NUM_AIRFLOW_READY" == "1" ]; then
     PODS_ARE_READY=1
     break
   fi

Podを起動。

$ sudo ./scripts/ci/kubernetes/kube/deploy.sh -d {persistent_mode,git_mode}

確認

DB

MySQLにログインして、airflowのDBの中にテーブルが作成されていることを確認。

WEB UI

ブラウザから確認。ページが見れればOK。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?