목록DevOps & Infra (155)
오늘도 한 뼘 더

# 배경 EBS 볼륨은 할당된 용량 크기에 따라 비용이 정책 되기 때문에 과도하게 볼륨의 크기가 크다면 축소하는 것이 좋다.다만, AWS에서 볼륨의 크기를 확장하는 것은 비교적 간단하나 축소하는 작업은 꽤 복잡하기에 스토리지 용량을 작게 잡고 늘려나가는 것이 바람직하다. 이미 늘어난 스토리지를 일단 축소해야 하기에 해당 작업을 진행하였다. # 필요한 리소스 - 볼륨이 큰 기존의 인스턴스 (old)- 볼륨을 축소한 새로운 인스턴스 (new)- 복구 및 마운트를 위한 임시 인스턴스 (temp) # 볼륨 축소하여 기존 인스턴스에서 사용하기 [ 사전 작업 ]- 작업 전 기존 인스턴스에 대한 AMI를 생성하여 EBS를 복구할 수 있도록 한다.- 데이터 이관의 확인을 위한 테스트 데이터 생성 1. old..

# Bastion 서버란?Bastion 서버(또는 Bastion Host)는 외부에서 내부 네트워크에 안전하게 접속할 수 있도록 중간 다리 역할을 하는 보안 게이트웨이 서버이다. 서버들(예: DB 서버, 내부 애플리케이션 서버 등)에 직접 접속하는 것을 막고, 엄격히 제어된 하나의 진입점만을 제공하여 보안을 강화한다. # Bastion 서버의 주요 특징목적외부 관리자의 내부 서버 접속 경로를 중앙화 및 보안 강화위치퍼블릭 서브넷 (인터넷에서 접근 가능)접속 대상프라이빗 서브넷의 서버들 (예: DB 서버 등)접속 방식SSH 또는 RDP를 통해 내부 서버로 접속 중계보안IP 제한, 포트 제한, MFA, 로그 수집, 세션 기록 등으로 보호 강화# Bastion 서버를 사용 이유공격 표면 축소: 내부 서버들에 ..

# 배경 이전까지 AWS Lambda 함수에 작성된 코드는 개발자가 AWS Lambda 콘솔에서 직접 작성하였다.직접 Console 창을 이용하다 보니 코드가 제대로 관리되지 않는 문제가 있었다. 작성된 코드를 GitLab에서 관리하기로 하고 Lambda 함수의 코드를 다운받아 GitLab에 업로드하는 스크립트를 작성하였다.그러나 AWS Lambda의 경우 한 번 작성해 높은 코드를 변경하는 일 잦지 않아 스크립트를 언제 돌려야하는지 고민을 하던 차에 AWS CloudTrail에서 발생된 이벤트를 확인할 수 있음을 인지하고 CloudTrail과 EventBridge를 통해서 람다 함수 코드가 업데이트 될때 Jenkins에서 해당 스크립트를 돌릴 수 있도록 설정하기로 하였다. # CloudTrail에..

# 배경 AWS EKS 클러스터는 aws에서 지원하는 쿠버네티스 버전이 끝나면 업그레이드를 해줘야하는데 생각보다 이 과정이 단기적으로 발생하게 된다.똑같은 내용의 aws 서비스를 올리기 위해서 IaC를 많이 사용한다고 이해했고, 이 중에서도 terraform을 많이 사용하고 있는 추세이다.업그레이드 해야하는 때가 되면 보다 간편하게 적용을 해보기 위해 terraform을 도입해보기로 하였다. # terraform 트리 구조 eks└──main.tf└──helm.tf└──modules └──apigw └──vpc_link └──eks └──cluster └──nodegroup └──role └──alc ..

# 배경 사용 중인 서버에서 도커 이미지를 빌드하면서 디스크 공간이 계속 증가하는 일이 발생하고 이로 인해 제대로 동작이 되지 않는 문제가 발생하였다. 미리 해당 서버에 대한 디스크 알림을 받고 사전에 디스크 여유 공간을 확보하면 해당 문제를 해결할 수 있다고 판단했다.그러나 CloudWatch에서는 기본적으로 현재 디스크에 대한 값을 조회하는 기능을 제공하지 않아서 CloudWatch Agent를 이용한다. # CloudWatch Agent 설치 AWS에서 제공하는 파일을 다운로드하여서 사용하였다. (yum을 사용하여서는 도저히 설치가 되지 않아서 사용하지 못했는데 방법을 찾아봐야겠다.)$ wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu..

# 배경 aws eks를 통해 만들어진 nodegroup을 삭제하는 과정에서 다음과 같은 에러 메시지가 뜨면서 삭제가 되지 않는 문제가 발생했다. # 문제 pod가 삭제되는 중에 pending 문제가 발생하여 해당 에러가 발생할 수 있다는 걸 알았고 명령어로 검색한 결과 다음과 같이 pod들이 pending이 되고 있었다. 이중 해당 문제를 발생시키는 pod는 ebs-csi-controller pod이다. # 해결 방법 ebs-csi-controller pod를 삭제한 후 nodegroup을 삭제하도록 한다.$ kubectl delete deployment ebs-csi-controller$ eksctl delete nodegroup --cluster [CLUSTER] --name [NODE..

# 배경 제플린 쿼리를 돌리는 중 다음과 같은 에러가 발생하였다.Output is truncated to 220000 bytes. Learn more about ZEPPELIN_INTERPRETER_OUTPUT_LIMIT # 원인 결과 내용이 설정해 둔 것보다 커서 나오는 에러였다. # 해결 방법 output limit을 더 큰 값으로 변경해서 해당 문제를 해결하도록 한다. 1. 서버에 접근한다.$ ssh ubuntu@[server IP] 2. zeppelin 도커에 접근한다.$ docker exec -it zeppelin /bin/bash 3. zeppelin-sites.xml 에서 설정 값을 변경한다.$ vi conf/zeppelin-site.xml밑의 값을 변경 zeppelin.int..

1. docker 그룹 확인하기 docker 그룹 확인$ cat /etc/group | grep -i docker docker:x:221:root 아무 결과도 나오지 않는다면 docker 그룹이 없는 것이기 때문에 docker 그룹을 생성해줘야 한다.$ sudo groupadd docker$ sudo systemctl restart docker 2. 사용자 계정을 docker 그룹에 추가$ sudo usermod -aG docker [user] -G 옵션사용자 계정의 소속 그룹을 변경하는 데 사용하는 옵션여러 그룹을 지정할 때는 , 로 구분한다 -a 옵션사용자 계정을 변경하지 않고 추가하는 옵션 3. 사용자 계정이 잘 추가되었는지 확인$ id -a [user]> uid=1001(user) gid=100..

# 배경 eksctl 명령어를 통해서 AWS EKS 서비스에 클러스터를 생성하는 작업을 진행했다. 클러스터의 버전을 config 파일에 명시해서 진행을 하는 중에 다음과 같은 에러가 발생하였다. apiVersion: eksctl.io/v1alpha5kind: ClusterConfigmetadata: name: test region: ap-northeast-2 version: "1.29" # 문제 eksctl 명령어를 사용하여 클러스터를 생성하는 중 다음과 같은 에러가 발생하였다. Error: invalid version, supported values: 1.21, 1.22, 1.23, 1.24 eksctl 버전에 따라 지원하는 쿠버네티스 버전이 다른데 구 버전의 eksctl을 사용..

# 배경 로컬에서 서버를 ssh로 접근하고 일정 시간 입력이 없으면 다음 메시지가 뜨면서 연결이 끊기게 된다. 이 시간이 생각보다 짧아서 스크립트가 돌아가는 중 연결이 끊길까 엔터키를 몇 번 쳤던 경험이 있다. 이 시간을 늘리도록 해보자 $ client_loop: send disconnect: Broken pipe # connection 시간 늘리기 위와 같은 현상은 서버가 클라이언트가 살아있는지 확인을 하는데 응답이 없을 때 발생하기에 이 시간과 횟수를 늘리면 된다. SSH 설정 파일에 접근한다. $ sudo vi /etc/ssh/sshd_config 아래와 같이 설정값을 활성화 및 작성한다. 300초 * 3 = 900초 동안 클라이언트에게 응답을 요청한다. ClientAliveInterval 300 ..