Volume

Devops·2022년 12월 15일

Kubernetes 강의

목록 보기
3/15

1. EmptyDir

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: container1
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - name: container2
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
  volumes:
  - name : empty-dir
    emptyDir: {}

mount | grep mount1

echo "file context" >> file.txt

2. hostPath

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: host-path
      mountPath: /mount1
  volumes:
  - name : host-path
    hostPath:
      path: /node-v
      type: DirectoryOrCreate

3. Pvc / Pv

PV 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-03
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-v
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In,
        values: [k8s-node1]}
    
    

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-01
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

POD

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: pvc-pv
      mountPath: /mount3
  volumes:
  - name : pvc-pv
    persistentVolumeClaim:
      claimName: pvc-01

label & select 이용

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-04
  labels:
    pv: pv-04
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-v
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In,
        values: [k8s-node1]}
    
    
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-04
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2G
  storageClassName: ""
  selector:
    matchLabels:
      pv: pv-04   
      
  1. 사전 구성 - StorageOS 설치 및 StorageClass 생성

1-1) StorageOS Operator 설치
설치

kubectl apply -f https://github.com/storageos/cluster-operator/releases/download/1.5.0/storageos-operator.yaml
설치 확인

kubectl get all -n storageos-operator
Depolyment 수정

kubectl edit deployments.apps storageos-cluster-operator -n storageos-operator
spec.containers.env의 DISABLE_SCHEDULER_WEBHOOK의 Value를 true로 설정

spec:
  containers:
  - command:
    - cluster-operator
    env:
    - name: DISABLE_SCHEDULER_WEBHOOK
      value: "false"    # true 로 변경
    image: storageos/cluster-operator:1.5.0
    imagePullPolicy: IfNotPresent

관리 계정을 위한 Secret 생성 (username 및 password를 Base64문자로 만들기)

echo -n "admin" | base64
echo -n "1234" | base64
apiUsername 및 apiPassword 부분에 위 결과로 나온 문자 넣기

kubectl create -f - <<END\

apiVersion: v1
kind: Secret
metadata:
  name: "storageos-api"
  namespace: "storageos-operator"
  labels:
    app: "storageos"
type: "kubernetes.io/storageos"
data:
  apiUsername: YWRtaW4=  # admin
  apiPassword: MTIzNA==  # 1234
END

1-2) StorageOS 설치
StorageOS 설치 트리거 생성

kubectl apply -f - <<END

apiVersion: "storageos.com/v1"
kind: StorageOSCluster
metadata:
  name: "example-storageos"
  namespace: "storageos-operator"
spec:
  secretRefName: "storageos-api" # Reference the Secret created in the previous step
  secretRefNamespace: "storageos-operator"  # Namespace of the Secret
  k8sDistro: "kubernetes"
  images:
    nodeContainer: "storageos/node:1.5.0" # StorageOS version
  resources:
    requests:
    memory: "512Mi"
END
                     

설치 확인

kubectl get all -n storageos
Dashboard 접속을 위한 Service 수정 (방법 1)

kubectl edit service storageos -n storageos
spec에 externalIPs와 Master IP 추가

spec:
clusterIP: 10.109.77.121
externalIPs: # 추가

  • 192.168.0.30 # Master IP 추가
    ports:

접속

http://192.168.0.30:5705/

Dashboard 접속을 위한 Service 수정 (방법 2)

kubectl edit service storageos -n storageos
type을 NodePort로 변경

spec:
  ports:
  - name: storageos
    port: 5705
    protocol: TCP
    targetPort: 5705
    nodePort: 30705  # port 번호 추가
  type: NodePort     # type 변경

접속

http://192.168.0.30:30705/

1-3) Default StorageClass 추가

kubectl apply -f - <<END

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: default
  annotations: 
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/storageos
parameters:
  adminSecretName: storageos-api
  adminSecretNamespace: storageos-operator
  fsType: ext4
  pool: default
END
StorageClass 확인
                    
  1. Dynamic Provisioning

2-1) PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-hostpath1
spec:
  capacity:
    storage: 1G
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /mnt/hostpath
    type: DirectoryOrCreate

2-2) PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-hostpath1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

2-3) PersistentVolumeClaim

apiVersion: v1       
kind: PersistentVolumeClaim
metadata:
  name: pvc-fast1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: "fast"

2-4) PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-default1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2G
                    
  1. PV Status, ReclaimPolicy

3-1) Pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-hostpath1
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  terminationGracePeriodSeconds: 0
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: hostpath
      mountPath: /mount1
  volumes:
  - name: hostpath
    persistentVolumeClaim:
      claimName: pvc-hostpath1
                    
                    

cd /mount1
touch file.txt
StorageOS Dashboard

http://192.168.0.30:5705/

yaml

StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: default
  annotations:
    # Default StorageClass로 선택 
    storageclass.kubernetes.io/is-default-class: "true" 
# 동적으로 PV생성시 PersistentVolumeReclaimPolicy 선택 (Default:Delete)
reclaimPolicy: Retain, Delete, Recycle
provisioner: kubernetes.io/storageos
# provisioner 종류에 따라 parameters의 하위 내용 다름 
parameters:                        
                    
profile
Cloud Engineer , backend developer

0개의 댓글