ft_services - mysql

jiholee·2021년 4월 18일
0

ft_services

목록 보기
4/4

volum

  • Deploy된 Pod들은 의도치 않은 이유로 인해 삭제 되었을 때 레플리카셋에 의해 복구될것이다.
  • 이때 삭제된 pod에 있는 데이터도 삭제 된다. 하지만 pod 안에 있는 컨테이너의 어느 특정 위치를 Volume으로 지정하면 백업 시키듯이 데이터를 저장할 수 있다.
    • 영구적으로 파일을 저장 -> persistentVolumeClaim

  • Docker 컨테이너에 저장된 데이터는 일시적입니다. 즉, 컨테이너가 살아있을 때까지만 존재합니다.

  • Kubernetes는 실패하거나 충돌 한 컨테이너 (동일한 포드에서)를 다시 시작할 수 있지만 컨테이너 파일 시스템에 저장한 데이터는 손실됩니다.

  • Kubernetes는 Volumes의 도움으로 문제를 해결합니다. 외부 클라우드 스토리지 (예 : Azure Disk, Amazon EBS, GCE Persistent Disk 등), Ceph, GlusterFS 등과 같은 네트워크 파일 시스템을 포함한 다양한 유형의 볼륨을 지원합니다.

    출처 : https://itnext.io/learn-about-the-basics-of-kubernetes-persistence-part-1-b1fa2847768f

  • mysql my.cnf 파일의 datadir이 데이터가 저장되는 위치이다.

[mysqld]
user = root
datadir = /var/lib/mysql

pod spec

    spec:
      restartPolicy: Always
      containers:
      - image: mysql:latest
        imagePullPolicy: Never
        name: mysql
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-pv
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-pv
        persistentVolumeClaim:
          claimName: mysql-pv
  • spec.volumes : 사용 가능한 볼륨 이름 (예 : mysql-pv) 및 기타 특성을 선언합니다.

  • spec.containers.volumeMounts :
    spec.volumes (예 : mysql-pv)에 선언 된 볼륨을 가리키고 컨테이너 파일 시스템 (예 : /var/lib/mysql) 내에서 해당 볼륨을 마운트하려는 위치를 정확히 지정합니다.

Pod에는 spec.volumes에 선언 된 볼륨이 두 개 이상있을 수 있습니다. 이러한 각 볼륨은 pod의 모든 컨테이너에서 액세스 할 수 있지만 모든 컨테이너가 모든 볼륨을 마운트하거나 사용하는 것이 필수는 아닙니다.

필요한 경우 pod 내의 컨테이너는 파일 시스템의 다른 경로에 둘 이상의 볼륨을 마운트 할 수 있습니다. 또한 여러 컨테이너가 동시에 단일 볼륨을 마운트 할 수 있습니다.

Service

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: ClusterIP
  selector:
    app: mysql
  ports:
    - name: mysql
      port: 3306
      protocol: TCP
      targetPort: 3306

PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv
  labels:
    app: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

실행

cd ../mysql
echo "mysql image build"
docker build -t mysql:latest .
echo "apply yaml"
kubectl apply -f mysql.yaml

결과

deployment.apps/mysql created
service/mysql created
persistentvolumeclaim/mysql-pv created

코드 참고

참고

0개의 댓글