• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    해결됨

Volume에 대해 질문드립니다.

20.01.09 13:47 작성 조회수 1.17k

2

강의 감사드립니다~

중급 강좌가 나오기만 기다리고 있습니다.

초급 volume강좌와 중급 volume관련 강좌를 보다, 의문 사항이 생겨 질문드립니다.

deployment를 통해 pod에 volume을 구성할때, 

replicas값이 1보다 큰, 여러개의 pod를 동일한 구성으로 생성한다고 할경우 pv와 pvc는 항상 ReadOnlyMany/ReadWriteMany Access Mode만 가능할까요?(replicas값이 1이면 ReadWriteOnce도 가능할 것으로 생각합니다)

replicas값을 변경하면서 Pod개수를 변경할 경우에, 같은 pvc구성을 통해 여러 pod가 생성되면 volume은 1개인데 여러개의 pod가 접근하는 형식이 되어 Access Mode가 Many를 지원하지 않으면 안될 듯한데, 맞는지 궁금합니다.

아래와 같은 형식일거 같습니다.

아래 k8s홈페이지의 샘플코드와 같은 경우에요.

https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

답변 부탁 드립니다.

중급 강의가 기대중입니다!

답변 4

·

답변을 작성해보세요.

1

BrownK님의 프로필

BrownK

질문자

2020.01.13

확인 감사합니다~~~

1

BrownK님의 프로필

BrownK

질문자

2020.01.10

답변 감사드립니다. 

확인하고자 하는 사항이 있어 다시 질문 드립니다.

ReadWriteMany는 여러 Pod에서 접근할 수 있는 옵션, ReadWriteOnce는 한 Pod에서만 접근할 수 있는 옵션으로 이해하신거 같은데 맞나요? 

--> 맞습니다. 

링크를 참조해서 보니 아래 내용이 있네요. "node 가 access mode의 대상"

The access modes are:

  • ReadWriteOnce – the volume can be mounted as read-write by a single node
  • ReadOnlyMany – the volume can be mounted read-only by many nodes
  • ReadWriteMany – the volume can be mounted as read-write by many nodes

그렇다면, 아래와 같이 정리할 수 있을까요?

1. access mode는 volume이 연결되는 node 개수에 대한 제약

-ReadWriteOnce는 하나의 node에만 연결 가능

-ReadOnlyMany는 여러개의 node에 연결가능(읽기만 가능)

-ReadWriteMany는 여러개의 node에 연결 가능(읽기/쓰기 가능)

2. PV/PVC를 ReadWriteOnce로 지정한 volume을 사용하는 Pod가 여러개라도, 실제로 사용하는 것에는 문제가 없다.

(PV가 hostpath면 특정 node에 volume이 생길수 있어 문제가 될수 있다)

강의 정말 감사드려요.

0

네 맞습니다. 

이제 정확하게 이해하신거 같네요!

0

안녕하세요^^ 

먼저 질문 내용으로 추정해 보면 ReadWriteMany와 ReadWriteOnce의 차이만 두고 볼때

ReadWriteMany는 여러 Pod에서 접근할 수 있는 옵션, ReadWriteOnce는 한 Pod에서만 접근할 수 있는 옵션으로 이해하신거 같은데 맞나요? 

그렇게 생각하고 답변을 드리겠습니다. (아니라면 재질문 부탁드려요^^;)

일단 ReadWriteMany와 ReadWriteOnce의 Many와 Once의 대상은 Node입니다. 

예제로 주신 Wordpress 설치 내용을 보면 HostPath로 PV를 만들었는데 HostPath는 ReadWriteOnce만 지원을 하고

그 의미는 PV가 Node1에 만들어 졌다면 Deployment로 만들어지는 모든 Pod들은 Node1에 만들어져야 이 PV에 연결이 됩니다. Pod가 몇개 만들어져서 연결이 되었는지랑은 상관이 없는거고요. 

만약 PV를 NFS로 만들었다면 NFS는 NFS자체 세팅 설정에 따라 모든 모드가 지원되기 때문에 ReadWriteMany로 설정했다면 Pod들이 어느 노드에 만들어졌든 상관없이 연결이 되요.

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

위 링크에서 상세 내용을 살펴 볼 수 있습니다.

그래서 위 Wordpress 로 설치 후 Deployment로 Replicas를 늘려서 사용해야 할 경우 Deployment에 nodeSelector로 Node를 지정해 주면 좋습니다.

ps) 요즘 업무가 바빠져서 중급편을 만드는 속도가 빠르게 진행되지 않고 있네요 ㅜ 최선을 다하겠습니다^^;