본문 바로가기

MLOps19

[Docker] cannot stop container: permission denied 오류 해결 이번 글에서는 docker stop 시 자주 발생하는 오류에 대한 해결 방법을 살펴보겠습니다. 현재 업무는 AWS EKS 상에서 진행되고 있고, 코드 수정사항이 있을 때 다음과 같은 과정을 거칩니다. 1. Gitlab에서 코드 수정2. Jenkins에서 Docker Image 빌드 테스트 후, AWS ECR로 Image 푸쉬3. ArgoCD에서 해당 Pod 재생성 최근 Gitlab과 Jenkins 서버를 이관한 이후, Jenkins에서 Docker Image 빌드 테스트를 진행할 때 계속해서 다음과 같은 오류가 발생하였습니다. 기존 Image가 있을 경우 해당 Image를 삭제하는 코드가 있는데 해당 코드에서 발생하는 오류였습니다.Error response from daemon: cannot remove.. 2025. 3. 5.
[Docker] error getting credentials ~ 오류 해결 이번 글에서는 docker compose시 발생한 error getting credentials 관련 오류 해결 방법에 대해 간단하게 살펴보고자 합니다. https://mlops-for-mle.github.io/tutorial/의 내용 중 Zookeeper와 Kafka 관련 실습 진행 과정에서 발생한 오류에 대해 작성하였습니다. 저의 docker 실습은 Windows의 wsl을 기반으로 진행되었습니다. 우선 Zookeeper와 Kafka와 관련된 docker compose의 내용은 다음과 같습니다.# naive-docker-compose.yamlversion: "3"services: zookeeper: image: confluentinc/cp-zookeeper:7.3.0 container_n.. 2024. 5. 20.
[Docker] Dockerfile 작성 및 실행 이번 글에서는 예제를 통해 Dockerfile을 작성하고 실행하는 방법에 대해 알아보도록 하겠습니다. 예제는 https://mlops-for-mle.github.io/tutorial/을 학습하며 작성하였음을 미리 알려드립니다. 우선 예제의 시나리오는 PostgreSQL container는 이미 존재하는 상황이고, data_generator.py을 실행할 수 있는 container를 생성하여 iris 데이터를 PostgreSQL DB에 입력하는 것입니다. data_generator.py 코드는 다음과 같습니다. 해당 코드는 python을 통해 iris 데이터를 DB에 입력하는 코드입니다. 자세한 설명은 넘어가도록 하겠습니다. # data_generator.py import time from argparse.. 2023. 12. 15.
[Kubernetes] Object 기초 - ConfigMap, Secret 이번 글에서는 kubernetes의 object 중 ConfigMap과 Secret에 대해서 살펴보고자 합니다. 해당 글은 Inflearn의 '대세는 쿠버네티스 [초급~중급]' 강의를 학습하면서 작성한 글임을 미리 알려드립니다. 바로 예시를 들어 설명하겠습니다. 서비스를 운영할 때는 테스트를 진행하기 위한 개발 서버와 실제 운영을 위한 운영 서버가 존재합니다. 개발과 운영 서버에서는 보안 설정, 유저, 키 등 일부 설정들에 차이가 있습니다. 이러한 차이로 인해 개발과 운영 서버의 이미지를 각각 생성하게 된다면, 상당히 비효율적일 수 있습니다. 따라서 하나의 image로도 개발과 운영 환경에 배포할 수 있도록, 환경 변수들을 관리해 주는 object가 바로 ConfigMap과 Secret입니다. 일반적인 .. 2023. 12. 13.
[Docker] PostgreSQL 서버 생성 이번 글에서는 Docker에서 PostgreSQL 서버를 생성하는 방법에 대해 살펴보고, 과정에서 필요한 docker 명령어에 대해서도 설명하고자 합니다. 해당 과정은 https://mlops-for-mle.github.io/tutorial/ 사이트의 실습 과정을 학습하며 작성하였음을 미리 알려드립니다. 우선 PostgreSQL 서버는 docker run 명령어를 통해 생성하는 것이 가능합니다. 명령어 뒤에 여러 옵션들이 붙는데, 하나씩 살펴보겠습니다. -d : container를 detached 모드로 실행하는 옵션으로, 해당 이미지가 백그라운드로 실행 --name : container의 이름 지정 -p : container에서 외부로 노출할 port forwarding을 설정하는 옵션으로, 형식은 h.. 2023. 12. 12.
[Kubernetes] Volume 기초 - emptyDir, hostPath, PVC/PV 이번 글에서는 Kubernetes의 구성 요소 중 하나인 Volume의 기초에 대해 작성하고자 합니다. 해당 글은 Inflearn의 '대세는 쿠버네티스 [초급~중급]' 강의를 학습하면서 작성한 글임을 미리 알려드립니다. Volume 기초에서는 크게 1) emptyDir, 2) hostPath, 3) PVC/PV에 대해 살펴보겠습니다. 우선 emptyDir입니다. emptyDir은 volume이 생성될 당시에는 해당 volume의 내용에는 아무것도 없기 때문에 붙여진 명칭으로, pod 내에서 container 간 데이터를 공유하기 위한 volume입니다. 아래 그림을 보면, container1과 container2는 같은 volume을 mount하고 있으므로, container 간 데이터를 전송하지 않아도.. 2023. 12. 10.
[Kubernetes] PostgreSQL 설치 및 실행 이번 글에서는 Kubernetes(minikube)에 PostgreSQL을 설치하고 간단하게 실행하는 방법에 대해 살펴보도록 하겠습니다. PostgreSQL과 같은 DB의 경우 물리적인 저장소가 필요하기 때문에, PV(Persistance Volume)과 PVC(Persistance Volume Claim)을 생성해줘야 합니다. DB 관련된 폴더를 생성하고 pv와 pvc 관련된 yaml 파일을 생성합니다. $ sudo mkdir -p ./postgres $ vi postgres/pv.yml apiVersion: v1 kind: PersistentVolume metadata: name: postgres-pv labels: type: local spec: storageClassName: manual capa.. 2023. 11. 29.
[Kubernetes] Service 기초 이번 글에서는 Kubernetes의 구성 요소 중 하나인 Service의 기초에 대해 작성하고자 합니다. 해당 글은 Inflearn의 '대세는 쿠버네티스 [초급~중급]' 강의를 학습하면서 작성한 글임을 미리 알려드립니다. Kubernetes의 pod는 재생성될 때마다 IP가 초기화되는 것과 같이 영구적이지 않다는 특성을 가지고 있습니다. 따라서 pod가 재생성되더라도 외부 혹은 내부에서 접근이 용이하도록 Service를 사용합니다. Service의 유형은 크게 1) ClusterIP, 2) NodePort, 3) Load Balancer 등이 있으며, 차례대로 살펴보도록 하겠습니다. 위에서 간단하게 언급한 것처럼, pod는 메모리 및 CPU 이슈로 인해 언제든지 내려갈 수 있고, 재생성되기는 하지만 IP.. 2023. 11. 25.
[Kubernetes] Helm 설치 이번 글에서는 kubernetes 패키지 관리 툴인 Helm 설치 과정에 대해 살펴보고자 합니다. Python의 pip와 Node.js의 npm 등이 대표적인 패키지 관리 툴이며, helm도 kubernetes에서 유사한 역할을 수행합니다. RedHat에서 설명하는 Helm을 간단하게 살펴보면, Helm은 helm chart를 통해 애플리케이션 정의부터 업그레이드까지 설명하는 방식으로 작동하며, CLI 툴을 사용하여 애플리케이션을 생성, 관리, 구성하는 것이 가능하다고 합니다. 설치 과정은 간단합니다. Helm 문서에 나와있는 설치 방법으로, 다음 코드들을 입력해 주면 설치가 완료됩니다. $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/hel.. 2023. 11. 15.
[Kubernetes] Pod 기초 이번 글에서는 Kubernetes의 구성 요소 중 하나인 Pod의 기초에 대해 작성하고자 합니다. 해당 글은 Inflearn의 '대세는 쿠버네티스 [초급~중급]' 강의를 학습하면서 작성한 글임을 미리 알려드립니다. Pod는 하나 혹은 여러 개의 container 집합으로, Kubernetes application 중 가장 작은 단위입니다. 그럼 그림과 코드를 통해 살펴보겠습니다. Pod는 하나의 독립된 서비스를 실행할 수 있는 container들로 구성되어 있고, 내부 혹은 외부에서 접속할 수 있도록 port를 가지게 됩니다. 이때 container는 한 개 이상의 port를 부여받을 수 있지만, 다른 container의 port와 중복되서는 안됩니다. Pod가 생성될 때, 내부 IP가 자동 할당되며 재.. 2023. 11. 13.