概要
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の接続情報に書き換える。
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に以下を追記。
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を起動する。
$ 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。