2022年3月31日木曜日

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

k3sでlocal永続ボリュームを使用するDokuwikiをデプロイするには、以下の手順を実行します(注: bitnami/dokuwikiで32bit armのイメージは無いようです)。

実行手順

1. local永続ボリュームで使用するディレクトリの作成
k3sホスト上で、以下のコマンドを実行してlocal永続ボリュームで使用するディレクトリを作成します。
sudo mkdir -p /var/dokuwiki

sudo chown 1001:1001 /var/dokuwiki

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

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

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

4. Deploymentの作成
以下のコマンドでbitnami/dokuwikiのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > dokuwiki-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dokuwiki-deployment
  labels:
    app: mydokuwiki
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mydokuwiki
  template:
    metadata:
      labels:
        app: mydokuwiki
    spec:
      containers:
      - name: mydokuwiki
        image: bitnami/dokuwiki:latest
        ports:
        - containerPort: 8080
        env:
        - name: DOKUWIKI_USERNAME
          value: "dokuwiki"
        - name: DOKUWIKI_FULL_NAME
          value: "テストユーザ"
        - name: DOKUWIKI_PASSWORD
          value: "mydokuwiki"
        - name: DOKUWIKI_WIKI_NAME
          value: "テストDokuwiki"
        - name: DOKUWIKI_EMAIL
          value: "dokuwiki@localhost.localdomain"
        volumeMounts:
        - name: documentroot
          mountPath: /bitnami/dokuwiki
      volumes:
      - name: documentroot
        persistentVolumeClaim:
          claimName: local-dokuwiki-pvc
EOF

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

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

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

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

〇DokuWikiの画面

Ubuntu 20.04/Debian 11(Bullseye)でRSSリーダーのFeedReaderをインストールする

Ubuntu 20.04/Debian 11(Bullseye)でRSSリーダーのFeedReaderをインストールするには、以下の手順を実行します。

〇FeedReaderの画面(Debian 11)

〇FeedReaderの画面(Ubuntu 20.04)

インストール方法

以下のコマンドを実行します。
sudo apt-get -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install org.gnome.FeedReader

関連情報

・FeedReaderのwebサイト
https://jangernert.github.io/FeedReader/

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/

Ubuntu20.04/Raspberry Pi OS(Raspbian Bullseye)にwebカメラレコーディングソフトkamosoをインストールする

Kamosoは、シンプルなwebカメラレコーディングソフトです。画面左上のボタンから動画にイフェクトをかけることもできます。

〇Ubuntu 20.04でのKamosoの画面

インストール方法

以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install kamoso

関連情報

・様々な動画に関するアプリケーションについては、以下のまとめを参照してください。
動画関連アプリケーションのまとめ

2022年3月29日火曜日

Kubernetes python clientでMicrok8sのnamespaceを列挙する

Kubernetes python clientでMicrok8sのnamespaceを列挙するには、以下の手順を実行します。

実行手順

1.pipenvのインストール
pipenvをインストール済みでない場合は、以下のコマンドでインストールします。
sudo apt-get -y install python3 python3-pip

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. kubernetes clientをインストールした仮想環境の作成
mkdir -p ./kubernetes-client

cd ./kubernetes-client

pipenv --python 3

pipenv install --skip-lock kubernetes

pipenv shell

3. configファイルの準備
microk8s.config > ~/.kube/config

4. サンプルプログラムの作成と実行
以下のサンプルプログラムでnamespaceを列挙することが出来ます。
list-namespace.py
from kubernetes import config, client

# configを読み込み
cfg = config.load_kube_config()

# クライアントを作成
with client.ApiClient(cfg) as api_client:
  api = client.CoreV1Api(api_client)
  # namespaceの列挙
  namespaces = api.list_namespace(watch=False)
  for namespace in namespaces.items:
    # namespaceとstatusを表示
    print("{}:{}".format(namespace.metadata.name, namespace.status.phase))

・実行コマンド
python3 list-namespace.py

関連情報

・Kubernetes Python Clientのリポジトリ
https://github.com/kubernetes-client/python

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

k3sでlocal永続ボリュームを使用するMariaDBをデプロイするには、以下の手順を実行します(※officialでarmの32ビットイメージは無いようです)。

実行手順

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

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
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:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-mariadb-pv.yml

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

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

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

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

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

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

※接続確認
mariadb -h ※k3sをインストールしたホストのIP -uroot -pmymariadb mysql

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

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月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日日曜日

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

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

実行手順

1. テスト用ページの作成
k3sホストにテスト用ページを作成します。
sudo mkdir -p /var/mywww/html

echo '<html><head><title>sample</title></head><body>sample.</body></html>' | sudo tee /var/mywww/html/index.html

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

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

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

4. Deploymentの作成
以下のコマンドでhttpd:2.4-alipineのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
cat << EOF > httpd-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-deployment
  labels:
    app: myhttpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myhttpd
  template:
    metadata:
      labels:
        app: myhttpd
    spec:
      containers:
      - name: myhttpd
        image: httpd:2.4-alpine
        ports:
        - containerPort: 80
        volumeMounts:
        - name: documentroot
          mountPath: /usr/local/apache2/htdocs
      volumes:
      - name: documentroot
        persistentVolumeClaim:
          claimName: local-httpd-pvc
EOF

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

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

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

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

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月26日土曜日

Ubuntu 20.04/Debian 11(Bullseye)/Raspberry Pi OS(Bullseye 32bit)に軽量kubernetesのk3sをインストールする

Ubuntu 20.04/Debian 11(Bullseye)/Raspberry Pi OS(Bullseye 32bit)に軽量kubernetesのk3sをインストールするには、以下の実行手順を実行します。

実行手順

1. k3sのインストール
※Raspberry Pi OSの場合は以下のコマンドでパラメータを/boot/cmdline.txtに追加して再起動します。
echo ' cgroup_memory=1 cgroup_enable=memory' | sudo tee -a /boot/cmdline.txt

・ここからUbuntu/Debian/Raspberry Pi OS共通
sudo apt-get -y install curl

curl -sfL https://get.k3s.io | sh -

sudo k3s kubectl get node
※インストールしたホストの名称が表示されることを確認

2. (任意)kubernetes-dashboardのの導入
2.1. dashboardをデプロイ
GITHUB_URL=https://github.com/kubernetes/dashboard/releases
VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
sudo k3s kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml

2.2. デプロイ確認
sudo k3s kubectl get deployment -n kubernetes-dashboard

2.3. サービスアカウント作成
cat << EOF > dashboard.admin-user.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

sudo k3s kubectl apply -f ./dashboard.admin-user.yml

2.4. ClusterRoleBindingの作成
cat << EOF > dashboard.admin-user-role.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

sudo k3s kubectl apply -f ./dashboard.admin-user-role.yml

2.5. 外部からアクセス可能にする
sudo k3s kubectl port-forward --address='0.0.0.0' -n kubernetes-dashboard service/kubernetes-dashboard 8443:443
※Ctrl+Cで止まります

2.6. Tokenの取得
※手順2.5とは別の端末で実行
sudo k3s kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'

2.7. 外部ホストからブラウザでアクセス
2.6で取得したトークンを使用してログインします
https://<ホストまたはIP>:8443/#/login

3. (任意)kubernetes-dashboard用port-forwardのサービス化
以下のコマンドを実行してkubernetes dashboardにport fowardするサービスを作成します。
cat << EOF | sudo tee /etc/systemd/system/portfoward-dashboard.service
[Unit]
Description=port foward for kubernetes dashboard
After=k3s.service

[Service]
ExecStart=/usr/local/bin/k3s kubectl port-forward --address='0.0.0.0' -n kubernetes-dashboard service/kubernetes-dashboard 8443:443
StartLimitInterval=0
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# サービス開始
sudo systemctl start portfoward-dashboard.service

# サービス有効化
sudo systemctl enable portfoward-dashboard.service

# サービスステータス
sudo systemctl status portfoward-dashboard.service

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

Microk8sで同一ポッド内にMariaDBとnocodbを配置するには、以下の手順を実行します。MariaDBのデータはlocal永続ボリュームに保存します。

〇nocodbの画面

実行手順

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

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mariadb-pv.yml

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

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

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

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

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

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

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

2022年3月25日金曜日

Ubuntu 20.04/Debian 11(Bullseye)でRSSリーダーのNewsFlashをインストールする

Ubuntu 20.04/Debian 11(Bullseye)でRSSリーダーのNewsFlashをインストールするには、以下の手順を実行します。

〇NewsFlashの画面(Debian 11)

〇NewsFlashの画面(Ubuntu 20.04)

インストール方法

以下のコマンドを実行します。
sudo apt-get -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install com.gitlab.newsflash

関連情報

・NewsFlashのwebサイト
https://gitlab.com/news-flash/news_flash_gtk

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月24日木曜日

AlmaLinux 8でRSSリーダーのFeedReaderをインストールする

AlmaLinux 8でRSSリーダーのFeedReaderをインストールするには、以下の手順を実行します。

〇FeedReaderの画面

インストール方法

以下のコマンドを実行します。
sudo dnf -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install org.gnome.FeedReader

関連情報

・FeedReaderのwebサイト
https://jangernert.github.io/FeedReader/

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

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

〇Metabaseの画面

実行手順

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

sudo mkdir -p /var/metabase

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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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

microk8s 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

microk8s 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

microk8s 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
  type: LoadBalancer
  externalIPs:
  - xxx.xxx.xxx.xxx # 外部からアクセスできるMicrok8sをインストールしたホストのIPを設定します。
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 3000
  - name: db
    protocol: TCP
    port: 3306
    targetPort: 3306
EOF

microk8s kubectl apply -f ./metabase-service.yml
ブラウザからhttp://<ホスト名:8080 にアクセスします。

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

2022年3月23日水曜日

Jupyter・mplfinace・yahoo_finance_api2を使用して、米国株価・日本株価・通貨レートをローソク足で描画する

Jupyter・mplfinace・yahoo_finance_api2を使用して、米国株価・日本株価・通貨レートをローソク足で描画するには、以下の手順を実行します

実行手順

1. パッケージの導入
Jupyterがインストールされている仮想環境に以下のコマンドで、mplfinanceとyahoo_finance_api2を導入します(pipenvの場合)。
pipenv install mplfinance

pipenv install yahoo_finance_api2
※依存関係でインストールできない場合は、以下のコマンドでインストールしてみてください。
pipenv install --skip-lock mplfinance

pipenv install --skip-lock yahoo_finance_api2

2. ノートブックに以下のサンプルコードを張り付けて実行するとUSDJPY通貨レートが1時間足で取得できます(Shareの引数で通貨ペアに=Xを付加します)。Shareで"AAPL"などのストックコードを入れると米国株価、"7074.T"(任天堂)のように、銘柄コードに「.T」をつけると日本株のデータが取得できます。

from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import datetime as datetime
import pandas as pd
import mplfinance as mpf

my_share = share.Share('USDJPY=X')
result = my_share.get_historical(share.PERIOD_TYPE_DAY,
  3,
  share.FREQUENCY_TYPE_HOUR,
  1)
df = pd.DataFrame(result)
# JSTへ変換
df["jst"] = pd.to_datetime(df.timestamp, unit="ms") + datetime.timedelta(hours=9)

df2 = pd.DataFrame(df, columns=['jst', 'open', 'high', 'low', 'close'])
df2 = df2.set_index("jst")

# 色の指定
mc = mpf.make_marketcolors(up='#049DBF', down='#D93D4A', 
    edge='#F2CED1', wick={'up':'#049DBF', 'down':'#D93D4A'})
cs  = mpf.make_mpf_style(marketcolors=mc, gridcolor="lightgray")
mpf.plot(df2,type='candle', style=cs)

〇実行画面

関連情報

・mplfinanceの他の情報は以下のまとめページを参照してください。
mplfinanceまとめ

・mplfinanceのgithubリポジトリ
https://github.com/matplotlib/mplfinance

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

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

実行手順

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

2. local永続ボリュームの作成
以下のコマンドでlocal永続ボリュームを作成します。
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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s kubectl apply -f ./local-mariadb-pv.yml

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

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

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

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

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

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

※接続確認
mariadb -h ※Microk8sをインストールしたホストのIP -uroot -pmymariadb mysql

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

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

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

実行手順

1. ClickHouseデータ格納用ディレクトリを作成
Microk8sホスト上で以下のコマンドを実行してデータ格納用ディレクトリを作成します。
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

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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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:
          - `hostname`
EOF
※`hostname`は今ログオンしているMicrok8sがインストールされているホスト名になります。適宜変更してください。
microk8s 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

microk8s 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

microk8s 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

microk8s 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

microk8s 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

microk8s kubectl apply -f ./clickhouse-deployment.yml

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

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

6. (クライアント側)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

7. (クライアント側)サンプルテーブルの作成
※192.168.1.1の部分は適宜、Microk8sのホスト名/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"

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

2022年3月22日火曜日

Raspberry Pi OS (Bullseye 32bit)にVivaldiをインストールする

Vivaldiは高速・セキュア・フレキシブルなブラウザです。トラッキングや広告をブロッキングすることができます。

〇Vivaldiの画面

インストール方法

以下のコマンドを実行します。
wget https://downloads.vivaldi.com/stable/vivaldi-stable_5.1.2567.57-1_armhf.deb

sudo apt-get -y install ./vivaldi-stable_5.1.2567.57-1_armhf.deb

Raspberry Piのモデル名称とCPU情報をコマンドで表示する

離れた場所にあるRaspberry Piなど、sshなどでモデル名とCPU情報を確認したい場合は、以下のコマンドを利用することができます。

Raspberry Piのモデルを表示する

以下のコマンドでRaspberry Piのモデル名を表示することができます。
echo `cat /sys/firmware/devicetree/base/model | tr -d '\0'`

・実行例
echo `cat /sys/firmware/devicetree/base/model | tr -d '\0'`
Raspberry Pi 4 Model B Rev 1.2
echo `cat /sys/firmware/devicetree/base/model | tr -d '\0'`
Raspberry Pi Zero W Rev 1.1

Raspberry PiのCPU情報を表示する

lscpuコマンドでRaspberry PiのCPUの情報を取得することができます。
lscpu

・実行例
lscpu
Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               3
Model name:          Cortex-A72
Stepping:            r0p3
CPU max MHz:         1500.0000
CPU min MHz:         600.0000
BogoMIPS:            108.00
Flags:               half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idi
                     vt vfpd32 lpae evtstrm crc32
lscpu
Architecture:        armv6l
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
Vendor ID:           ARM
Model:               7
Model name:          ARM1176
Stepping:            r0p7
CPU max MHz:         1000.0000
CPU min MHz:         700.0000
BogoMIPS:            697.95
Flags:               half thumb fastmult vfp edsp java tls

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