[ERROR] k8s spec.initContainers[0].image: Required value

Kubernetes에서 반나절을 귀찮게 했었던 에러가 있었다…. deployment manifest파일을 작성하여 kubectl apply ~를 했지만 왜인지 pod가 계속 생성되지 않았었고, kubectl describe ~로 deployment와 replicaset을 확인한 결과 아래 에러가 계속 발생하고 있었다. 분명히 deployment.yaml에는 Container의 Image를 명시해줬는데 위 에러가 뜨길래 여러 삽질을 했었다….. 에러를 차근차근 분석해야한다. 에러를 확인해보면 일반 Container가 아닌 initContainer의 image를 찾고 있는 것 처럼 … Read more

[Linux] fstab 파일에 대한 이해

서버를 관리하는 엔지니어면 대부분 알고 있는 fstab에 대해서 기록하고자 한다. fstab은 한마디로 “서버 부팅단계에서 마운트되어야 할 볼륨 정보를 담은 파일”이다. 서버 부팅중 에러가 나는 경우의 절반은 fstab이 차지했던 것 같다.(이제는 별로 그럴 일은 없지만..) 먼저 간단하게 fstab에 예는 아래와 같다. fstab 파일 /etc/fstab에 존재하고 있으며 크게 6개의 정보로 이루어진다. 1번 – UUID 또는 /dev/vdb(장치명)으로 표현되는데 … Read more

[ERROR] GitLab Forbidden 에러 발생

갑작스레 호스팅중이였던 GitLab에 Forbidden 에러가 발생했다. 증상은 GitLab에 접속하게 되면 아래와 같이 Forbidden 문구가 출력됐다. 에러 추적 과정 Block IP 해제하기 GitLab Redis에서 Block IP를 해제하는 방법은 생각보다 쉬웠다. 위처럼 redis-cli를 통해 Gitlab Redis에 접속 후 ban되어있는 IP를 확인하여 해당 값을 삭제한다. 갑작스레 에러가 발생하면, 해당 에러의 증상부터 파악하는 것이 원인을 빠르게 찾는 답인 것 … Read more

[RabbitMQ] RabbitMQ에 대한 이해

사내 서비스들 중 대부분 RabbitMQ를 사용하고 있지만, 과연 우리가 RabbitMQ를 100% 활용하고 있는가에 대한 의문이 들었다. 내가 알고 있는 RabbitMQ에 대한 정보는 극히 적었다. AMQP를 통해 Producer와 Consumer 사이에서 메시지를 중계해주는 “메시지 브로커”라는 것이며, 크게 Standalone과 Cluster로 구성할 수 있으며, Standalone은 흔히 아는 단독으로 1개의 노드를 띄우며, Cluster는 3개 이상의 노드로 홀 수의 노드를 띄우는 … Read more

[Jenkins] Jenkins 설치

Linux 기반의 Jenkins를 설치했던 방법을 추후에도 참고할 것 같아 작성했다. Jenkins의 설치 방법은 여러가지(Docker, Kubernetes, Linux, Windows)가 있는데, 기본적인 Linux로 설치를 하였고 Rocky Linux 기반으로 진행했다. Jenkins는 최신 Release 또는 Long Term Support 둘 중 1개를 선택할 수 있는데, 아무래도 Long Term Support가 좀 더 안정적이기에 해당 버전을 설치했다. 설치 방법 위 내용은 아래 공식 … Read more

[Docker] Docker 디렉토리 구조

어느 날, systemctl start docker 명령어를 입력했더니 hang이 걸리는 사건이 있었다. dmesg와 journalctl, messages를 전부 확인해도 문제가 되는 부분이 없었고, docker.socket 또한 기동이 되고 있었다. 삽질을 하던 중 찾아낸 원인은…. docker의 기본 디렉토리인 /var/lib/docker 가 3TB 가까이 사용중이였으며, 하필이면 할당된 디스크가 성능이 안 좋은 SATA 디스크였기에 docker가 기동되면서 /var/lib/docker의 데이터들을 읽어오는 시간이 상상초월할 정도로 길었으며, … Read more

[Maven] Maven 명령어 및 옵션 정리

여러가지 Build Toole들이 있지만 업무상 Maven 3.6.x으로 작업하는 경우가 많아서 이에 대한 옵션을 정리하고자 한다. (업무할 때에 참조하기 편하도록 정리하기로 했다.) 공식 Docs를 최대한 생활화 하자. http://maven.apache.org/ref/3.6.3/maven-embedder/cli.html(Maven 3.6.3 공식 페이지이지며, 버전은 알맞게 변경해서 확인해야한다.) Maven 명령어 종류 Maven 옵션 종류

[Jenkins] Jenkins Credentials 확인

Jenkins Credentials를 사용하고 있는데 사실 편해서 많이 사용하는 중이다. 하지만 뜻하지않게 Credentials를 까먹게 되면, Pipeline이나 별도의 Script에 영향범위를 파악하기가 어려워 섣불리 수정하기 싫었다. 그러면 과연 Credentials를 잊어버리면 어떤 방식으로 찾아야할까? Password Value를 확인한다. Password를 찾고싶은 Credentials의 업데이트 버튼을 누르고 개발자 도구(F12)를 켜서 아래 내용을 확인한다. 위에 value인 {AQAAABAA~~~tDt0=} 해당 부분을 복사한다. Jenkins -> Dashboard -> … Read more

[Grafana] Grafana 이해

Grafana는 오픈 소스 시각화 및 분석도구다. Prometheus,, InfluxDB, Elasticsearch 등 여러 데이터 소스와 통합이 가능하며, 시계열 메트릭 데이터를 표현하기에 좋다. (다른 데이터들도 가능하긴 하지만 꽤나 번거로울 수 있다.) 여기서 메트릭 데이터는 키, 값이 쌍으로 이루어진 단순한 숫자 데이터이며 CPU나 메모리등을 측정할 때 쓰이는 데이터가 주로 메트릭 데이터를 의마한다. 키 부분에는 이름과, 상태, 메소드, 타임스탬프가 찍히고 … Read more

[GCP] GCP 디스크 스냅샷 다른 프로젝트로 복사하기

GCP 콘솔의 Cloud Shell 또는 gcloud cli를 통해서 진행 가능하다. 스냅샷 자체를 복사한다기 보다는 기존 프로젝트의 디스크 스냅샷 -> 대상 프로젝트의 리전 디스크 -> 해당 디스크 스냅샷 후 보관 식으로 이루어진다고 보면 된다. (리전 디스크가 비용이 높으므로, 잘 관리해야할 것 같다.) 아래 명령어를 통해 현재 스냅샷들의 목록을 URL형식으로 보여준다. gcloud compute snapshots list –url https://www.googleapis.com/compute/v1/projects/${project_name}/global/snapshots/${snapshot_name1}https://www.googleapis.com/compute/v1/projects/${project_name}/global/snapshots/${snapshot_name2}https://www.googleapis.com/compute/v1/projects/${project_name}/global/snapshots/${snapshot_name3} … Read more