본문 바로가기
반응형

개발/Docker&kubernetes16

Distroless 이미지로 안전하고 최적화된 이미지 생성 Docker 빌드를 할 때 베이스 이미지로 이미지 경량화를 위해 Alpine이미지를 많아 사용해왔다. 초경량을 위해서는 scratch도 있긴 하지만 이는 너무 row레벨이고 언어별로 사용하는데 제약이 많다. Distroless 이미지를 사용하면 Alpine보다 좀 더 경량화된 이미지를 생성할 수 있고 보안적으로도 좀 더 안전한 이미지를 생성할 수 있다. Distroless 이미지는 Google에서 제공하는 이미지로써 작성한 어플리케이션과 런타임 종석성만을 포함하고 있다. 그리고 표준 Linux 배포판에서 볼 수 있는 yum과 같은 Package Manager, Shell, 기타 프로그램들이 포함되어 있지 않아서 이미지를 경량화 할 수 있고, 불필요한 프로그램들이 없어서 이미지 보안적으로 장점을 가질 수 .. 2023. 3. 13.
AWS EKS 구성 및 컨테이너 웹 어플리케이션 배포 - 2 앞에서 생성한 EKS 클러스터에 컨테이너 웹 어플리케이션을 배포하는 과정을 정리해본다. (참고)EKS 클러스터 구성: https://happy-jjang-a.tistory.com/193 1. ECR 생성 및 Image Push Image Repository인 ECR을 생성하고, Image를 Push한다. 아래에서 샘플 어플리케이션을 Cloud9에서 다운로드 받는다. git clone https://github.com/joozero/amazon-eks-flask.git ECR을 demo-flask-backend 이름으로 생성한다. aws ecr create-repository \ --repository-name demo-flask-backend \ --image-scanning-configuration s.. 2023. 2. 10.
K3s 인증서 갱신(certificate has expired or is not yet valid) K3s는 경량화된 Kubernetes로 설치가 쉽고, 적은 메모리/binary 파일을 사용하여 Edge/IoT 환경 혹은 CI/Dev 환경에서 k8s를 쉽게 사용할 수 있도록 도와주는 도구이다. Kubernetes를 줄여서 K8s라고 부르는데 그것보다 좀 더 경량화 된 버전을 Rancher에서 개발한 것이 K3s이다. 이 K3s를 구성하여 테스트용도로 사용하는 중에 인증서 관련 오류가 발생해서 kubectl 명령들이 동작하지 않았다. 인증서 문제로 K3s 클러스터와의 통신이 되지 않는 상황이다. # kubectl get pods Unable to connect to the server: x509: certificate has expired or is not yet valid 일반적인 K8s의 인증서 갱신.. 2023. 1. 15.
Docker Multi Application(여러 어플리케이션) 실행 컨테이너 사용 시 자주 발생할 것 같지도 않고, 컨테이너 사상과도 안맞을 것 같지만 한개의 컨테이너에서 여러개의 프로그램을 실행해야하는 일이 생겼다. 기존 시스템을 컨테이너로 전환하면서 내부적인 상황으로 컨테이너를 분리하지 못하고 한개 컨테이너로 실행을 해야 하는 경우인데 처음에는 좀 막막했지만 생각보다 간단했다. 결론부터 얘기하자면, 컨테이너에서 메인 프로그램은 일반적인 컨테이너처럼 포그라운드로 실행시키고, 나머지 프로그램들은 백그라운드로 실행을 시키면 된다. 간단히 예를 들어서 한개의 컨테이너에 2개의 어플리케이션을 실행해야 한다고 하면 아래와 같이 구성한다. 먼저 Dockerfile에서 어플리케이션을 컨테이너로 모두 Copy 한다. ... RUN mkdir /app COPY ./app1.jar /a.. 2022. 9. 6.
Docker Nginx Simple 컨테이너 생성 컨테이너 기반으로 k8s나 배포 구성 등을 테스트를 할 때 실제 어플리케이션이 아니더라도 테스트용 컨테이너 하나쯤은 필요하다. 그때그때 매번 만들어서 테스트를 했는데 간단한 nginx 컨테이너 하나를 정리해본다. 먼저 디렉토리 하나 생성하고 Dockerfile, index.html 파일 2개를 생성한다. Dockerfile은 아래와 같이 작성한다. FROM nginx:1.21.1 COPY ./index.html /usr/share/nginx/html/index.html EXPOSE 80 다음으로 index.html은 다음과 같이 작성한다. Docker Container Nginx 필요한 파일은 모두 준비됐고 로컬에서 한번 실행되는지만 본다. 생성한 디렉토리로 이동 후 아래 명령들을 차례로 실행한다. # .. 2022. 8. 26.
Docker Keep Running(실행 유지) 방법 Docker로 작업을 할 때 테스트, 디버깅 등의 목적으로 컨테이너 실행 상태를 유지하고 싶을 때가 있는데 어떻게 하는지 알아본다. 기본적으로 컨테이너는 내부 프로세스가 종료가 되면 컨테이너도 종료가 된다. 이는 컨테이너 프로세스를 백그라운드가 아닌 포그라운드로 실행을 하는 이유이기도 하다. 아래를 보면 기본 ubuntu이미지를 실행하고 docker 프로세스를 조회해보면 STATUS는 종료됐다고 나온다 docker run -d ubuntu 테스트나 디버깅을 목적으로 컨테이너에 접속해서 뭔가를 하고 싶은데 컨테이너는 종료가 된 상태이다. 다음과 같이 "-t" 옵션과 함께 실행을 하면 컨테이너를 실행상태로 유지를 할 수 있다. docker run -d -t ubuntu 컨테이너가 실행상태를 유지하고 컨테이너.. 2022. 8. 26.
Docker 컨테이너 apt-get install Unable to locate package 에러 간혹 컨테이너 내부에 접속해서 테스트를 위해 패키지를 직접 설치하는 경우가 있다. 이럴 때 Docker 컨테이너 내부에서 apt-get install을 통해 패키지를 설치하면 Unable to locate package가 발생하고 설치가 되지 않는 경우가 있다. 아래는 vim을 설치했을 때의 예이다. Unable to locate package 예외가 발생 했을 때에 apt-get update를 먼저 실행해준다. apt-get update 위와 같이 update가 실행되고, 다시 apt-get install로 원하는 패키지를 설치하면 정상적으로 설치가 된다 apt-get install vim 이제 필요한 패키지들을 설치해서 테스트 컨테이너 테스트를 하면 된다. 2022. 8. 26.
Kubernetes pod pending FailedScheduling - n node(s) had taints that the pod didn't tolerate Kubernetes에서 pod를 실행하고 'kubectl get pod' 로 pod 상태를 조회했을 때 pod 상태가 계속 pending 상태로 남아있고 시작이 되지 않는 상황이 발생했다. 처음에는 image를 받아오거나 Volume설정 등에 문제가 생겼나하고 의심을 했지만 describe 명령으로 pod상태를 자세히 확인 했을 때 "node(s) had taints that the pod didn't tolerate"라는 메시지를 확인했다. kubectl describe pod pod-xxxxxx[pod명] 이유는 FailedScheduling으로 pod를 실행할 node가 없다는 얘기였다. 테스트 환경으로 Master노드 하나에 pod들을 올릴 수 있도록 설정을 해뒀었는데 한번 더 아래 명령으로 확인.. 2022. 4. 26.
반응형