리눅스 서버에 NFS Server 구성 후 NFS CSI와 쿠버네티스 클러스터 연동NFS 서버 구성1. NFS Server에서 NAS용 LVM 설정# 1. PV, VG, LV 구성pvcreate /dev/sdbvgcreate nfs-vg /dev/sdblvcreate -l 100%FREE -n nfs-lv nfs-vg# 2. LVM 디스크 파일 시스템 포맷mkfs.xfs /dev/nfs-vg/nfs-lv# 3. Mount 폴더 생성mkdir /nfs-storage# 4. LVM 디스크 마운트mount /dev/nfs-vg/nfs-lv /nfs-storage# 5. /etc/fstab에 마운트 정보 추가sudo cp /etc/fstab /etc/fstab.backupecho "/dev/nfs-vg/nfs-..
Container
테스트를 위해 AWS MarketPlace에 NetApp BlueXP Connector 설치 후 로컬 단말기에 구성된 쿠버네티스 클러스터와 연동 Trident 설치1. Trident 설치 패키지 다운로드wget https://github.com/NetApp/trident/releases/download/v24.10.0/trident-installer-24.10.0.tar.gztar -xf trident-installer-24.10.0.tar.gzcd trident-installer2. Trident CRD 생성kubectl apply -f deploy/crds/trident.netapp.io_tridentorchestrators_crd_post1.16.yaml3. Trident Operator 배포kus..
서버 재부팅 후 특정 Docker Container를 자동으로 재실행하기 위해 Systemd Service 파일로 관리하는 방법서비스 파일 등록# cd /etc/systemd/system/docker-nexus.service[Unit]Wants=docker.serviceAfter=docker.service [Service]RemainAfterExit=yesExecStart=/usr/bin/docker start nexusExecStop=/usr/bin/docker stop nexus [Install]WantedBy=multi-user.target자동 재실행 설정아래 설정 후 가상 머신을 재실행한 다음 docker 프로세스 목록에서 등록된 컨테이너가 있는지 확인한다.systemctl enable docke..
Container Image Registry 개요Image Registry는 컨테이너 이미지를 저장하는 공간이다. 모두에게 공개된 공간에 구성된 퍼블릭 이미지 저장소가 있고, 특정 사용자에게만 공개하는 프라이빗 이미지 저장소로 구분된다. 기업이 애플리케이션 개발 과정에 사용할 이미지 저장소는 보통 프라이빗 이미지 저장소를 사용한다. Docker Hub, AWS Elastic Container Registry, Google Container Registry와 같은 퍼블릭하게 사용하는 이미지 저장소에서도 프라이빗 이미지 저장소를 지원한다. 구축형 이미지 저장소가능하다면 클라우드 사업자가 제공해주는 퍼블릭/프라이빗 컨테이너 이미지 저장소를 사용하는 것이 가장 좋다. 이미지 저장소를 직접 구축하게 되면 호스트..
Dockerfile 정의도커 컨테이너 이미지를 빌드하기 위한 Instruction(명령, 지시어)의 집합이다. 도커 이미지를 빌드하는 경우 Instruction의 역순으로 계층화 된다. Dockerfile Instruction 종류InstructionSampleDescriptionFROMFROM node:22 AS init_stage• 베이스 이미지 지정WORKDIRWORKDIR /usr/src/app• 컨테이너 내부에서 명령어를 실행할 디렉터리 지정COPYCOPY ./ /appCOPY --from=init_stage /app /app• 호스트의 현재 로컬 디렉터리의 파일을 컨테이너 내부로 복사• + • 멀티 스테이지 빌드할 때 다른 빌드 레이어에 파일을 복사할 때 사용ADDADD ./app.tar.x..
사설 레지스트리(docker, harbor, ECR 등)를 이용할 때 인증 정보(자격증명)를 같이 전달해야 하는 경우 쿠버네티스에서 제공하는 Secret 리소스를 이용할 수 있다. 사설 레지스트리의 인증정보를 포함하고 있는 Secret 리소스를 생성한 다음 Pod 혹은 Deployment와 같은 리소스가 사설 레지스트리에서 컨테이너 이미지를 가져올 때 생성한 Secret 리소스를 사용하도록 설정해야 한다. 사설 레지스트리 인증을 위한 Secret 생성Secret을 생성하는 방식은 kubectl 명령에 옵션으로 인증정보를 포함한 도커의 config.json 파일을 적용하거나 직접 커맨드에 인증 정보를 할당할 수 있고, 또는 YAML 파일에 인증정보를 입력해서 생성하는 방법이 있다. 1. kubectl 명령..
kubespray는 k8s 클러스터를 중앙에서 ansible을 이용해서 진행할 수 있도록 지원하는 오픈 소스 도구다. 코드를 이용해서 전체 클러스터를 컨트롤할 수 있기 때문에 규모가 큰 환경에서 사용하기 적합하다. 설정에 따라서 운영에 필요한 애드온을 자동으로 설치할 수 있고, 폐쇠망 환경에서도 설치가 가능하도록 지원한다.VM 서버 구성Master Node: 3대Worker Node: 2대OS : Ubuntu 24.04 LTSStorage: 50GB 대표 Master 노드 설정hosts 파일 설정# vim /etc/hostsmaster1 10.0.0.168master2 10.0.0.207master3 10.0.0.53worker1 10.0.0.149worker2 10.0.0.245pem key 파일 설..
상태 유지가 필요한 데이터베이스, 분산 시스템과 같은 Application을 관리하는데 사용되는 오브젝트다. 고유한 네트워크 식별자를 제공하고, 스토리지의 데이터를 영구적으로 사용 가능하도록 기능을 지원한다.StatefulSet 기본 개요고유한 네트워크 식별자가 필요하거나 스토리지를 지속적으로 적용해서 사용하고자 할 때 적합하다. 파드에는 고유한 id 값이 할당되기 때문에 파드가 재실행되더라도 동일한 PV 마운트가 가능하다.Deployment에서 PVC를 사용하면 동일한 PV가 마운트 되고, StatefulSet은 파드별로 PVC 생성 후 볼륨이 할당된다.Deployment는 파드를 최적의 워커 노드에 배치하려는 특성이 있지만 StatefulSet은 최대한 동일 노드에 배치한다. StatefulSet 주..
k8s cluster 전체 노드에 특정 Pod를 실행시키고자 할 때 사용한다. 로그 수집, 모니터링과 같이 항상 실행해 두어야 하는 Pod를 생성할 때 사용한다.Sample YAMLapiVersion: apps/v1kind: DaemonSetmetadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-loggingspec: selector: matchLabels: name: fluentd-elasticsearch updateStrategy: type: RollingUpdate # roller update, on delte 중 선택 template: metadata: ..
Deployments는 실행시켜야 할 Pod의 개수 유지, Application 배포 과정에 롤링 업데이트 적용, 롤백 등의 기능을 지원한다.Sample YAML apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginx-deployment # deployment labelspec: replicas: 3 selector: matchLabels: app: nginx-pod # spec.template.metadata.labels와 같은 값으로 유지 template: metadata: labels: app: nginx-pod # spec.selecto..