Application Modernization/Container & PaaS 18

K8S HPA(Horizontal Pod Autoscaling) 적용

개요 HPA(Horizontal Pod Autoscaling)는 K8S 노드 내부의 Pod의 레플리카 확장을 의미한다. CPU 사용량에 따라 배포된 파드의 복제를 지정해 서비스가 원활하게 작동할 수 있도록 하는데 그 목표가 있다.(이는 추후에 설명할 워크노드의 인스턴스를 늘리는 Instance Autoscaling 과는 다르다.) 적용 순서(AWS EKS 기준) 1. 쿠버네티스 metrics server를 생성한다. Metrics Server는 쿠버네티스 클러스터 전체의 리소스 사용 데이터를 집계한다. 각 워커 노드에 설치된 kubelet을 통해서 워커 노드나 컨테이너의 CPU 및 메모리 사용량 같은 메트릭을 수집한다. kubectl apply -f https://github.com/kubernetes-..

AWS EKS 관리를 위한 Amazon EC2 구성시 문제 해결

kubectl 명령어 발행시 localhost:8080 접속이 불가능하는 에러가 나온다면? [ec2-user@ip-192-168-44-40 ~]$ kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port? aws eks 명령어로 kubernetes 접속 환경을 변경하는 것이 필요 aws eks --region [사용하는 리전명] update-kubeconfig --name [EKS CLUSTER이름]

AWS EKS Workshop 진행시 자주 발생하는 에러 및 처리

개요 AWS상에서 EKS를 구성하고 실습해 보는 교재 중 최고는 개인적으로 "AWS EKS 워크샵 스튜디오"라고 생각한다. 다만 이 워크샵을 그대로 따라 진행한다고 해도 예상치 못하는 몇몇 문제를 만나곤 하는데 이 포스팅은 진행시 만날 수 있는 에러에 대해 해결방법을 정리한 것이다. Workshop Studio catalog.us-east-1.prod.workshops.aws aws의 eks-workshop을 따라하다가 아래와 같이 AWS콘솔에서 EKS노드를 보기위해 권한을 주는 작업인 assumedrolename 명령어 수행시 " An error occurred (ValidationError) when calling the GetRole operation: The specified value for r..

ubuntu에 docker 설치 및 삭제하기

설치 apt-get update sudo apt-get update apt가 https를 통해 repository를 사용할 수 있도록 패키지 설치 sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release Docker 공식 GPG Key 추가 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg apt source list에 repository 추가 echo "deb [arch=amd64 signed-by=/usr/share/keyr..

Kubernetes Ingress

Minikube(미니큐브)에 ingress 설치 ingress Controller 동작 확인 curl -I http://sharplee7.io/healthz 호출을 통한 ingress controller health check apiVersion: v1 kind: Service metadata: name: hello-minikube3 namespace: default labels: app: hello-minikube3 spec: selector: app: hello-minikube3 ports: - protocol: TCP port: 8080 targetPort: 8080 type: NodePort ingress ip 확인 DNS에 HOST명과 IP 등록(예제에선 로컬 PC로 접속하기 때문에 시스템의 h..

EKS, Ingress, AWS API Gateway

Kubernetes with AWS API gateway Docker container + AWS API gateway로 개발환경이 구성되어 있는 상태에서 Kubernetes 도입을 검토하게 되었다. Image build나 배포를 위해 Jenkins와 Ansible을 이용하고 있기는 했지만 원래의 구성이라면 배포나 배포 후의 작업들이 번거롭기도 하고 배포의 편의성이나 유연함과는 거리가 멀다고 느껴졌기 때문이다. 예를 들어 같은 기능을 갖는 backend service가 가용성을 위해 여러개 떠있다고 가정했을 때 update를 진행한다 생각하면 기존의 방식으로는 머리가 아플 것이 분명하다. AWS API gateway의 특징 Kubernetes를 도입하기 전에 AWS API gateway을 살펴보지 않을 ..

NodePort vs LoadBalancer vs Ingress

이번 포스팅은 구글 클라우드의 Kubernetes Service 비교 글을 참조 했으며 참조한 원본 글을 아래의 링크에서 확인 할 수 있다. Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what? Recently, someone asked me what the difference between NodePorts, LoadBalancers, and Ingress were. They are all different ways to get… medium.com Kubernetes 서비스 Kubernetes 서비스는 Pod(파드) 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 방법을 의미한다. Kubernetes는 Pod에게 고..

Spring Boot로 만든 Hello Minikube 예제

이번 포스팅에서는 spring boot 기반의 hello 애플리케이션을 지난번 포스팅에서 설치했었던 minikube(미니큐브) 시스템에 배포하고 호출하는 예제를 실행해 보고자 한다. (*PC에 minikube가 이미 설치되어있다면 이전 포스팅을 참조하지 않아도 된다.) 예제에 사용될 앱은 http://[ip:port]/hello/[이름]의 형식으로 호출되며 이름을 넘기면 리턴해주는 심플한 앱이다. 예제에 사용된 환경 JDK 11 Spring Boot 2.6.0 gradle git Docker for mac(windows라도 상관없다) 및 Docker hub 계정 Minikube Hello Minikube2 앱 작성 https://start.spring.io/에 방문해 아래와 같은 옵션으로 앱을 만들어 다..

Minikube(미니큐브)

이 포스팅은 2020년 네이버 블로그에 게시 했던 글을 리 포스팅한 글입니다. Minikube(미니큐브)란? 쿠버네티스는 마스터 노드(Master Node)와 하나 이상의 워커 노드(Worker Node)로 구성되어 있습니다. 그러나 단순 개발 테스트를 위해 개인이 이 정도의 플랫폼(Platform)을 구성하는 것은 쉽지 않습니다. Minikube(미니큐브)는 마스터 노드의 일부 기능과 개발 및 배포를 위한 단일 워커 노드를 제공해 간단한 쿠버네티스 플랫폼 환경 개인 PC에서 만들어 볼 수 있게 만들어 줍니다.(이런 개인용 Kubernetes 개발 테스트 환경으론 Kind라는 제품도 있습니다.) Minikube에 대한 원본 기사는 아래의 링크를 통해 확인 가능합니다. Minikube를 사용해서 클러스터 ..

Kubernetes (쿠버네티스) 란?

본 포스팅 자료는 2019년 네이버 블로그에 포스팅 했던 내용을 리 포스팅한 글입니다. 개인적으로 2019년 한해 가장 뜨거웠던 IT 키워드는 쿠버네티스(Kubernetes: 첫 자인 K와 마지막 자인 S사이에 8개의 단어가 있다고 해서 K8S로 줄여 부른다) 였던 걸로 생각됩니다. 쿠버네티스는 다수의 컨테이너들을 관리해 주는 오케스트레이션(Orchestration) 플랫폼입니다. 즉, 도커(Docker)와 같은 컨테이너들이 한 두대의 서버에 몇 개로만 구성되어 운영될 때는 필요 없는 개념이지만 컨테이너들이 엔터프라이즈(Enterprise)급의 구성을 통해 수십, 수백개로 늘어나게 되면 그 관리를 위해 꼭 필요한 플랫폼입니다. 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확..

Docker Image Repository

이번 포스팅에서는 Public 망에 있는 Docker-Hub(https://hub.docker.com/) 에 개인용 컨테이너(Container) 이미지(Image) 레지스트리 (Registry)를 만들어 보도록 하겠습니다. 이번 포스팅은 다음의 지식이나 환경이 필요합니다. - Windows, Linux 혹은 Mac 환경에 설치된 Docker Engine - Docker에 대한 기본 개념 - Docker 기본 명령어 Hands on은 다음과 같은 순서로 진행 가능합니다. 1. hub.docker.com에 계정 생성(혹은 로그인) - 웹 브라우저를 통해 http://hub.docker.com 에 접속 - sign in 메뉴를 찾아 클릭 - 계정 생성(Google ID 등과 연동 가능) - 로그인 2. Reg..

Docker Private Container Registry 만들기

이 포스팅은 2020년 네이버 블로그에 올렸던 내용을 리 포스팅했습니다. 지금까지의 포스팅에서 도커(docker) 이미지(혹은 컨테이너 이미지)는 도커 허브(https://hub.docker.com/)로부터 공개된 이미지를 끌어와(pull) 만들었습니다. 이렇게 컨테이너 이미지를 등록, 보관 관리하는 곳을 container registry라고 하는데 Network의 Public 망이 엄격히 금지되는 곳에서는 네트워크 망 내에 별도의 registry를 만들어야 될 필요가 있습니다.(maven repository를 위해 nexus repository를 별도로 구축하는 것과 같습니다.) 이번 포스팅에서는 docker registry 이미지를 이용해 Private Container Registry 만드는 것을 ..

자주쓰는 Dockerfile 명령어

이 글은 2018년에 네이버 블로그에 포스팅했었던 글을 리포스팅한 글입니다. dockerfile을 만드는데 자주 쓰는 키워드를 알아보도록 합니다. FROM [base 이미지][:버전] FROM ubuntu:16.08 FROM은 docker image를 생성할 base 이미지를 지정합니다. 버전명을 지정하지 않으면 가장 최신 이미지를 이용해 이미지를 생성합니다. RUN [“실행할 명령어”,”파라미터1”,”파라미터2…] RUN [“apt-get”,”install”,”-y”,”tomcat8”] FROM으로 생성된 이미지내에서 실행할 명령어를 입력합니다. [“명령어”,”파라미터”,…]등으로 실행 할 수 있지만 ‘[‘없이 바로 명령어를 입력해도 됩니다. RUN apt-get install –y tomcat8 RU..

Dockerfile 로 docker image 작성

이 글은 2018년에 네이버 블로그에 포스팅했었던 글을 리포스팅한 글입니다. 현재 실행중인 컨테이너 이미지를 통해 Docker Image를 만드는 명령어로 commit이 있습니다. 하지만 개발 환경에 따라 동적으로 도커 이미지를 만들고자 할 때 commit을 통해 이미 사용 중인 이미지를 배포하는 방식보단 Dockerfile은 이용해 동적 이미지 생성이 효율적일 수 있습니다. Dockerfile은 eclipse, gradle과 함께 개발자 배포 환경에 자주 사용됩니다. 여기서는 이러한 Dockerfile에 대해 간략히 알아보도록 하겠습니다. 다음의 Dockerfile 파일 샘플을 확인해 보도록 합니다.(파일명 Dockerfile) FROM bridg/java8 ENV http_proxy 'http://p..

Docker로 Tomcat MySQL 실행

이 글은 네이버 블로그에 2018년 포스팅 했던 글을 리포스팅한 글입니다. 이번 포스트에서는 지난번에 설치한 Tomcat 컨테이너에 이어 MySQL 컨테이너를 추가해 Tomcat컨테이너와 MySQL컨테이너 사이의 연동을 테스트해 보도록 하겠습니다. 지난 포스팅인 ‘Docker for windows를 통한 Tomcat 실행’를 테스트를 하지 않은 분은 반드시 이전 실습을 완료 후 이번 포스팅을 보시기 바랍니다. MySQL 연동을 위한 MySQL설치 docker search mysql (docker hub로부터 mysql image search) C:\Users\FKL>docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a..

Docker로 Tomcat 실행

이 글은 2018년 네이버에 포스팅했던 글을 Tistory로 리포스팅한 글입니다. docker에 대한 간단한 개념과 명령어를 알아 보았다면 이번에는 미리 만들어진 Tomcat8 도커 이미지를 이용해 간단한 웹 초기 화면을 웹 브라우저에서 호출해 보도록 하겠습니다. 이번 실습에 사용될 웹어플리케이션의 컨텍스트 이름은 ROOT이며 디렉토리 및 파일의 구조는 다음과 같습니다. C:\webapps\ROOT │ index.jsp │ └─WEB-INF web.xml 실습에 사용될 어플리케이션은 아래의 링크에서 배포 파일 형태로 다운로드 받으실 수 있습니다. 배포 파일의 이름은 ROOT.war 파일 입니다. http://sharplee7.blog.me/221464833661 또한 미리 만들어진 Tomcat8의 이미지..

Docker 개념

이 포스팅은 필자 소유의 네이버 블로그에 작성된 2019년도의 글을 리포스팅한 글입니다. Docker는 LXC(리눅스 컨테이너)라는 커널 컨테이너 기술을 이용해 만든 컨테이너 기술 중의 하나입니다. 물론 Docker를 LXC와 동일선상에서 비교하는 것은 무리가 있으며 최근에는 VM(Virtual Machine) 보다 경량화된 서버 구동 체제로 각광을 받고 있습니다. 특히 클라우드 환경의 확산과 더불어 그 활용도가 더 증가되고 있습니다. Docker의 특징 컨테이너는 이미 오래된 기술이다.(리눅스의 LXC, Solaris Zones, BSD Jails등) 그럼 이 오래된 기술 대비 Docker 컨테이너의 장점은? 손쉬운 사용을 위한 툴 재사용 가능한 컴포넌트 현존하는 대부분의 Linux 서버에서 구동: 물..

반응형