kubernetes を使い始めたばかりで、単一の Web サーバーと postgres データベースを備えたシンプルなアプリを作成したいと考えています。私が直面している問題は、postgres の展開によって許可エラーが発生することです。以下は、これに関する議論です。
- https://github.com/docker-library/postgres/issues/116
- https://github.com/docker-library/postgres/issues/103
- https://github.com/docker-library/postgres/issues/696
- Postgres アクセス許可または AKS で動作する PVC を取得できません
- Kubernetes - DB をカプセル化する Pod がクラッシュする
- minikube のポッドにローカル ディレクトリをマウントする
- https://serverfault.com/questions/981459/minikube-using-a-storageclass-to-provision-data-outside-of-tmp
編集
仕様:
- 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
ローカル ファイル ディレクトリをマウントするにはどうすればよいですか?