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

2022年3月29日火曜日

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

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

実行手順

1. ClickHouseデータ格納用ディレクトリを作成
以下のコマンドでデータ格納用ディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/clickhouse-data
sudo chown 101:101 /var/clickhouse-data

sudo mkdir -p /var/clickhouse-logs
sudo chown 101:101 /var/clickhouse-logs

sudo mkdir -p /var/clickhouse-config
sudo chown 101:101 /var/clickhouse-config
cat << EOF | sudo tee -a /var/clickhouse-config/myconfig.xml
<yandex>
    <listen_host>::</listen_host>
    <listen_host>0.0.0.0</listen_host>
    <listen_try>1</listen_try>
</yandex>
EOF
sudo chown 101:101 /var/clickhouse-config/*


sudo mkdir -p /var/clickhouse-users
sudo chown 101:101 /var/clickhouse-users

exit

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

kubectl apply -f ./local-clickhouse-data-pv.yml

〇ログ用
cat << EOF > local-clickhouse-logs-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-logs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-logs
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-clickhouse-logs-pv.yml

〇設定用
cat << EOF > local-clickhouse-config-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-config-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-config
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-clickhouse-config-pv.yml

〇ユーザ用
cat << EOF > local-clickhouse-users-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-clickhouse-users-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/clickhouse-users
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-clickhouse-users-pv.yml

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

kubectl apply -f ./local-clickhouse-data-pvc.yml

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

kubectl apply -f ./local-clickhouse-logs-pvc.yml

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

kubectl apply -f ./local-clickhouse-config-pvc.yml

〇ユーザ用
cat << EOF > local-clickhouse-users-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-clickhouse-users-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-clickhouse-users-pv
EOF

kubectl apply -f ./local-clickhouse-users-pvc.yml

4. Deploymentの作成
以下のコマンドでClickHouseのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > clickhouse-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: clickhouse-deployment
  labels:
    app: myclickhouse
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myclickhouse
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: myclickhouse
    spec:
      containers:
      - name: myclickhouse
        image: clickhouse/clickhouse-server
        ports:
        - containerPort: 9000
        - containerPort: 8123
        volumeMounts:
        - name: clickhouse-data
          mountPath: /var/lib/clickhouse
        - name: clickhouse-logs
          mountPath: /val/log/clickhouse-server
        - name: clickhouse-config
          mountPath: /etc/clickhouse-server/config.d
        - name: clickhouse-users
          mountPath: /etc/clickhouse-server/users.d
      volumes:
      - name: clickhouse-data
        persistentVolumeClaim:
          claimName: local-clickhouse-data-pvc
      - name: clickhouse-logs
        persistentVolumeClaim:
          claimName: local-clickhouse-logs-pvc
      - name: clickhouse-config
        persistentVolumeClaim:
          claimName: local-clickhouse-config-pvc
      - name: clickhouse-users
        persistentVolumeClaim:
          claimName: local-clickhouse-users-pvc
EOF

kubectl apply -f ./clickhouse-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > clickhouse-service.yml
apiVersion: v1
kind: Service
metadata:
  name: clickhouse-service
spec:
  selector:
    app: myclickhouse
  ports:
  - name: native
    protocol: TCP
    port: 9000
    targetPort: 9000
  - name: httpinterface
    protocol: TCP
    port: 8123
    targetPort: 8123
EOF

kubectl apply -f ./clickhouse-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/clickhouse-service 9000:9000 8123:8123

7. (クライアント側)clickhouse-clientのインストール(Ubuntu 20.04/Debianなど)
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4

echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee -a /etc/apt/sources.list.d/clickhouse.list

sudo apt-get update

sudo apt-get -y install clickhouse-client

8. (クライアント側)サンプルテーブルの作成
192.168.1.1の部分はMinikubeのホスト名またはIPに読み替えてください
clickhouse-client -h 192.168.1.1 --query="CREATE TABLE test (test_date Date, test_id UInt16, test_message String) ENGINE = MergeTree(test_date, (test_id), 8192);"

cat << EOF > /tmp/test.csv
2022-01-01,100,hello world!
2022-01-02,200,test data
EOF

cat /tmp/test.csv | clickhouse-client -h 192.168.1.1 --query="INSERT INTO test FORMAT CSV"

clickhouse-client -h 192.168.1.1 --query="SELECT * FROM test"

9. ブラウザからのアクセス
ブラウザからhttp://<サーバ名またはIPアドレス>:8123にアクセスします。

2022年3月11日金曜日

MinikubeでDebian 11(Bullseye)のLXDEデスクトップ環境をデプロイする

MinikubeでDebian 11(Bullseye)のLXDEデスクトップ環境をデプロイするには、以下の手順を実行します。デスクトップ環境にはリモートデスクトップで接続します。

〇リモートデスクトップで接続したMinikube上のDebian 11(Bullseye) LXDEデスクトップ環境

〇作成手順
1. 以下のDockerfileを使用してイメージを作成します
# ホスト側で実行して、dockerの向き先をminikubeにします
eval $(minikube -p minikube docker-env)

cat << EOF > Dockerfile
FROM debian:bullseye

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
  && apt-get -y install vim task-japanese locales-all \
  && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
  && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale \
  && apt-get -y install task-lxde-desktop xrdp supervisor task-japanese-desktop fcitx-mozc fonts-ipafont fonts-ipafont-gothic fonts-ipafont-mincho \
  && echo '[supervisord]' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'nodaemon=true' >> /etc/supervisor/conf.d/sv.conf \
  && echo '[program:xrdp-sesman]' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'command=/usr/sbin/xrdp-sesman -nodaemon' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'autostart=true' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'autorestart=true' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'priority=100' >> /etc/supervisor/conf.d/sv.conf \
  && echo '[program:xrdp]' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'command=/usr/sbin/xrdp -nodaemon' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'autostart=true' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'autorestart=true' >> /etc/supervisor/conf.d/sv.conf \
  && echo 'priority=200' >> /etc/supervisor/conf.d/sv.conf \
  && groupadd -g 1000 debian \
  && useradd -d /home/debian -m -s /bin/bash -u 1000 -g 1000 debian \
  && echo 'debian:debian' | chpasswd \
  && echo "debian ALL=NOPASSWD: ALL" >> /etc/sudoers \
  && mv /usr/bin/lxpolkit /usr/bin/lxpolkit.bak \
  && apt-get clean && apt-get autoremove \
  && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*

CMD ["bash", "-c", "/usr/bin/supervisord -c /etc/supervisor/supervisord.conf"]
EOF

# イメージ作成コマンド
docker build --no-cache -t debian11lxde .

2. 永続ボリューム用のフォルダ作成
minikube ssh

sudo mkdir -p /var/debian11lxde

sudo chown 1000:1000 /var/debian11lxde

exit

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

kubectl apply -f ./local-debian11lxde-pv.yml

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

kubectl apply -f ./local-debian11lxde-pvc.yml

5. Deploymentの作成
以下のコマンドで、作成したdebian11lxdeのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > debian11lxde-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: debian11lxde-deployment
  labels:
    app: mydebian11lxde
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mydebian11lxde
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mydebian11lxde
    spec:
      containers:
      - name: mydebian11lxde
        image: debian11lxde
        imagePullPolicy: Never # ローカルイメージを使用する
        ports:
        - containerPort: 3389
        volumeMounts:
        - name: debian11lxde-data
          mountPath: /home/debian
      volumes:
      - name: debian11lxde-data
        persistentVolumeClaim:
          claimName: local-debian11lxde-pvc
EOF

kubectl apply -f ./debian11lxde-deployment.yml

6. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > debian11lxde-service.yml
apiVersion: v1
kind: Service
metadata:
  name: debian11lxde-service
spec:
  selector:
    app: mydebian11lxde
  ports:
  - protocol: TCP
    port: 3389
    targetPort: 3389
EOF

kubectl apply -f ./debian11lxde-service.yml

7. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/debian11lxde-service 3389:3389

8. WindowsのリモートデスクトップやLinux上のRemminaからMinikubeホストのIPを指定して接続します。
ユーザ名debian、パスワードdebianでログインしてください。

2022年3月10日木曜日

Minikubeで同一ポッド内にphpBBとMariaDBを配置する

phpBBは掲示板アプリケーションです。Minikubeで同一ポッド内にphpBBとMariaDBを配置するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mariadb-data

sudo mkdir -p /var/phpbb-data

sudo chown 1001:1001 /var/phpbb-data

exit

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

kubectl apply -f ./local-mariadb-pv.yml

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

kubectl apply -f ./local-phpbb-pv.yml

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

kubectl apply -f ./local-mariadb-pvc.yml

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

kubectl apply -f ./local-phpbb-pvc.yml

4. phpBBとMariaDBのDeploymentの作成
以下のコマンドでphpBBとMariadbを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > phpbb-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: phpbb-mariadb-deployment
  labels:
    app: phpbb-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: phpbb-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: phpbb-mariadb
    spec:
      containers:
      - name: mariadb
        image: mariadb:10.7-focal
        env:
        - name: MARIADB_ROOT_PASSWORD
          value: phpbb
        - name: MARIADB_DATABASE
          value: phpbb
        - name: MARIADB_USER
          value: phpbb
        - name: MARIADB_PASSWORD
          value: phpbb
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: pnpbb
        image: bitnami/phpbb:latest
        env:
        - name: PHPBB_DATABASE_USER
          value: phpbb
        - name: PHPBB_DATABASE_PASSWORD
          value: phpbb
        - name: PHPBB_DATABASE_NAME
          value: phpbb
        - name: PHPBB_DATABASE_HOST
          value: 127.0.0.1
        - name: PHPBB_FORUM_NAME
          value: サンプルフォーラム
        - name: PHPBB_FORUM_DESCRIPTION
          value: サンプルのフォーラムです
        - name: PHPBB_USERNAME
          value: admin
        - name: PHPBB_PASSWORD
          value: admin
        - name: PHPBB_EMAIL
          value: admin@localhost.localdomain
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: phpbb-data
          mountPath: /bitnami
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
      - name: phpbb-data
        persistentVolumeClaim:
          claimName: local-phpbb-pvc
EOF

kubectl apply -f ./phpbb-mariadb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > phpbb-mariadb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: phpbb-mariadb-service
spec:
  selector:
    app: phpbb-mariadb
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./phpbb-mariadb-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/phpbb-mariadb-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080/ にアクセスします。
ユーザ名admin、パスワードadminでログインします。

2022年3月9日水曜日

MinikubeでNode-Redを配備する

Node-Redを使用してフロー図によるプログラム開発を行うことができます。MinikubeでNode-Redを配備するには、以下の手順を実行します。データはlocal永続ボリュームに保存します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/nodered-data

sudo chown 1000:1000 /var/nodered-data

exit

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

kubectl apply -f ./local-nodered-pv.yml

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

kubectl apply -f ./local-nodered-pvc.yml

4. Node-REDのDeploymentの作成
以下のコマンドでNode-REDのDeploymentを作成します。
cat << EOF > nodered-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodered-deployment
  labels:
    app: nodered
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nodered
    spec:
      containers:
      - name: nodered
        image: nodered/node-red:latest
        env:
        - name: TZ
          value: Asia/Tokyo
        ports:
        - containerPort: 1880
        volumeMounts:
        - name: nodered-data
          mountPath: /data
      volumes:
      - name: nodered-data
        persistentVolumeClaim:
          claimName: local-nodered-pvc
EOF

kubectl apply -f ./nodered-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nodered-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nodered-service
spec:
  selector:
    app: nodered
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 1880
EOF

kubectl apply -f ./nodered-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/nodered-service 8080:8080 
ブラウザからhttp://<Minikubeをインストールしたホスト名またはIP>:8080/ にアクセスしてワークフローを作成します。

2022年3月8日火曜日

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

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

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/pg-data

sudo mkdir -p /var/n8n-data

exit

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:
          - minikube
EOF

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:
          - minikube
EOF

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

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

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

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
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 5678
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

kubectl apply -f ./n8n-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/n8n-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080/ にアクセスしてワークフローを作成します。

2022年3月7日月曜日

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

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

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/n8n-data

exit

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

kubectl apply -f ./local-mysql-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:
          - minikube
EOF

kubectl apply -f ./local-n8n-pv.yml

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

kubectl apply -f ./local-mysql-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

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

4. n8n.ioとMySQLのDeploymentの作成
以下のコマンドでn8n.ioとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > n8n-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n-mysql-deployment
  labels:
    app: n8n-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: n8n-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: n8n
        - name: MYSQL_DATABASE
          value: n8n
        - name: MYSQL_USER
          value: n8n
        - name: MYSQL_PASSWORD
          value: n8n
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: n8n
        image: n8nio/n8n
        env:
        - name: DB_TYPE
          value: mysqldb
        - name: MYSQLDB_DATABASE
          value: n8n
        - name: DB_MYSQLDB_HOST
          value: 127.0.0.1
        - name: DB_MYSQLDB_PORT
          value: "3306"
        - name: DB_MYSQLDB_USER
          value: n8n
        - name: DB_MYSQLDB_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: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: n8n-data
        persistentVolumeClaim:
          claimName: local-n8n-pvc
EOF

kubectl apply -f ./n8n-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > n8n-service.yml
apiVersion: v1
kind: Service
metadata:
  name: n8n-service
spec:
  selector:
    app: n8n-mysql
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 5678
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./n8n-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/n8n-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080/ にアクセスしてワークフローを作成します。

2022年3月6日日曜日

Minikubeで同一ポッド内にGhostとMySQLを配置する

Ghostはブログプラットフォームです。Minikubeで同一ポッド内にGhostとMySQLを配置するには、以下の手順を実行します。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mysql-data

sudo mkdir -p /var/ghost-data

exit

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

kubectl apply -f ./local-mysql-pv.yml

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

kubectl apply -f ./local-ghost-pv.yml

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

kubectl apply -f ./local-mysql-pvc.yml
※Ghost用
cat << EOF > local-ghost-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-ghost-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-ghost-pv
EOF

kubectl apply -f ./local-ghost-pvc.yml

4. GhostとMySQLのDeploymentの作成
以下のコマンドでGhostとMySQLを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > ghost-mysql-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ghost-mysql-deployment
  labels:
    app: ghost-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ghost-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ghost-mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: ghost
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      - name: ghost
        image: ghost:4-alpine
        env:
        - name: url
          value: http://xxx.xxx.xxx.xxx:8080 # ここは外部からアクセスできるMinikubeをインストールしたホスト名・IPに変更します
        - name: database__client
          value: mysql
        - name: database__connection__host
          value: 127.0.0.1
        - name: database__connection__user
          value: root
        - name: database__connection__password
          value: ghost
        - name: database__connection__database
          value: ghost
        ports:
        - containerPort: 2368
        volumeMounts:
        - name: ghost-data
          mountPath: /var/lib/ghost/content
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: local-mysql-pvc
      - name: ghost-data
        persistentVolumeClaim:
          claimName: local-ghost-pvc
EOF

kubectl apply -f ./ghost-mysql-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > ghost-service.yml
apiVersion: v1
kind: Service
metadata:
  name: ghost-service
spec:
  selector:
    app: ghost-mysql
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 2368
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./ghost-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/ghost-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名>:8080/ghost/ にアクセスしてユーザ登録などを行います。

2022年3月4日金曜日

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

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

〇MantisBTの画面

実行手順

1. 以下のDockerfileを使用してイメージを作成します
# ホスト側で実行して、dockerの向き先をminikubeにします
eval $(minikube -p minikube docker-env)

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

docker build -t mantisbtpg .

2. Mantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成
以下のコマンドでMantis Bug Tracker構成格納/PostgreSQLデータ用ディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mantisbt-conf

sudo mkdir -p /var/pgdata

sudo chown 100:101 /var/mantisbt-conf

exit

3. 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:
          - minikube
EOF

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:
          - minikube
EOF

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

4. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※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

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

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

5. 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: mantisbtpg
        imagePullPolicy: Never # ローカルイメージを使用する
        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

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

6. Mantis Bug TrackerとPostgreSQLのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > mantisbt-pg-service.yml
apiVersion: v1
kind: Service
metadata:
  name: mantisbt-pg-service
spec:
  selector:
    app: mantisbt-pg
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

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

7. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/mantisbt-pg-service 8080:8080 5432:5432

ブラウザから以下のURLからMantisBTにアクセスします。
http://<Minikubeをインストールしたホストの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月3日木曜日

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

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

○MantisBTの画面

実行手順

1. 以下のDockerfileを使用してイメージを作成します
# ホスト側で実行して、dockerの向き先をminikubeにします
eval $(minikube -p minikube docker-env)

cat << EOF > Dockerfile
FROM alpine:3.15
WORKDIR /
RUN  apk update \
  && apk add --no-cache apache2 php8-apache2 php8-mysqli php8-pdo php8-pdo_mysql 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

docker build -t mantisbtmariadb .

2. Mantis Bug Tracker構成格納/MariaDBデータ用ディレクトリを作成
以下のコマンドでMantis Bug Tracker構成格納/MariaDBデータ用ディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mantisbt-conf

sudo mkdir -p /var/mariadb-data

sudo chown 100:101 /var/mantisbt-conf

exit

3. 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:
          - minikube
EOF

kubectl apply -f ./local-mantisbt-pv.yml

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

kubectl apply -f ./local-mariadb-pv.yml

4. 永続ボリューム要求の作成
以下のコマンドで永続ボリューム要求を作成します。
※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

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

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

kubectl apply -f ./local-mariadb-pvc.yml

5. Mantis Bug TrackerとMariaDBのDeploymentの作成
以下のコマンドでMantis Bug TrackerとMariaDBを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > mantisbt-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mantisbt-mariadb-deployment
  labels:
    app: mantisbt-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mantisbt-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mantisbt-mariadb
    spec:
      containers:
      - name: mariadb
        image: mariadb:10.7-focal
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mantisbt
        - name: MYSQL_DATABASE
          value: mantisbt
        - name: MYSQL_USER
          value: mantisbt
        - name: MYSQL_PASSWORD
          value: mantisbt
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: mantisbt
        image: mantisbtmariadb
        imagePullPolicy: Never # ローカルイメージを使用する
        ports:
        - containerPort: 80
        volumeMounts:
        - name: mantisbt-conf
          mountPath: /var/www/localhost/htdocs/config
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
      - name: mantisbt-conf
        persistentVolumeClaim:
          claimName: local-mantisbt-pvc
EOF

kubectl apply -f ./mantisbt-mariadb-deployment.yml

6. Mantis Bug TrackerとMariaDBのサービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > mantisbt-mariadb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: mantisbt-mariadb-service
spec:
  selector:
    app: mantisbt-mariadb
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./mantisbt-mariadb-service.yml

7. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/mantisbt-mariadb-service 8080:8080 3306:3306

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

2022年3月2日水曜日

MinikubeでGlusterFS上の永続ボリュームを使用するCouchDBをデプロイする

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

実行手順

1. MinikubeでのGlusterfs準備
※GlusterFSクラスターは事前に準備しておきます。

※minikube内の/etc/hostsにエントリを追加するためのファイルにエントリ追加
mkdir -p ~/.minikube/files/etc
echo 'xxx.xxx.xxx.xxx glusternode1' >> ~/.minikube/files/etc/hosts
echo 'xxx.xxx.xxx.xxx glusternode2' >> ~/.minikube/files/etc/hosts
echo 'xxx.xxx.xxx.xxx glusternode3' >> ~/.minikube/files/etc/hosts
IPアドレスとホスト名は適宜変更してください。

※minikube内にglusterfs-clientをインストールする
minikube ssh

sudo apt-get update && sudo apt-get install -y glusterfs-client

exit

3. Endpointsの作成
以下のIPアドレスを適宜変更して、Endpointsを作成します。
cat << EOF > glusterfs-endpoints.yml
apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-cluster
subsets:
- addresses:
  - ip: xxx.xxx.xxx.xxx
  ports:
  - port: 1
- addresses:
  - ip: xxx.xxx.xxx.xxx
  ports:
  - port: 1
- addresses:
  - ip: xxx.xxx.xxx.xxx
  ports:
  - port: 1
EOF

kubectl apply -f ./glusterfs-endpoints.yml

4. 永続ボリュームの作成
以下のGlusterFSボリューム名(myvolumeの部分)を変更して、永続ボリュームを作成します。
cat << EOF > glusterfs-couchdb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: glusterfs-couchdb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  glusterfs:
    endpoints: glusterfs-cluster
    path: myvolume
    readOnly: false
EOF

kubectl apply -f ./glusterfs-couchdb-pv.yml

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

kubectl apply -f ./glusterfs-couchdb-pvc.yml

4. Deploymentの作成
以下のコマンドでCouchDBのイメージと作成したNFS上の永続ボリュームを使用するDeploymentを作成します。
cat << EOF > couchdb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchdb-deployment
  labels:
    app: mycouchdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mycouchdb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mycouchdb
    spec:
      containers:
      - name: mycouchdb
        image: couchdb:3.2
        env:
        - name: COUCHDB_USER
          value: admin
        - name: COUCHDB_PASSWORD
          value: mycouchdb
        ports:
        - containerPort: 5984
        volumeMounts:
        - name: couchdb-data
          mountPath: /opt/couchdb/data
      volumes:
      - name: couchdb-data
        persistentVolumeClaim:
          claimName: glusterfs-couchdb-pvc
EOF

kubectl apply -f ./couchdb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > couchdb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: couchdb-service
spec:
  selector:
    app: mycouchdb
  ports:
  - protocol: TCP
    port: 5984
    targetPort: 5984
EOF

kubectl apply -f ./couchdb-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/couchdb-service 5984:5984

ブラウザからhttp://<サーバ名またはIPアドレス:5984/_utils/index.htmlにアクセスします。
ユーザ名admin、パスワードmycouchdbでログインします。

2022年3月1日火曜日

MinikubeでNFS上の永続ボリュームを使用するCouchDBをデプロイする

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

実行手順

1. CouchDBデータ格納用ディレクトリを作成
NFSサーバ上でCouchDBデータ格納用ディレクトリを作成します。パスは適宜変更してください。
sudo mkdir -p /shared_dir/couchdb

sudo chown 5984:5984 /shared_dir/couchdb

2. NFS上に永続ボリュームを作成
以下のコマンドでNFS上に永続ボリュームを作成します。
cat << EOF > nfs-couchdb-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-couchdb-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  nfs:
    server: xxx.xxx.xxx.xxx # NFSサーバのIPアドレス
    path: "/shared_dir/couchdb"
  mountOptions:
    - nfsvers=4.2
EOF

kubectl apply -f ./nfs-couchdb-pv.yml

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

kubectl apply -f ./nfs-couchdb-pvc.yml

4. Deploymentの作成
以下のコマンドでCouchDBのイメージと作成したNFS上の永続ボリュームを使用するDeploymentを作成します。
cat << EOF > couchdb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchdb-deployment
  labels:
    app: mycouchdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mycouchdb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mycouchdb
    spec:
      containers:
      - name: mycouchdb
        image: couchdb:3.2
        env:
        - name: COUCHDB_USER
          value: admin
        - name: COUCHDB_PASSWORD
          value: mycouchdb
        ports:
        - containerPort: 5984
        volumeMounts:
        - name: couchdb-data
          mountPath: /opt/couchdb/data
      volumes:
      - name: couchdb-data
        persistentVolumeClaim:
          claimName: nfs-couchdb-pvc
EOF

kubectl apply -f ./couchdb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > couchdb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: couchdb-service
spec:
  selector:
    app: mycouchdb
  ports:
  - protocol: TCP
    port: 5984
    targetPort: 5984
EOF

kubectl apply -f ./couchdb-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/couchdb-service 5984:5984

ブラウザからhttp://<サーバ名またはIPアドレス:5984/_utils/index.htmlにアクセスします。
ユーザ名admin、パスワードmycouchdbでログインします。

関連情報

Ubuntu 20.04にNFSサーバをインストールする

2022年2月28日月曜日

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

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

実行手順

1. CouchDBデータ格納用ディレクトリを作成
以下のコマンドでCouchDBデータ格納用ディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/couchdb

exit

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

kubectl apply -f ./local-couchdb-pv.yml

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

kubectl apply -f ./local-couchdb-pvc.yml

4. Deploymentの作成
以下のコマンドでCouchDBのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > couchdb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchdb-deployment
  labels:
    app: mycouchdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mycouchdb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mycouchdb
    spec:
      containers:
      - name: mycouchdb
        image: couchdb:3.2
        env:
        - name: COUCHDB_USER
          value: admin
        - name: COUCHDB_PASSWORD
          value: mycouchdb
        ports:
        - containerPort: 5984
        volumeMounts:
        - name: couchdb-data
          mountPath: /opt/couchdb/data
      volumes:
      - name: couchdb-data
        persistentVolumeClaim:
          claimName: local-couchdb-pvc
EOF

kubectl apply -f ./couchdb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > couchdb-service.yml
apiVersion: v1
kind: Service
metadata:
  name: couchdb-service
spec:
  selector:
    app: mycouchdb
  ports:
  - protocol: TCP
    port: 5984
    targetPort: 5984
EOF

kubectl apply -f ./couchdb-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/couchdb-service 5984:5984

ブラウザからhttp://<サーバ名またはIPアドレス:5984/_utils/index.htmlにアクセスします。
ユーザ名admin、パスワードmycouchdbでログインします。

2022年2月27日日曜日

Minikubeで同一ポッド内にMariaDBとMetabaseを配置する

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

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/mymariadb

sudo mkdir -p /var/metabase

exit

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

kubectl apply -f ./local-mariadb-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:
          - minikube
EOF

kubectl apply -f ./local-metabase-pv.yml

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

kubectl apply -f ./local-mariadb-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

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

4. MetabaseとMariaDBのDeploymentの作成
以下のコマンドでMetabaseとMariaDBを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > metabase-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metabase-mariadb-deployment
  labels:
    app: metabase-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metabase-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: metabase-mariadb
    spec:
      containers:
      - name: mymariadb
        image: mariadb:10.7-focal
        args: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mymariadb
        - name: MYSQL_DATABASE
          value: metabase
        - name: MYSQL_USER
          value: metabase
        - name: MYSQL_PASSWORD
          value: metabase
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: metabase
        image: metabase/metabase
        env:
        - name: MB_DB_FILE
          value: /metabase-data/metabase.db
        - name: MB_DB_TYPE
          value: mysql
        - name: MB_DB_DBNAME
          value: metabase
        - name: MB_DB_PORT
          value: "3306"
        - name: MB_DB_USER
          value: metabase
        - name: MB_DB_PASS
          value: metabase
        - name: MB_DB_HOST
          value: 127.0.0.1
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: metabase-data
          mountPath: /metabase-data
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
      - name: metabase-data
        persistentVolumeClaim:
          claimName: local-metabase-pvc
EOF

kubectl apply -f ./metabase-mariadb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > metabase-service.yml
apiVersion: v1
kind: Service
metadata:
  name: metabase-service
spec:
  selector:
    app: metabase-mariadb
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./metabase-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/metabase-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080 にアクセスします。

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

〇Metabaseの画面

2022年2月26日土曜日

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

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

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/pgdata

sudo mkdir -p /var/metabase

exit

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:
          - minikube
EOF

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:
          - minikube
EOF

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

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

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

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
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 5432
    targetPort: 5432
EOF

kubectl apply -f ./metabase-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/metabase-service 8080:8080 5432:5432
ブラウザからhttp://<ホスト名:8080 にアクセスします。

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

〇Metabaseの画面

2022年2月25日金曜日

MinikubeとHelmでlocal永続ボリュームを使用するApache Tomcat9をデプロイする

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

実行手順

1. テスト用ページの作成
minikubeのホストにテスト用ページを作成します。
minikube ssh

sudo mkdir -p /var/mytomcat

exit

2.local永続ボリュームの作成
以下のコマンドを実行してlocal永続ボリュームを作成します
cat << EOF > local-tomcat-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-tomcat-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mytomcat
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-tomcat-pv.yml

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

kubectl apply -f ./local-tomcat-pvc.yml

4. HelmでApacheのインストール
以下のコマンドでbitnamiのApache Httpdをインストールします。persistence.existingClaimパラメータで使用する永続ボリューム要求を指定します。

helm repo update

helm install my-tomcat bitnami/tomcat --set persistence.existingClaim=local-tomcat-pvc --version 8.3.1

※その他のパラメータについては、以下のbitnami apacheのgithubリポジトリを参照してください
https://github.com/bitnami/charts/tree/master/bitnami/tomcat

※チャートのバージョンは、以下のコマンドで調べることができます。
helm search repo bitnami/tomcat -l

5. Port-Fowardingで外部からアクセスできるようにする
以下のコマンドを実行して、外部からアクセスできるようにします。
kubectl port-forward --address 0.0.0.0 deployment/my-tomcat 8080:8080

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

※webapps相当のフォルダはminikube内の/var/mytomcat/dataフォルダになります。

※アンインストールする時には以下のコマンドを実行します。
helm uninstall my-tomcat

2022年2月24日木曜日

Minikubeでlocal永続ボリュームを使用するApache Tomcat9をデプロイする

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

実行手順

1. テスト用ページの作成
minikubeのホストにテスト用ページを作成します。
minikube ssh

sudo mkdir -p /var/mytomcat/logs
sudo mkdir -p /var/mytomcat/webapps

cd /var/mytomcat/webapps

sudo curl --output sample.war https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war

exit

2.local永続ボリュームの作成
以下のコマンドを実行してlocal永続ボリュームを作成します
※logsフォルダ用
cat << EOF > local-tomcat-logs-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-tomcat-logs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mytomcat/logs
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-tomcat-logs-pv.yml

※webappsフォルダ用
cat << EOF > local-tomcat-webapps-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-tomcat-webapps-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  local:
    path: /var/mytomcat/webapps
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - minikube
EOF

kubectl apply -f ./local-tomcat-webapps-pv.yml

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

kubectl apply -f ./local-tomcat-logs-pvc.yml
※webapps用
cat << EOF > local-tomcat-webapps-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-tomcat-webapps-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 5Gi
  volumeName: local-tomcat-webapps-pv
EOF

kubectl apply -f ./local-tomcat-webapps-pvc.yml

4. Deploymentの作成
以下のコマンドでtomcat:9.0-jre17-temurin-focalのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > tomcat-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: mytomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mytomcat
  template:
    metadata:
      labels:
        app: mytomcat
    spec:
      containers:
      - name: mytomcat
        image: tomcat:9.0-jre17-temurin-focal
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: logs
          mountPath: /usr/local/tomcat/logs
        - name: webapps
          mountPath: /usr/local/tomcat/webapps
      volumes:
      - name: logs
        persistentVolumeClaim:
          claimName: local-tomcat-logs-pvc
      - name: webapps
        persistentVolumeClaim:
          claimName: local-tomcat-webapps-pvc
EOF

kubectl apply -f ./tomcat-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > tomcat-service.yml
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  selector:
    app: mytomcat
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
EOF

kubectl apply -f ./tomcat-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/tomcat-service 8080:8080
ブラウザからhttp://<ホスト名:8080/sample/ にアクセスします

2022年2月23日水曜日

Minikubeで同一ポッド内にMariaDBとNextcloudを配置する

NextcloudはDropboxのようなファイルを共有できるサーバーアプリケーションです。Minikubeで同一ポッド内にMariaDBとNextcloudを配置するには、以下の手順を実行します。

〇Nextcloudの画面

実行手順

1. local永続ボリュームで使用するディレクトリの作成
以下のコマンドでlocal永続ボリュームで使用するディレクトリを作成します。
minikube ssh

sudo mkdir -p /var/lib/mymariadb

sudo mkdir -p /var/nextcloud

exit

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

kubectl apply -f ./local-mariadb-pv.yml

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

kubectl apply -f ./local-nextcloud-pv.yml

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

kubectl apply -f ./local-mariadb-pvc.yml

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

kubectl apply -f ./local-nextcloud-pvc.yml

4. NextcloudとMariaDBのDeploymentの作成
以下のコマンドでNextcloudとMariaDBを含むポッドと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > nextcloud-mariadb-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud-mariadb-deployment
  labels:
    app: nextcloud-mariadb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nextcloud-mariadb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nextcloud-mariadb
    spec:
      containers:
      - name: mymariadb
        image: mariadb:10.7-focal
        args: ["--innodb_strict_mode=OF", "--innodb_read_only_compressed=OFF", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mymariadb
        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_USER
          value: nextcloud
        - name: MYSQL_PASSWORD
          value: nextcloud
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mariadb-data
          mountPath: /var/lib/mysql
      - name: nextcloud
        image: nextcloud:23-apache
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nextcloud-data
          mountPath: /var/www/html
      volumes:
      - name: mariadb-data
        persistentVolumeClaim:
          claimName: local-mariadb-pvc
      - name: nextcloud-data
        persistentVolumeClaim:
          claimName: local-nextcloud-pvc
EOF

kubectl apply -f ./nextcloud-mariadb-deployment.yml

5. サービスの作成
以下のコマンドでサービスを作成します。
cat << EOF > nextcloud-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nextcloud-service
spec:
  selector:
    app: nextcloud-mariadb
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 80
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

kubectl apply -f ./nextcloud-service.yml

6. Port-Fowardingで外部からアクセスできるようにする
kubectl port-forward --address 0.0.0.0 service/nextcloud-service 8080:8080 3306:3306
ブラウザからhttp://<ホスト名:8080 にアクセスします。
初期設定画面で以下の項目を入力します
データベースの種類は「MySQL/MariaDB」をクリックして選択します。
データベースのユーザ名: nextcloud
データベースのパスワード: nextcloud
データベース名: nextcloud
データベースのホスト名: 127.0.0.1:3306

関連情報

・Nextcloudに関するほかの情報は以下のまとめ記事を参照してください。
Nextcloudのまとめ