概要
ホスト間で共有 PersistentVolume などを使いたいときは S3 または nfs などのネットワークストレージを使いましょう
それ以外でホストの領域を使ってコンテナ間でストレージを共有したい場合はサイドカーを使います
環境
- Ubuntu 18.04
- k8s v1.20.4
ローカルストレージが共有できるパターン
vim pod.yml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
restartPolicy: Never
volumes:
- name: test-vol
emptyDir: {}
containers:
- name: web1
image: nginx:latest
volumeMounts:
- name: test-vol
mountPath: /home
- name: echo
image: alpine:latest
volumeMounts:
- name: test-vol
mountPath: /home
command: ["/bin/sh"]
args: ["-c", "echo This message from alpine container > /home/msg.txt"]
これで web Pods 内にある web1 コンテナで共有領域にアクセスするとファイルがあるのが確認できます
kubectl apply -f pod.yml
kubectl exec web -c web1 -- cat /home/msg.txt
ローカルストレージが共有できないパターン
pv から pvc を作成して別のホストにデプロイするような Pods で pvc を使おうとしても共有できません
vim pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local
hostPath:
path: "/mnt/test"
vim pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local
vim deploy_web1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web1
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: web1
template:
metadata:
labels:
app.kubernetes.io/name: web1
spec:
containers:
- image: nginx:latest
name: web1
resources: {}
volumeMounts:
- mountPath: /home
name: test-pvc
nodeSelector:
kubernetes.io/hostname: node1
restartPolicy: Always
volumes:
- name: test-pvc
persistentVolumeClaim:
claimName: test-pvc
status: {}
vim deploy_web2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web2
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: web2
template:
metadata:
labels:
app.kubernetes.io/name: web2
spec:
containers:
- image: nginx:latest
name: web2
resources: {}
volumeMounts:
- mountPath: /home
name: test-pvc
nodeSelector:
kubernetes.io/hostname: node2
restartPolicy: Always
volumes:
- name: test-pvc
persistentVolumeClaim:
claimName: test-pvc
status: {}
kubectl apply -f pv.yml
kubectl apply -f pvc.yml
vim deploy_web1.yml
vim deploy_web2.yml
これで web1 の Pods と web2 の Pods で共有している領域にアクセスしてもファイルを共有することができません
0 件のコメント:
コメントを投稿