220526 Today I Learned
일지
특이 사항 없음
오늘의 할일
- 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)
쿠버네티스에서 파드를 동작하는 환경을 사용자화 하는 수단
- 파드에서 컨테이너에 대한 정의 기술하는 부분에서 사용자화 적용
- 실행 명령에 대한 변경
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
- 컨테이너의 환경변수를 통해 실행환경 설정
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
- 볼륨을 사용하여 실행환경 설정
- 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파드IP>
- httpd 이미지로부터 설정파일 복사
- 컨피그맵을 사용하여 파드에 데이터 주입
- 시크릿을 사용하여 파드에 데이터 주입
컨피그맵(Config Map, ConfigMap)
- 컨피그맵 및 시크릿은 모두 키/값 형태의 데이터를 저장하는 리소스
- etcd 저장소에 저장
- 쿠버네티스 클러스터 내에서 자유롭게 접근이 가능한 데이터를 저장
컨피그맵 리소스 생성
- 명령어 사용
- 옵션에 키와 값을 입력
- 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
- 오브젝트 파일 사용
apiVersion: v1 kind: ConfigMap metadata: name: myconfigmap5 data: key6: value6 key7: value7
컨피그맵 사용 예시
kubernetes 클러스터 coredns 설정
kubectl describe configmaps –namespace kube-system coredns
Leave a comment