ラベル PostgreSQL の投稿を表示しています。 すべての投稿を表示
ラベル PostgreSQL の投稿を表示しています。 すべての投稿を表示

2024年10月18日金曜日

KubernetesでPostgreSQLの共有メモリを増やす

KubernetesでPostgreSQLの共有メモリを増やすには以下の手順を実行します。

1. 現在の設定の確認
kubectl exec --stdin --tty ※ポッド名 --container ※コンテナ名 -- /usr/local/bin/psql -U postgres
クライアントから確認
show shared_buffers;

2. 設定変更
PVに割り当てられたディレクトリからpostgresql.confを変更
■変更前
shared_buffers = 128MB                  # min 128kB
                                        # (change requires restart)
■変更後
shared_buffers = 256MB                  # min 128kB
                                        # (change requires restart)

Documentationでは1GB以上のRAMがあればshared_buffersに対する妥当な初期値はシステムメモリの25%。
https://www.postgresql.jp/document/16/html/runtime-config-resource.html

3. 再起動して変更を反映
kubectl rollout restart deployment ※デプロイメント名

4. 再度設定確認

2024年10月17日木曜日

KubernetesでPostgreSQLをアップグレードする方法

KubernetesでPostgreSQLをアップグレードする場合、以下の順序でバージョンアップを行います。

1. 現バージョンでバックアップを取得
kubectl exec --stdin ※ポッド名 --container ※コンテナ名 -- /usr/local/bin/pg_dumpall -U postgres > dumpall.sql

2. バージョンアップ後に使用するPV/PVCを作成

3. deploymentなどで使用するPostgreSQLのイメージを新しいものに変更し、PVCもあたらしいものを参照するようにymlを更新。kubectl applyで反映。

4. 新バージョンでデータをインポート
cat dumpall.sql | kubectl exec --stdin ※ポッド名 --container ※コンテナ名 -- /usr/local/bin/psql -U postgres

5. 動作確認後、古いバージョンのPV/PVCを削除

2022年6月22日水曜日

Ubuntu Desktop 22.04にDBeaverとPostgreSQL14をインストールする

DBeaverは様々なデータベースに対応したデータベースクライアントです。

〇DBeaverの画面

インストール方法

1.PostgreSQL14のインストール
以下のコマンドを実行します。テスト用DB名・ユーザ名・パスワードなど適宜変更してください。
sudo apt-get update

sudo apt-get -y install postgresql-14

echo "listen_addresses='*'" | sudo tee -a /etc/postgresql/14/main/postgresql.conf

echo "host    all         all         127.0.0.1/32          password" | sudo tee -a /etc/postgresql/14/main/pg_hba.conf
※ネットワーク設定は適宜変更してください
echo "host    all         all         192.168.1.0/24          password" | sudo tee -a /etc/postgresql/14/main/pg_hba.conf

sudo systemctl restart postgresql.service

sudo su - postgres << EOF
psql -c "
alter user postgres with password 'postgres';
create user test with password 'test';
"
psql -c "
create database test owner test encoding 'UTF8' lc_collate 'ja_JP.UTF-8' lc_ctype 'ja_JP.UTF-8' template 'template0';
"
EOF

2. JDKのインストール
sudo apt-get -y install openjdk-11-jdk

3. DBeaverのインストール
cd /opt

sudo wget https://dbeaver.io/files/dbeaver-ce-latest-linux.gtk.x86_64.tar.gz

sudo tar xvfz dbeaver-ce-latest-linux.gtk.x86_64.tar.gz

cat << EOF | sudo tee /usr/share/applications/dbeaver.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/dbeaver/dbeaver
Icon=/opt/dbeaver/dbeaver.png
Name=DBeaver
Categories=Development;
EOF

関連情報

・DBeaverに関する他の記事はこちらを参照してください。

2022年4月14日木曜日

k3sで同一ポッド内にn8n.ioとPostgreSQLを配置する

n8n.ioは自動化ワークフローツールです。k3s同一ポッド内にn8n.ioとPostgreSQLを配置するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
k3sがインストールされているホスト上でlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/n8n-pg-data

sudo mkdir -p /var/n8n-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/n8n-pg-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

※n8n.io用
cat << EOF > local-n8n-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-n8n-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/n8n-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-n8n-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

※n8n.io用
cat << EOF > local-n8n-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-n8n-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-n8n-pv
EOF

sudo k3s kubectl apply -f ./local-n8n-pvc.yml

4. n8n.ioとPostgreSQLのDeploymentの作成
以下のコマンドでn8n.ioとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > n8n-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n-pg-deployment
  labels:
    app: n8n-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: n8n-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: n8n
        - name: POSTGRES_USER
          value: n8n
        - name: POSTGRES_PASSWORD
          value: n8n
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: n8n
        image: n8nio/n8n
        env:
        - name: DB_TYPE
          value: postgresdb
        - name: DB_POSTGRESDB_DATABASE
          value: n8n
        - name: DB_POSTGRESDB_HOST
          value: 127.0.0.1
        - name: DB_POSTGRESDB_PORT
          value: "5432"
        - name: DB_POSTGRESDB_USER
          value: n8n
        - name: DB_POSTGRESDB_PASSWORD
          value: n8n
        - name: GENERIC_TIMEZONE
          value: Asia/Tokyo
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 5678
        volumeMounts:
        - name: n8n-data
          mountPath: /home/node/.n8n
      dnsConfig:
        options:
        - name: ndots
          value: "1"
      volumes:
      - name: n8n-data
        persistentVolumeClaim:
          claimName: local-n8n-pvc
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

sudo k3s kubectl apply -f ./n8n-pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > n8n-service.yml
apiVersion: v1
kind: Service
metadata:
  name: n8n-service
spec:
  selector:
    app: n8n-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 5678
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

sudo k3s kubectl apply -f ./n8n-service.yml

ブラウザからhttp://<ホスト名またはIP>:8080/ にアクセスしてワークフローを作成します。

2022年4月12日火曜日

k3sで同一ポッド内にPostgreSQLとMetabaseを配置する

Metabaseはオープンソースのデータ解析・可視化ツールです。k3sで同一ポッド内にPostgreSQLとMetabaseを配置するには、以下の手順を実行します(metabase公式のイメージはamd64のみです)。

〇Metabaseの画面

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/metabase

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

※Metabase用
cat << EOF > local-metabase-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-metabase-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/metabase
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-metabase-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

※Metabase用
cat << EOF > local-metabase-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-metabase-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-metabase-pv
EOF

sudo k3s kubectl apply -f ./local-metabase-pvc.yml

4. MetabaseとPostgrelSQLのDeploymentの作成
以下のコマンドでMetabaseとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > metabase-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metabase-pg-deployment
  labels:
    app: metabase-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metabase-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metabase-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: metabase
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: metabase
        image: metabase/metabase
        env:
        - name: MB_DB_FILE
          value: /metabase-data/metabase.db
        - name: MB_DB_TYPE
          value: postgres
        - name: MB_DB_DBNAME
          value: metabase
        - name: MB_DB_PORT
          value: "5432"
        - name: MB_DB_USER
          value: postgres
        - name: MB_DB_PASS
          value: mypostgres
        - name: MB_DB_HOST
          value: 127.0.0.1
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: metabase-data
          mountPath: /metabase-data
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: metabase-data
        persistentVolumeClaim:
          claimName: local-metabase-pvc
EOF

sudo k3s kubectl apply -f ./metabase-pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > metabase-service.yml
apiVersion: v1
kind: Service
metadata:
  name: metabase-service
spec:
  selector:
    app: metabase-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./metabase-service.yml

ブラウザからhttp://<ホスト名:8080 にアクセスします。

言語、ユーザアカウント情報を入力して、「3.データを追加する」で以下の様に入力します。
データベースのタイプ: PostgreSQL
名前: pg
ホスト: 127.0.0.1
ポート: 5432
データベース名: metabase
ユーザ: postgres
パスワード: mypostgres

2022年4月11日月曜日

k3sで同一ポッド内にPostgreSQLとKanboardを配置する(local永続ボリューム使用)

Kanboardはタスク管理をおこなうPHP製のソフトウェアです。k3sで同一ポッド内にPostgreSQLとKanboardを配置するには、以下の手順を実行します。PostgreSQLとKanboardのデータはlocal永続ボリュームに保存します。

実行手順

1. KanboardとPostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/kanboard_data

sudo mkdir -p /var/kanboard_plugins

sudo mkdir -p /var/kanboard_ssl

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

※Kanboardデータ用
cat << EOF > local-kanboard-data-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-data-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-kanboard-data-pv.yml

※Kanboardプラグイン用
cat << EOF > local-kanboard-plugins-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-plugins-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-kanboard-plugins-pv.yml

※KanboardのSSL用
cat << EOF > local-kanboard-ssl-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-ssl-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_ssl
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-kanboard-ssl-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

※Kanboardデータ用
cat << EOF > local-kanboard-data-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-data-pv
EOF

sudo k3s kubectl apply -f ./local-kanboard-data-pvc.yml

※Kanboardプラグイン用
cat << EOF > local-kanboard-plugins-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-plugins-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-plugins-pv
EOF

sudo k3s kubectl apply -f ./local-kanboard-plugins-pvc.yml

※KanboardのSSL用
cat << EOF > local-kanboard-ssl-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-ssl-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-ssl-pv
EOF

sudo k3s kubectl apply -f ./local-kanboard-ssl-pvc.yml

4. KanboardとPostgreSQLのDeploymentの作成
以下のコマンドでkanboardとpostgresqlを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > kanboard-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kanboard-pg-deployment
  labels:
    app: kanboard-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kanboard-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: kanboard-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: kanboard
        - name: POSTGRES_USER
          value: kanboard
        - name: POSTGRES_PASSWORD
          value: kanboard
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pg-data
          mountPath: /var/lib/postgresql/data
      - name: kanboard
        image: kanboard/kanboard:latest
        env:
        - name: DATABASE_URL
          value: postgres://kanboard:kanboard@127.0.0.1:5432/kanboard
        ports:
        - containerPort: 80
          name: http
        - containerPort: 443
          name: https
        volumeMounts:
        - name: kanboard-data
          mountPath: /var/www/app/data
        - name: kanboard-plugins
          mountPath: /var/www/app/plugins
        - name: kanboard-ssl
          mountPath: /etc/nginx/ssl
      volumes:
      - name: pg-data
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: kanboard-data
        persistentVolumeClaim:
          claimName: local-kanboard-data-pvc
      - name: kanboard-plugins
        persistentVolumeClaim:
          claimName: local-kanboard-plugins-pvc
      - name: kanboard-ssl
        persistentVolumeClaim:
          claimName: local-kanboard-ssl-pvc
EOF

sudo k3s kubectl apply -f ./kanboard-pg-deployment.yml

5. KanboardとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > kanboard-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: kanboard-pg-service
spec:
  selector:
    app: kanboard-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 8443
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

sudo k3s kubectl apply -f ./kanboard-pg-service.yml

ブラウザから以下のURLからKanboardにアクセスします。
http://<k3sをインストールしたホストのIP>:8080/
初期ログインはユーザadmin、パスワードadminでログインしてください。

関連情報

・Kanboardの設定・操作方法については「Kanboardの設定・操作」を参照してください。

・Python API Client for Kanboardのついてのまとめは「Python API Client for KanboardでKanboardをコントロールする」を参照してください。

・Kanboardに関する他の情報はこちらを参照してください。

・Kanboardのgithubリポジトリ
https://github.com/kanboard/kanboard

2022年4月8日金曜日

k3sで同一ポッド内にPostgreSQLとApache Supersetを配置する

Apache SupersetはPython製のBIツールです。k3sで同一ポッド内にPostgreSQLとApache Supersetを配置するには、以下の手順を実行します(公式イメージはamd64のみ)。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/pg-data

sudo mkdir -p /var/superset-data

cd /var/superset-data

SECRET_KEY=`echo -e "import os; print(os.urandom(24).hex())" | python3`

cat << EOF | sudo tee superset_config.py
# Superset specific config
ROW_LIMIT = 5000

BABEL_DEFAULT_LOCALE='ja'

SUPERSET_WEBSERVER_PORT = 8088

# Flask App Builder configuration
# Your App secret key
#SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'
SECRET_KEY = '#####'

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
#SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db'
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:mypostgres@127.0.0.1/superset'

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []
# A CSRF token that expires in 1 year
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''
EOF

sudo sed -i "s/#####/$SECRET_KEY/" superset_config.py

cd

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pg-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF

sudo k3s kubectl apply -f ./local-pg-pv.yml

※superset用
cat << EOF > local-superset-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-superset-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/superset-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF

sudo k3s kubectl apply -f ./local-superset-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

※superset用
cat << EOF > local-superset-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-superset-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-superset-pv
EOF

sudo k3s kubectl apply -f ./local-superset-pvc.yml

4. SupersetとPostgrelSQLのDeploymentの作成
以下のコマンドでsupersetとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > superset-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: superset-pg-deployment
  labels:
    app: superset-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: superset-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: superset-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: superset
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: superset
        image: apache/superset:latest
        command: ["/bin/sh","-c"]
        args: ["pip install psycopg2 ; superset fab create-admin --username admin --firstname Superset --lastname Admin --email admin@superset.com --password admin ; superset db upgrade ; superset load_examples ; superset init ; /usr/bin/run-server.sh"]
        env:
        - name: PYTHONPATH
          value: /opt
        ports:
        - containerPort: 8088
        volumeMounts:
        - name: superset
          mountPath: /opt
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: superset
        persistentVolumeClaim:
          claimName: local-superset-pvc
EOF

sudo k3s kubectl apply -f ./superset-pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > superset-service.yml
apiVersion: v1
kind: Service
metadata:
  name: superset-service
spec:
  selector:
    app: superset-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8088
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./superset-service.yml

ブラウザからhttp://<ホスト名またはIP>:8080 にアクセスします。ユーザ名admin、パスワードadminでログインします。

〇Apache Supersetの画面

関連情報

・Apache Supersetのインストール方法・ダッシュボードやチャートの作成方法は以下のページを参照してください。
Apache Supersetのまとめ

2022年4月7日木曜日

k3sで同一ポッド内にPostgreSQLとpgAdmin4を配置する

pgAdmin4はPostgreSQL用のwebインターフェイスです。k3sで同一ポッド内にPostgreSQLとpgAdmin4を配置するには、以下の手順を実行します(pgAdmin4の32bit armのイメージは無いようです)。データはlocal永続ボリュームに保存します。

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでpgAdmin4とPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/pgadmin-data

sudo chown 5050:5050 /var/pgadmin-data

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

※pgadmin4用
cat << EOF > local-pgadmin-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pgadmin-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgadmin-data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pgadmin-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

※pgadmin4用
cat << EOF > local-pgadmin-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pgadmin-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pgadmin-pv
EOF

sudo k3s kubectl apply -f ./local-pgadmin-pvc.yml

4. pgadmin4とPostgrelSQLのDeploymentの作成
以下のコマンドでpgadmin4とPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > pgadmin4-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin4-pg-deployment
  labels:
    app: pgadmin4-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgadmin4-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pgadmin4-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: pgadmin4
        image: dpage/pgadmin4
        env:
        - name: PGADMIN_DEFAULT_EMAIL
          value: admin@localhost.localdomain
        - name: PGADMIN_DEFAULT_PASSWORD
          value: admin
        ports:
        - containerPort: 80
        volumeMounts:
        - name: pgadmindata
          mountPath: /var/lib/pgadmin
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: pgadmindata
        persistentVolumeClaim:
          claimName: local-pgadmin-pvc
EOF

sudo k3s kubectl apply -f ./pgadmin4-pg-deployment.yml

5. pgadmin4とPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > pgadmin4-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: pgadmin4-pg-service
spec:
  selector:
    app: pgadmin4-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./pgadmin4-pg-service.yml

ブラウザから以下のURLからpgadmin4にアクセスします。
http://<k3sをインストールしたホストのIP>:8080/

6. ログイン画面でpgadmin4-pg-deployment.ymlで指定したユーザ名admin@localhost.localdomain、パスワードadminを指定します。

7. Add New Serverアイコンをクリックします

8. 接続名を入力します。

9. Connectionタブをクリックして、Hostnameとして127.0.0.1、Usernameとしてpostgres、Passwordにmypostgresを指定します。

2022年4月1日金曜日

k3sでPostgreSQLとAdminerを配置する

AdminerはPostgreSQLやMySQL等に対応したwebインターフェイスです。k3sでPostgreSQLとAdminerを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

〇Adminerの画面

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

4. AdminerとPostgrelSQLのDeploymentの作成
以下のコマンドでadminerとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > adminer-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: adminer-pg-deployment
  labels:
    app: adminer-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: adminer-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: adminer-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: adminer
        image: adminer:4-standalone
        env:
        - name: ADMINER_DEFAULT_SERVER
          value: 127.0.0.1
        ports:
        - containerPort: 8080
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

sudo k3s kubectl apply -f ./adminer-pg-deployment.yml

5. AdminerとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > adminer-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: adminer-pg-service
spec:
  selector:
    app: adminer-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./adminer-pg-service.yml

ブラウザから以下のURLからAdminerにアクセスします。
http://<k3sをインストールしたホストのIP>:8080/
ログインフォームでは、以下を選択します。
データベース種類: PostgreSQL
サーバ: 127.0.0.1
ユーザ名: postgres
パスワード: mypostgres
データベース: postgres

2022年3月30日水曜日

k3sで同一ポッド内にPostgreSQLとpgwebを配置する(local永続ボリューム使用)

pgwebはPostgreSQLのwebインターフェイスです。k3sで同一ポッド内にPostgreSQLとpgwebを配置するには、以下の手順を実行します(注:pgwebのarmの32ビットイメージは無いようです)。PostgreSQLのデータはlocal永続ボリュームに保存します。

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

4. pgwebとPostgrelSQLのDeploymentの作成
以下のコマンドでpgwebとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > pgweb-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgweb-pg-deployment
  labels:
    app: pgweb-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgweb-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pgweb-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        - name: POSTGRES_DB
          value: pgweb
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: pgweb
        image: sosedoff/pgweb
        env:
        - name: DATABASE_URL
          value: postgres://postgres:postgres@127.0.0.1:5432/pgweb?sslmode=disable
        ports:
        - containerPort: 8081
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

sudo k3s kubectl apply -f ./pgweb-pg-deployment.yml

5. pgwebとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > pgweb-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: pgweb-pg-service
spec:
  selector:
    app: pgweb-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8081
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./pgweb-pg-service.yml

ブラウザから以下のURLからpgwebにアクセスします。
http://<k3sをインストールしたホストのIP>:8080/

2022年3月28日月曜日

k3sでlocal永続ボリュームを使用するPostgreSQL14をデプロイする

k3sでlocal永続ボリュームを使用するPostgreSQL14をデプロイするには、以下の手順を実行します。

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

sudo k3s kubectl apply -f ./local-pg-pvc.yml

4. Deploymentの作成
以下のコマンドでPostgreSQLのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pg-deployment
  labels:
    app: mypg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mypg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mypg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

sudo k3s kubectl apply -f ./pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: pg-service
spec:
  selector:
    app: mypg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるk3sをインストールしたホストのIPを設定します。
  ports:
  - protocol: TCP
    port: 5432
    targetPort: 5432
EOF

sudo k3s kubectl apply -f ./pg-service.yml

※接続確認
psql -h ※MinikubeをインストールしたホストのIP -U postgres -W postgres

※PostgreSQLのクライアントは以下のコマンドでインストールできます。
sudo apt-get -y install postgresql-client

Microk8sで同一ポッド内にPostgreSQLとpgwebを配置する(local永続ボリューム使用)

pgwebはPostgreSQLのwebインターフェイスです。Microk8sで同一ポッド内にPostgreSQLとpgwebを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

4. pgwebとPostgrelSQLのDeploymentの作成
以下のコマンドでpgwebとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > pgweb-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgweb-pg-deployment
  labels:
    app: pgweb-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgweb-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: pgweb-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        - name: POSTGRES_DB
          value: pgweb
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: pgweb
        image: sosedoff/pgweb
        env:
        - name: DATABASE_URL
          value: postgres://postgres:postgres@127.0.0.1:5432/pgweb?sslmode=disable
        ports:
        - containerPort: 8081
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

microk8s kubectl apply -f ./pgweb-pg-deployment.yml

5. pgwebとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > pgweb-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: pgweb-pg-service
spec:
  selector:
    app: pgweb-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx   # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8081
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./pgweb-pg-service.yml

ブラウザから以下のURLからpgwebにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/

2022年3月27日日曜日

Microk8sで同一ポッド内にPostgreSQLとnocodbを配置する(local永続ボリューム使用)

nocodbはコード無しでデータベースアプリケーションを作成する事のできるソフトウェアです。Microk8sで同一ポッド内にPostgreSQLとnocodbを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

〇nocodbの画面

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

4. nocodbとPostgrelSQLのDeploymentの作成
以下のコマンドでnocodbとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > nocodb-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nocodb-pg-deployment
  labels:
    app: nocodb-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nocodb-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nocodb-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        - name: POSTGRES_DB
          value: nocodb
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: nocodb
        image: nocodb/nocodb:latest
        env:
        - name: NC_DB
          value: pg://127.0.0.1:5432?u=postgres&p=mypostgres&d=nocodb
        - name: NC_AUTH_JWT_SECRET
          value: 569a1821-0a93-45e8-87ab-eb857f20a010
        ports:
        - containerPort: 8080
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

microk8s kubectl apply -f ./nocodb-pg-deployment.yml

5. nocodbとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nocodb-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nocodb-pg-service
spec:
  selector:
    app: nocodb-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx  # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./nocodb-pg-service.yml

ブラウザから以下のURLからnocodbにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
最初にSuper adminとなるユーザの情報を入力します。

2022年3月25日金曜日

Microk8sで同一ポッド内にPostgreSQLとMetabaseを配置する

Metabaseはオープンソースのデータ解析・可視化ツールです。Microk8sで同一ポッド内にPostgreSQLとMetabaseを配置するには、以下の手順を実行します。

〇Metabaseの画面

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/metabase

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

※Metabase用
cat << EOF > local-metabase-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-metabase-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/metabase
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-metabase-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

※Metabase用
cat << EOF > local-metabase-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-metabase-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-metabase-pv
EOF

microk8s kubectl apply -f ./local-metabase-pvc.yml

4. MetabaseとPostgrelSQLのDeploymentの作成
以下のコマンドでMetabaseとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > metabase-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metabase-pg-deployment
  labels:
    app: metabase-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metabase-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metabase-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: metabase
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: metabase
        image: metabase/metabase
        env:
        - name: MB_DB_FILE
          value: /metabase-data/metabase.db
        - name: MB_DB_TYPE
          value: postgres
        - name: MB_DB_DBNAME
          value: metabase
        - name: MB_DB_PORT
          value: "5432"
        - name: MB_DB_USER
          value: postgres
        - name: MB_DB_PASS
          value: mypostgres
        - name: MB_DB_HOST
          value: 127.0.0.1
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: metabase-data
          mountPath: /metabase-data
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: metabase-data
        persistentVolumeClaim:
          claimName: local-metabase-pvc
EOF

microk8s kubectl apply -f ./metabase-pg-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > metabase-service.yml
apiVersion: v1
kind: Service
metadata:
  name: metabase-service
spec:
  selector:
    app: metabase-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./metabase-service.yml

ブラウザからhttp://<ホスト名:8080 にアクセスします。

言語、ユーザアカウント情報を入力して、「3.データを追加する」で以下の様に入力します。
データベースのタイプ: PostgreSQL
名前: pg
ホスト: localhost
ポート: 5432
データベース名: metabase
ユーザ: postgres
パスワード: mypostgres

〇Metabaseの画面

2022年3月22日火曜日

Microk8sで同一ポッド内にMantis Bug TrackerとPostgreSQLを配置する(local永続ボリューム使用)

Microk8sで同一ポッド内にMantis Bug TrackerとPostgreSQLを配置するには、以下の手順を実行します。Mantis Bug Trackerの構成フォルダとPostgreSQLのデータはlocal永続ボリュームに保存します。

〇MantisBTの画面
デフォルトユーザ/パスワードはadministrator/rootです。

実行手順

1. ビルトインレジストリの有効化(※既に実施している場合はスキップしてください)
Microk8sがインストールされているホスト上で以下のコマンドを実行します。
microk8s enable registry:size=50Gi
※registryプラグインが有効化してあるか不明な場合はmicrok8s statusコマンドを実行します。

Dockerがインストールしてあるリモートマシン上で以下のコマンドを実行します。192.168.1.1の部分は、Microk8sのホストのIPに変更してください。
cat << EOF | sudo tee /etc/docker/daemon.json
{
    "insecure-registries" : ["192.168.1.1:32000"]
}
EOF

sudo systemctl restart docker

2. 以下のDockerfileを使用してイメージを作成します
cat << EOF > Dockerfile
FROM alpine:3.15
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-pgsql php8-pdo php8-pdo_pgsql php8-intl php8-mbstring php8-session php8-curl php8-json php8-xml php8-zip php8-tokenizer php8-ctype php8-gd php8-xmlwriter php8-xmlreader php8-dom php8-zlib php8-iconv php8-simplexml php8-fileinfo openssl openrc unzip \
  && rm -rf /var/cache/apk/* \
  && wget https://sourceforge.net/projects/mantisbt/files/mantis-stable/2.25.2/mantisbt-2.25.2.tar.gz \
  && tar xvfz mantisbt-2.25.2.tar.gz \
  && rm -f mantisbt-2.25.2.tar.gz \
  && mv /var/www/localhost/htdocs /var/www/localhost/htdocs.bak \
  && mv mantisbt-2.25.2 /var/www/localhost/htdocs \
  && chown -R apache:apache /var/www/localhost/htdocs \
  && mkdir -p /run/apache2
EXPOSE 80
VOLUME ["/var/www/localhost/htdocs/config"]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EOF

・イメージ作成コマンド ※192.168.1.1の部分はMicrok8sのホストのIPに変更してください。
docker build . -t 192.168.1.1:32000/mantisbtpg:latest

・イメージのタグ付け
docker tag `docker images | grep '192.168.1.1:32000/mantisbtpg' | awk '{print $3}'` 192.168.1.1:32000/mantisbtpg:latest

・イメージをビルトインレジストリにプッシュ
docker push 192.168.1.1:32000/mantisbtpg:latest

・Microk8sのサーバ上で、イメージが登録されたことを確認するには以下のコマンドを実行します。
wget http://192.168.1.1:32000/v2/_catalog -O -

3. Mantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成
以下のコマンドでMantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成します。
sudo mkdir -p /var/mantisbt-conf

sudo mkdir -p /var/pgdata

sudo chown 100:101 /var/mantisbt-conf/

4. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※Mantis Bug Tracker用
cat << EOF > local-mantisbt-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-mantisbt-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mantisbt-conf
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mantisbt-pv.yml

※PostgreSQL用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

5. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※Mantis Bug Tracker用
cat << EOF > local-mantisbt-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-mantisbt-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-mantisbt-pv
EOF

microk8s kubectl apply -f ./local-mantisbt-pvc.yml

※PostgreSQL用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

6. Mantis Bug TrackerとPostgreSQLのDeploymentの作成
以下のコマンドでMantis Bug TrackerとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > mantisbt-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mantisbt-pg-deployment
  labels:
    app: mantisbt-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mantisbt-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mantisbt-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: mantisbt
        - name: POSTGRES_USER
          value: mantisbt
        - name: POSTGRES_PASSWORD
          value: mantisbt
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: mantisbt
        image: localhost:32000/mantisbtpg:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: mantisbt-conf
          mountPath: /var/www/localhost/htdocs/config
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: mantisbt-conf
        persistentVolumeClaim:
          claimName: local-mantisbt-pvc
EOF

microk8s kubectl apply -f ./mantisbt-pg-deployment.yml

7. Mantis Bug TrackerとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > mantisbt-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: mantisbt-pg-service
spec:
  selector:
    app: mantisbt-pg
  type: LoadBalancer
  externalIPs:
  - 192.168.1.1 # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./mantisbt-pg-service.yml

8. ブラウザから以下のURLからmantisbtにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
Installer Optionsで以下の項目を入力する
Type of Database: PostgreSQL
Hostname (for Database Server): 127.0.0.1
Username (for Database): mantisbt
Password (for Database): mantisbt
Database name (for Database): mantisbt

2022年3月19日土曜日

Microk8sで同一ポッド内にPostgreSQLとKanboardを配置する(local永続ボリューム使用)

Kanboardはタスク管理をおこなうPHP製のソフトウェアです。Microk8sで同一ポッド内にPostgreSQLとKanboardを配置するには、以下の手順を実行します。PostgreSQLとKanboardのデータはlocal永続ボリュームに保存します。

実行手順

1. KanboardとPostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

sudo mkdir -p /var/kanboard_data

sudo mkdir -p /var/kanboard_plugins

sudo mkdir -p /var/kanboard_ssl

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

※Kanboardデータ用
cat << EOF > local-kanboard-data-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-data-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-kanboard-data-pv.yml

※Kanboardプラグイン用
cat << EOF > local-kanboard-plugins-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-plugins-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_data
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-kanboard-plugins-pv.yml

※KanboardのSSL用
cat << EOF > local-kanboard-ssl-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-kanboard-ssl-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/kanboard_ssl
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-kanboard-ssl-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※PostgreSQLデータ用
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

※Kanboardデータ用
cat << EOF > local-kanboard-data-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-data-pv
EOF

microk8s kubectl apply -f ./local-kanboard-data-pvc.yml

※Kanboardプラグイン用
cat << EOF > local-kanboard-plugins-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-plugins-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-plugins-pv
EOF

microk8s kubectl apply -f ./local-kanboard-plugins-pvc.yml

※KanboardのSSL用
cat << EOF > local-kanboard-ssl-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-kanboard-ssl-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-kanboard-ssl-pv
EOF

microk8s kubectl apply -f ./local-kanboard-ssl-pvc.yml

4. KanboardとPostgreSQLのDeploymentの作成
以下のコマンドでkanboardとpostgresqlを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > kanboard-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kanboard-pg-deployment
  labels:
    app: kanboard-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kanboard-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: kanboard-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_DB
          value: kanboard
        - name: POSTGRES_USER
          value: kanboard
        - name: POSTGRES_PASSWORD
          value: kanboard
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pg-data
          mountPath: /var/lib/postgresql/data
      - name: kanboard
        image: kanboard/kanboard:latest
        env:
        - name: DATABASE_URL
          value: postgres://kanboard:kanboard@127.0.0.1:5432/kanboard
        ports:
        - containerPort: 80
          name: http
        - containerPort: 443
          name: https
        volumeMounts:
        - name: kanboard-data
          mountPath: /var/www/app/data
        - name: kanboard-plugins
          mountPath: /var/www/app/plugins
        - name: kanboard-ssl
          mountPath: /etc/nginx/ssl
      volumes:
      - name: pg-data
        persistentVolumeClaim:
          claimName: local-pg-pvc
      - name: kanboard-data
        persistentVolumeClaim:
          claimName: local-kanboard-data-pvc
      - name: kanboard-plugins
        persistentVolumeClaim:
          claimName: local-kanboard-plugins-pvc
      - name: kanboard-ssl
        persistentVolumeClaim:
          claimName: local-kanboard-ssl-pvc
EOF

microk8s kubectl apply -f ./kanboard-pg-deployment.yml

5. KanboardとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > kanboard-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: kanboard-pg-service
spec:
  selector:
    app: kanboard-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 8443
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./kanboard-pg-service.yml

ブラウザから以下のURLからKanboardにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/
初期ログインはユーザadmin、パスワードadminでログインしてください。

2022年3月14日月曜日

Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行う

Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行うには、以下の手順を実行します。バックアップの取得と同時に圧縮も行います。

実行手順

1. 以下のDockerfileを使用してPostgreSQLのpg_dumpをインストールしたイメージを作成します。
Dockerfile
FROM alpine:3.15
RUN apk --no-cache add postgresql-client \
  && mkdir /data
WORKDIR /data
VOLUME ["/data"]
ENV PG_HOST=localhost \
  PG_USER=postgres \
  PGPASSWORD=postgres \
  PG_DB=postgres \
  PG_PORT=5432 \
  BASENAME=backup \
  POSTFIX=_
CMD ["/bin/sh", "-c", "/usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB}  | gzip > /data/${BASENAME}${POSTFIX}.dmp.gz"]

・イメージビルド用コマンド
docker build --no-cache -t mypgdump .

2. 以下のコマンドでコンテナ内のpg_dumpコマンドを実行します。
適宜、環境変数を変更してください。
docker run --rm -it -e PGPASSWORD=mypostgres -e PG_HOST=myhost -e PG_PORT=5432 -e PG_USER=postgres -e PG_DB=mydb -e BASENAME=backup -e POSTFIX=`/bin/date '+%Y%m%d-%H%M'` -v `pwd`:/data mypgdump

関連情報

・KubernetesでCronJobとして動作させる場合は、以下のページを参照してください。
Microk8sでCronJobを使用してPostgreSQLのバックアップを行う

2022年3月13日日曜日

Microk8sでPostgreSQLとAdminerを配置する

AdminerはPostgreSQLやMySQL等に対応したwebインターフェイスです。Microk8sでPostgreSQLとAdminerを配置するには、以下の手順を実行します。PostgreSQLのデータはlocal永続ボリュームに保存します。

〇Adminerの画面

実行手順

1. PostgreSQLデータ格納用ディレクトリを作成
以下のコマンドでPostgreSQLデータ格納用ディレクトリを作成します。
sudo mkdir -p /var/pgdata

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pg-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pg-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/pgdata
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pg-pv.yml

3. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pg-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pg-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pg-pv
EOF

microk8s kubectl apply -f ./local-pg-pvc.yml

4. AdminerとPostgrelSQLのDeploymentの作成
以下のコマンドでadminerとPostgreSQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > adminer-pg-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: adminer-pg-deployment
  labels:
    app: adminer-pg
spec:
  replicas: 1
  selector:
    matchLabels:
      app: adminer-pg
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: adminer-pg
    spec:
      containers:
      - name: mypg
        image: postgres:14-alpine
        env:
        - name: POSTGRES_PASSWORD
          value: mypostgres
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: pgdata
          mountPath: /var/lib/postgresql/data
      - name: adminer
        image: adminer:4-standalone
        env:
        - name: ADMINER_DEFAULT_SERVER
          value: xxx.xxx.xxx.xxx # ホストのIPアドレス
        ports:
        - containerPort: 8080
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: local-pg-pvc
EOF

microk8s kubectl apply -f ./adminer-pg-deployment.yml

5. AdminerとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > adminer-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: adminer-pg-service
spec:
  selector:
    app: adminer-pg
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

microk8s kubectl apply -f ./adminer-pg-service.yml

ブラウザから以下のURLからAdminerにアクセスします。
http://<Microk8sをインストールしたホストのIP>:8080/

ログインフォームでは、以下を選択します。
データベース種類: PostgreSQL
サーバ: 127.0.0.1
ユーザ名: postgres
パスワード: mypostgres
データベース: postgres

2022年3月11日金曜日

Microk8sでCronJobを使用してPostgreSQLのバックアップを行う

Microk8sでCronJobを使用してPostgreSQLのバックアップを行うには、以下の手順を実行します。バックアップの取得と同時に圧縮も行います。バックアップファイルは指定した永続ボリュームに保存します。

作成手順

1. ビルトインレジストリの有効化(※既に実施している場合はスキップしてください)
Microk8sがインストールされているホスト上で以下のコマンドを実行します。
microk8s enable registry:size=50Gi
※registryプラグインが有効化してあるか不明な場合はmicrok8s statusコマンドを実行します。

Dockerがインストールしてあるリモートマシン上で以下のコマンドを実行します。192.168.1.1の部分は、Microk8sのホストのIPに変更してください。
cat << EOF | sudo tee /etc/docker/daemon.json
{
    "insecure-registries" : ["192.168.1.1:32000"]
}
EOF

sudo systemctl restart docker

2. 以下のDockerfileを使用してPostgreSQLのpg_dumpをインストールしたイメージを作成します。
Dockerfile
FROM alpine:3.15
RUN apk --no-cache add postgresql-client \
  && mkdir /data
WORKDIR /data
VOLUME ["/data"]
ENV PG_HOST=localhost \
  PG_USER=postgres \
  PGPASSWORD=postgres \
  PG_DB=postgres \
  PG_PORT=5432 \
  BASENAME=backup \
  POSTFIX=_
CMD ["/bin/sh", "-c", "/usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB}  | gzip > /data/${BASENAME}${POSTFIX}.dmp.gz"]

・イメージ作成コマンド ※192.168.1.1の部分はMicrok8sのホストのIPに変更してください。
docker build . -t 192.168.1.1:32000/pgdump:latest

・イメージのタグ付け
docker tag `docker images | grep '192.168.1.1:32000/pgdump' | awk '{print $3}'` 192.168.1.1:32000/pgdump:latest

・イメージをビルトインレジストリにプッシュ
docker push 192.168.1.1:32000/pgdump:latest

・Microk8sのサーバ上で、イメージが登録されたことを確認するには以下のコマンドを実行します。
wget http://192.168.1.1:32000/v2/_catalog -O -

3. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
cat << EOF > local-pgdump-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pgdump-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /backup/mydatabase
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-pgdump-pv.yml

4. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
cat << EOF > local-pgdump-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pgdump-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-pgdump-pv
EOF

microk8s kubectl apply -f ./local-pgdump-pvc.yml

5. CronJobの作成
以下のファイルでCronJobを構成します。ここでは12:30にバックアップジョブを実行するようにしています。

cronjob-bakcup-mydatabase.yml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: pgdump
spec:
  schedule: "30 12 * * *"
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 5
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: pgdump
            image: localhost:32000/pgdump:latest
            env:
            - name: PG_HOST
              value: "192.168.1.1"
            - name: PG_USER
              value: postgres
            - name: PGPASSWORD
              value: mypostgres
            - name: PG_DB
              value: mydatabase
            - name: PG_PORT
              value: "5432"
            - name: BASENAME
              value: backup-mydatabase-
            volumeMounts:
            - name: data
              mountPath: /data
            command:
            - /bin/sh
            - -c
            - PFIX=`/bin/date '+%Y%m%d-%H%M'` && /usr/bin/pg_dump -h ${PG_HOST} -p ${PG_PORT} -U ${PG_USER} ${PG_DB}  | gzip > /data/${BASENAME}${PFIX}.dmp.gz
          restartPolicy: Never
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: local-pgdump-pvc
以下のコマンドでCronJobを作成します。
microk8s kubectl apply -f ./cronjob-bakcup-mydatabase.yml

関連情報

・Dockerの場合は、以下のページを参照してください。
Dockerでpg_dumpをインストールしたイメージ(Alpine3.15ベース)を作成してバックアップを行う