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

2022年4月14日木曜日

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

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

実行手順

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

sudo mkdir -p /var/n8n-data

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

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

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

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

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

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

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

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

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

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

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

2022年4月13日水曜日

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

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

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

sudo k3s 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

sudo k3s 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

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

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

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

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

2022年4月12日火曜日

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

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

〇Metabaseの画面

実行手順

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

sudo mkdir -p /var/metabase

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

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

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

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

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

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

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

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

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

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

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

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

2022年4月11日月曜日

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

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

実行手順

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

sudo mkdir -p /var/kanboard_data

sudo mkdir -p /var/kanboard_plugins

sudo mkdir -p /var/kanboard_ssl

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連情報

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

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

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

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

2022年4月9日土曜日

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

Ghostはブログプラットフォームです。k3sで同一ポッド内にGhostとMySQLを配置するには、以下の手順を実行します(official mysqlイメージにはarm 32bit版は無いようです)。

実行手順

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

sudo mkdir -p /var/ghost-data

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:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s 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:
          - `hostname`
EOF
※`hostname`は今ログオンしているk3sがインストールされているホスト名になります。適宜変更してください。
sudo k3s kubectl apply -f ./local-ghost-pv.yml

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

sudo k3s 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

sudo k3s 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 # ここは外部からアクセスできるk3sをインストールしたホスト名・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

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

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

ブラウザからhttp://<ホスト名またはIP:8080>/ghost/ にアクセスしてユーザ登録などを行います。

2022年4月8日金曜日

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

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

実行手順

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

sudo mkdir -p /var/superset-data

cd /var/superset-data

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

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

BABEL_DEFAULT_LOCALE='ja'

SUPERSET_WEBSERVER_PORT = 8088

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

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

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

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

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

cd

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

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

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

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

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

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

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

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

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

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

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

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

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

〇Apache Supersetの画面

関連情報

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

2022年4月7日木曜日

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

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

実行手順

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

sudo mkdir -p /var/pgadmin-data

sudo chown 5050:5050 /var/pgadmin-data

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2022年4月6日水曜日

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

phpBBは掲示板アプリケーションです。k3sで同一ポッド内にphpBBとMariaDBを配置するには、以下の手順を実行します(注:MariaDBのarmのofficial32ビットイメージは無いようです)。データはlocal永続ボリュームに保存します。

実行手順

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

sudo mkdir -p /var/phpbb-data

sudo chown 1001:1001 /var/phpbb-data

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

sudo k3s 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

sudo k3s 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

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

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

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

2022年4月5日火曜日

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

Sambaでファイル共有を行うことができます。k3sでlocal永続ボリュームを使用するSambaをデプロイするには、以下の手順を実行します。

実行手順

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

sudo chown 1001:1001 /var/samba

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

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

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

4. Deploymentの作成
以下のコマンドでSambaのイメージと作成したlocal永続ボリュームを使用するDeploymentを作成します。
ユーザ名とパスワードはargsのsampleuser;samplepasswordの部分を変更してください。
cat << EOF > samba-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: samba-deployment
  labels:
    app: mysamba
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysamba
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysamba
    spec:
      containers:
      - name: mysamba
        image: dperson/samba
        env:
        - name: TZ
          value: "Asia/Tokyo"
        - name: USERID
          value: "1001"
        - name: GROUPID
          value: "1001"
        args: ["-u", "sampleuser;samplepassword",
          "-s", "share;/mnt;yes;no;no;sampleuser", "-w", "WORKGROUP", "-r", "-p"]
          #-s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]"
        ports:
        - containerPort: 139
        - containerPort: 445
        volumeMounts:
        - name: samba-mount
          mountPath: /mnt
      volumes:
      - name:  samba-mount
        persistentVolumeClaim:
          claimName: local-samba-pvc
EOF

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

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

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

6. アクセス確認
Windowsのエクスプローラーに以下の場所を入力します。
\\<k3sのホスト名またはIP>\share
ユーザ名にsampleuser、パスワードにsamplepasswordを入力します

2022年4月4日月曜日

k3sでNode-Redを配備する

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

実行手順

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

sudo chown 1000:1000 /var/nodered-data

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

sudo k3s 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

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

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

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

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

2022年4月3日日曜日

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

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

実行手順

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

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

sudo k3s 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

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

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

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

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

2022年4月2日土曜日

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

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

実行手順

1. テスト用ページの作成
k3sのホストにテスト用ページを作成します。
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

cd

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

sudo k3s 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

sudo k3s 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

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

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

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

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

2022年4月1日金曜日

k3sでPostgreSQLとAdminerを配置する

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

〇Adminerの画面

実行手順

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

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

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

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

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

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

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

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

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

2022年3月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の画面

2022年3月30日水曜日

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

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

実行手順

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

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

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

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

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

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

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

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

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

2022年3月29日火曜日

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

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

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/ にアクセスします

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