Dockerファイルを使用して画像を作成し、使用したユーザーを変更しました。
USER myuser
データを保存するためにディレクトリを使用していますが、次を使用してディレクトリのアクセス許可を変更します。
chown -R myuser:myuser /data-dir
このDockerファイルはetcd用で、etcdが/ data-dirを使用してデータを保存する場所です。次に、kubernetes ymlファイルを使用して/ data-dirをefsボリュームにマッピングします。
以下のコードで:
volumeMounts:
- name: etcdefs
mountPath: /data-dir
volumes:
- name: etcdefs
persistentVolumeClaim:
claimName: efs-etcd
この後、マップされたディレクトリ/ data-dirにはmyuser:myuserとしての権限が必要ですが、ディレクトリをroot:rootとして作成する必要があります
ここで私が間違っていることを提案できる人はいますか?
これは、Dockerが原因です。ルート権限のみでボリュームをマウントし、chmod
を使用してボリュームを変更できますが、コンテナーを起動した後でのみ変更できます。
詳しくはこちらをご覧ください https://github.com/moby/moby/issues/2259 この問題は長い間ここにあります。
Kubernetesでできることは、fsGroup
とforceを使用することです。そのボリュームは、指定されたGIDによって書き込み可能です。これは実用的なソリューションであり、文書化されています。詳細はこちら https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
展開の例を次に示します。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: Alpine
spec:
replicas: 1
template:
metadata:
labels:
app: Alpine
spec:
securityContext:
fsGroup: 1000
containers:
- name: Alpine
image: Alpine
volumeMounts:
- mountPath: /var/Alpine
name: Alpine
volumes:
- name: Alpine
awsElasticBlockStore:
volumeID: vol-1234567890
fsType: ext4