1

AKS で StatefulSet として実行されている Timescaledb サーバーがあります。timescaledb ポッドを削除して再作成すると、ポッドが最初に関連付けられた PV (永続ボリューム) に関連付けられていても、変更が失われます。どんな助けでも大歓迎です。

以下は、実行によって抽出されたステートフル セットの PV、PVC 構成です。kubectl get statefulset timescaledb -o yaml

  template:
    metadata:
      creationTimestamp: null
      labels:
        app: timescaledb
    spec:
      containers:
      - args:
        - -c
        - config_file=/etc/postgresql/postgresql.conf
        env:
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: timescaledb-secret
        image: docker.io/timescale/timescaledb:latest-pg9.6
        name: timescaledb-backend
        ports:
        - containerPort: 5432
          name: server
          protocol: TCP
        resources:
          requests:
            cpu: "3"
            memory: 6Gi
        volumeMounts:
        - mountPath: /var/lib/postgresql
          name: timescaledbdata
        - mountPath: /etc/postgresql
          name: timescaledb-config
      volumes:
      - configMap:
          defaultMode: 420
          name: timescaledb-config
        name: timescaledb-config
  volumeClaimTemplates:
  - metadata:
      annotations:
        volume.alpha.kubernetes.io/storage-class: standard
      creationTimestamp: null
      name: timescaledbdata
    spec:
      accessModes:
      - ReadWriteOnce
      dataSource: null
      resources:
        requests:
          storage: 200Gi
    status:
      phase: Pending

以下は、作成された一時 DB test_db がポッドの再作成後に失われ、プロセス全体でポッドが Azure 上の同じ PV/ディスクに関連付けられていたことを示しています。

root@e70a91715239:~/keys# k get pvc -l app=timescaledb
NAME                            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
timescaledbdata-timescaledb-0   Bound    pvc-c7eb99cf-6a6b-11e9-b661-be660567cc75   200Gi      RWO            default        83d

root@e70a91715239:~/keys# k exec -ti timescaledb-0 bash
bash-4.4# psql -U postgres;
psql (9.6.13)
Type "help" for help.

postgres=# create database test_db;
CREATE DATABASE
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test_db   | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)


root@e70a91715239:~/keys# k get pods | grep timescale
timescaledb-0                         1/1     Running   0          12m
root@e70a91715239:~/keys# k delete pod/timescaledb-0                            
pod "timescaledb-0" deleted                                                                                                                                         
root@e70a91715239:~/keys# k get pods | grep timescale       
timescaledb-0                         1/1     Running   0          14s   

root@e70a91715239:~/keys# k exec -ti timescaledb-0 bash                                                                                                             
bash-4.4# psql -U postgres
psql (9.6.13)
Type "help" for help.

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges                                                                                    
-----------+----------+----------+------------+------------+-----------------------                                                                                 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +                                                                                 
           |          |          |            |            | postgres=CTc/postgres                                                                                  
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +                                                                                 
           |          |          |            |            | postgres=CTc/postgres                                                                                  
(3 rows)

root@e70a91715239:~/keys# k get pvc -l app=timescaledb
NAME                            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
timescaledbdata-timescaledb-0   Bound    pvc-c7eb99cf-6a6b-11e9-b661-be660567cc75   200Gi      RWO            default        83d

おそらく、示唆されているように再初期化されています。ログを参照してください。なぜそうするのかについての指針。

更新 1:timescaleポッド内のマウントを調べたところ、 と のパーティションが異なるよう/var/lib/postgresqlです/var/lib/postgresql/data。私はなぜなのか理解していない。

Filesystem                Size      Used Available Use% Mounted on
overlay                  96.9G     22.1G     74.8G  23% /
tmpfs                    64.0M         0     64.0M   0% /dev
tmpfs                     7.8G         0      7.8G   0% /sys/fs/cgroup
/dev/sda1                96.9G     22.1G     74.8G  23% /docker-entrypoint-initdb.d
/dev/sda1                96.9G     22.1G     74.8G  23% /dev/termination-log
shm                      64.0M      4.0K     64.0M   0% /dev/shm
/dev/sda1                96.9G     22.1G     74.8G  23% /etc/resolv.conf
/dev/sda1                96.9G     22.1G     74.8G  23% /etc/hostname
/dev/sda1                96.9G     22.1G     74.8G  23% /etc/hosts
/dev/sdc                196.7G     59.3M    196.7G   0% /var/lib/postgresql
/dev/sda1                96.9G     22.1G     74.8G  23% /var/lib/postgresql/data 

以下の構成で上記のマウントがどのように行われるか理解できません

        volumeMounts:
        - mountPath: /var/lib/postgresql
          name: timescaledbdata
        - mountPath: /etc/postgresql
          name: timescaledb-config
4

1 に答える 1