3 minute read

일지

특이 사항 없음

오늘의 할일

  • 220526 TIL 작성
  • Kubernetes 공부
  • AWS 스터디

주요 키워드

K8s

Volume

  • Storage Classes
    • Rook

ConfigMap&Secrets

  • ConfigMap

수업 정리

동적 영구볼륨 설정

  • 스토리지클래스: PV를 동적으로 생성하기 위한 기능
    https://kubernetes.io/docs/concepts/storage/storage-classes/
  • 볼륨을 동적으로 제공해주기 위한 별도의 스토리지 기능이 필요
    • 클라우드 기반 스토리지
    • 동적 스토리지 할당 솔루션: rook

rook storage

  • 쿠버네티스 클러스터에서 동적 볼륨을 할당할 수 있는 솔루션
  • 쿠버네티스 리소스를 사용하여 배포
  • 제공되는 스토리지 유형
    • Block Storage
    • File Storage: ceph

rook storage 설치

git을 사용하여 rook 설정 다운로드
git clone --single-branch --branch release-1.5 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph/
operator 설치
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
operator 구동 확인
kubectl get pod --namespace rook-ceph
cluster 구성
kubectl create -f cluster.yaml
리소스 생성 완료 확인
watch kubectl get pod --namespace rook-ceph
스토리지 구성 확인
kubectl create -f toolbox.yaml
kubectl exec -it deploy/rook-ceph-tools --namespace rook-ceph -- bash ceph status
확인용 리소스 삭제
kubectl delete -f toolbox.yaml
스토리지 클래스 생성 (./csi/rbd/storageclass.yaml)
kubectl create -f csi/rbd/storageclass.yaml
블록 장치 스토리지 클래스 확인
kubectl get storageclasses.storage.k8s.io
블록 장치 스토리지클래스 동작 확인용 테스트 리소스 생성
kubectl create -f csi/rbd/pod.yaml -f csi/rbd/pvc.yaml
생성된 리소스 확인
kubectl get pv,pvc,pod
kubectl describe pod csirbd-demo-pod
kubectl describe pvc rbd-pvc
kubectl exec csirbd-demo-pod -- ls -l /var/lib/www/html
kubectl exec csirbd-demo-pod -- mount | grep www
테스트용 리소스 삭제
kubectl delete -f csi/rbd/pod.yaml -f csi/rbd/pvc.yaml
파일 기반 스토리지클래스 생성
kubectl create -f filesystem.yaml
kubectl create -f csi/cephfs/storageclass.yaml
파일 기반 스토리지클래스 동작 확인용 테스트 리소스 생성
kubectl create -f csi/cephfs/pod.yaml -f csi/cephfs/pvc.yaml

동적 볼륨을 할당하는 Rook Storage를 사용하기 위한 PVC리소스 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-dynamic
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: rook-cephfs
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: pv-dynamic-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-container
        image: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        volumeMounts:
        - name: nfs-pvc
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: pvc-dynamic

기본 스토리지 클래스 지정

  • 여러 스토리지클래스가 등록되어 있을 경우, 사용할 스토리지 클래스를 PVC 생성시 지정하여야 함
  • 스토리지 클래스를 통해 PV 생성시 기본 스토리지 클래스를 지정할 경우, PVC정의에서 스토리지 클래스를 지정하지 않아도 해당 스토리지 클래스를 사용
  • 기본 스토리지 클래스 설정: 스토리지 클래스 리소스에 annotation 추가
    annotations: storageclass.kubernetes.io/is-default-class: true
  • 현재 생성된 리소스에 반영
    kubectl patch -p ‘{“metadata”:{“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’ storageclasses.storage.k8s.io rook-cephfs

사용자화(Customization)

쿠버네티스에서 파드를 동작하는 환경을 사용자화 하는 수단

  1. 파드에서 컨테이너에 대한 정의 기술하는 부분에서 사용자화 적용
    • 실행 명령에 대한 변경
Dockerfile K8s
ENTRYPOINT command
CMD args

명령 변경을 통한 컨테이너 사용자화 테스트

  apiVersion: v1
  kind: Pod
  metadata:
    name: testpod
  spec:
    containers:
    - name: testpod-container
      image: ghcr.io/c1t1d0s7/go-myweb
      ports:
      - containerPort: 8888
        protocol: TCP
  apiVersion: v1
  kind: Pod
  metadata:
    name: testpod
  spec:
    containers:
    - name: testpod-container
      image: ghcr.io/c1t1d0s7/go-myweb
      args:
      - --port=8888
      ports:
      - containerPort: 8888
        protocol: TCP
  1. 컨테이너의 환경변수를 통해 실행환경 설정
  apiVersion: v1
  kind: Pod
  metadata:
    name: testpod
  spec:
    containers:
    - name: testpod-container
      image: ghcr.io/c1t1d0s7/go-myweb
      env:
      - name: MESSAGE
        value: "Hello World Customizing"
      ports:
      - containerPort: 8080
        protocol: TCP
  1. 볼륨을 사용하여 실행환경 설정
    • httpd 이미지로부터 설정파일 복사
      sudo docker run -d –name httpd httpd
      sudo docker cp httpd:/usr/local/apache2/conf/httpd.conf .
      sudo docker cp httpd:/usr/local/apache2/conf/extra .
      sudo docker cp httpd:/usr/local/apache2/conf/magic .
      sudo docker cp httpd:/usr/local/apache2/conf/mime.types .
      sudo docker cp httpd:/usr/local/apache2/conf/original .
    • 복사한 설정파일을 수정 (httpd.conf)
      Listen 8888
    • nfs 공유 디렉토리에 수정한 설정 파일을 복사
      (nfs 설정이 안되있으실 경우, 이전 문서를 참고하셔서 설정 후 진행) cp -r httpd.conf extra magic mime.types original /nfs-share/
    • nfs에 저장된 설정을 마운트하는 파드 ``` apiVersion: v1 kind: Pod metadata: name: httpd-conf-pod spec: containers:
    • image: httpd name: httpd-conf-container ports:
      • containerPort: 8888 protocol: TCP volumeMounts:
      • name: httpd-conf mountPath: /usr/local/apache2/conf volumes:
    • name: httpd-conf nfs: path: /nfs-share server: 192.168.56.11 ``` - 파드 생성 후, 변경한 설정에 따라 동작하는지 확인
      kubectl create -f httpd.yaml
      kubectl get pod -o wide
      curl <파드IP>:8888
  2. 컨피그맵을 사용하여 파드에 데이터 주입
  3. 시크릿을 사용하여 파드에 데이터 주입

컨피그맵(Config Map, ConfigMap)

  • 컨피그맵 및 시크릿은 모두 키/값 형태의 데이터를 저장하는 리소스
  • etcd 저장소에 저장
  • 쿠버네티스 클러스터 내에서 자유롭게 접근이 가능한 데이터를 저장

컨피그맵 리소스 생성

  1. 명령어 사용
    • 옵션에 키와 값을 입력
    • kubectl create configmap myconfigmap1 –from-literal=key1=value1 - 파일의 내용을 값으로 사용하고 옵션으로 지정한 파일명이 키로 지정
    • echo value2 > key2
    • kubectl create configmap myconfigmap2 –from-file=key2 - 파일의 내용을 값으로 사용하고, 옵션에서 파일을 지정하며 별도로 키를 입력
    • echo value3 > data.txt
    • kubectl create configmap myconfigmap3 –from-file=key3=data.txt - 디렉토리 내 파일들의 이름을 키, 내용을 값으로 지정
    • mkdir data
    • echo value4 > data/key4
    • echo value5 > data/key5.txt
  2. 오브젝트 파일 사용
      apiVersion: v1
      kind: ConfigMap
      metadata:
     name: myconfigmap5
      data:
     key6: value6
     key7: value7
    

컨피그맵 사용 예시

kubernetes 클러스터 coredns 설정
kubectl describe configmaps –namespace kube-system coredns

Categories:

Updated:

Leave a comment