3

kubernetes を使い始めたばかりで、単一の Web サーバーと postgres データベースを備えたシンプルなアプリを作成したいと考えています。私が直面している問題は、postgres の展開によって許可エラーが発生することです。以下は、これに関する議論です。

編集

仕様:

  • OSX-10.15.4
  • ミニキューブ - v1.9.2
  • kubernetes - v1.18.2

ミニキューブのセットアップ

minikube start --driver=virtualbox --cpus=2 --memory=5120 --kubernetes-version=v1.18.2 --container-runtime=docker --mount=true --mount-string=/Users/holmes/kubernetes/pgdata:/data/pgdata

許可エラー:chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted

postgres デプロイメント/ポッド/コンテナー ボリューム マウントで使用するローカル OS ディレクトリを minikube にマウントしようとしています。

上記のセットアップを実行した後、minikube ( minikube ssh) に ssh し、権限を確認します。

# minikube: /
drwxr-xr-x   3 root   root   4096 May 13 19:31 data
# minikube: /data
drwx------  1 docker docker   96 May 13 19:27 pgdata

chmodアクセス許可エラーが表示される下でスクリプトを実行します。--mount-string=/Users/holmes/kubernetes/pgdata:/data (除外/pgdata)を変更してからディレクトリminikube sshを作成する場合:pgdata

mkdir -p /data/pgdata
chmod 777 /data/pgdata

展開前に別の権限セットを取得します

# minikube: /
drwx------   1 docker docker   96 May 13 20:10 data
# minikube: /data
drwxrwxrwx 1 docker docker   64 May 13 20:25 pgdata

そして展開

# minikube: /
drwx------   1 docker docker  128 May 13 20:25 data
# minikube: /data
drwx------ 1 docker docker   64 May 13 20:25 pgdata

これが変更される理由がわからず、chmod許可エラーが続く。上記の参照リンクは、さまざまな VM のさまざまなマシンのさまざまな方法をバウンスしているようですが、理解できず、これを機能させることもできません。誰かがこれを機能させるために私を歩かせることができますか? 上記のすべての議論を経て、非常に混乱しました。

postgres.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: data-block

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  namespace: data-block
  labels:
    type: starter
data:
  POSTGRES_DB: postgres
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: docker

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  namespace: data-block
  labels:
    app: postgres
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /data/pgdata

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pv-claim
  namespace: data-block
  labels:
    app: postgres
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: ""

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: data-block
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:12.2
        ports:
        - containerPort: 5432
        envFrom:
        - configMapRef:
            name: postgres-config
        volumeMounts:
        - name: postgres-vol
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-vol
        persistentVolumeClaim:
          claimName: postgres-pv-claim

アップデート

先に進み、デプロイ スクリプトを単純なポッドに更新しました。目標は、postgres/var/lib/postgresql/dataをローカル ファイル ディレクトリにマップして/Users/<my-path>/database/data、データを永続化することです。

---
apiVersion: v1
kind: Pod
metadata:
  name: postgres-pod
  namespace: data-block
  labels:
    name: postgres-pod
spec:
  containers:
  - name: postgres
    image: postgres:12.3
    imagePullPolicy: IfNotPresent
    ports:
    - name: postgres-port
      containerPort: 5432
    envFrom:
    - configMapRef:
        name: postgres-env-config
    - secretRef:
        name: postgres-secret
    volumeMounts:
    - name: postgres-vol
      mountPath: /var/lib/postgresql/data
  volumes:
    - name: postgres-vol
      hostPath:
        path: /Users/<my-path>/database/data
  restartPolicy: Never

エラー:initdb: error: could not access directory "/var/lib/postgresql/data": Permission denied

ローカル ファイル ディレクトリをマウントするにはどうすればよいですか?

4

1 に答える 1