Docker, k8s 19

jar 파일을 실행시키는 Dockerfile 만들기

기존의 Dockerfile을 ngixn나 http 위주로 만들었다면, 이번에 jar기반의 java 파일을 Dockerfile로 만드는 방법을 실습해 보도록 하겠다. 위 실습을 진행하기전에 jar 파일이 있어야 하므로 개발한 java 파일을 jar 파일로 만들어 줘야 한다. mvn clean mvn package 아니면 그냥 build을 해도 된다. 이제 Dockerfile 을 작성해보자 FROM openjdk:11-jre-slim # Language ENV LC_ALL=C.UTF-8 # timezone ENV TZ=Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR app # doc..

Docker, k8s 2023.10.15

k8s_Volume (2) Persistent Volume

k8s volume 2번 글을 작성하는데까지 시간이 좀 걸렸습니다..ㅎ (갑자기 Terraform에 빠져 잠깐 k8s을 버려(?)두었습니다) Persistent Volume PV는 관리자가 프로비저닝하거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지이다. 노드가 클러스터 리소스인 것처럼 PV는 클러스터 리소스이다. 특히 PV는 기본의 Pod와 다른 라이프사이클을 가진다. Persistent Volume Claim PVC는 사용자의 스토리지에 대한 요청이다. 파드와 비슷하다. 파드는 노드 리소스를 사용하고 PVC는 PV 리소스를 사용한다. 파드는 특정 수준의 리소스(CPU 및 메모리)를 요청할 수 있다. 실습 상황 우선 각 노두에 web에 index.html 이라는 파일을 만들고 해..

Docker, k8s 2023.10.02

k8s_ Service Account 개념

AWS EKS 을 사용하면서 서비스 어카운트 라는 개념을 접하여 공부하고 나중에 볼 수 있도록 정리해야겠다. k8s Acoount 종류 - User Account : 운영자 또는 개발자 등이 클러스터를 운영하는데 활용 - Service Account : 쿠버네티스 서비스 또는 써드파티 서비스(프로메테우스, 젠킨스 등)가 사용하는 계정 쿠버네티스 공식 문서에서는 사용자 어카운트는 사람을 위한 것이지만, 서비스 어카운트는 쿠버네티스의 경우 파드의 일부 컨테이너에서 실행되는 애플리케이션 프로세스를 위한 것이다. 라고 정의되어 있다. 또한 serviceaccout을 사용하려면 토큰을 생성해야한다.(이전버전에는 자동으로 생성되었는데 1.24 이후 버전부턴 토큰을 따로 생성해야 한다.) ServiceAccout을 ..

Docker, k8s 2023.09.30

k8s_ deployment 배포 전략

k8s에서 deployment가 이전 deploy을 제거하고 수정된(버전 업그레이드 혹은 일부 코드 수정 등) deploy로 교체해야 할 순간들이 생길 수 있다.(ex 이미지 파일 변경 등) 일반적으로 deployment을 새로 배포하면, pod을 삭제하고 새로운 pod를 올리지만, 이 외에, 삭제와 생성을 동시에 한다거나, 일단 교체할 pod을 생성하고 이전 pod을 제거한거나 이런 배포 전략을 설정 하는 실습을 해보겠다. 일단 배포 전략은 크게 recreate, rollingupdate, 블루/그린이 있다. Deployment 배포 전략 recreate 이전 버전이 즉시종료되면서 새로운 버전 배포 배포 도중 유휴상태가 발생하므로 운영에는 적합하지 않다. rollingupdate 유휴상태 없이 pod을..

Docker, k8s 2023.09.22

k8s_로드밸런스 Metallb

Metallb k8s에서 온프로미스 환경세어도 로드밸런서를 해주는 플러그인이 바로 Metallb 이다. Kube 환경에서도 기존 VM 환경과 동일하게 Load Balancing 기능을 위해서 외부 L4 스위치가 필요 합니다. 하지만 MetalLB를 사용하시면 Service Type을 LoadBalancer로 지정하는 것만으로 Load Balancing 가능하다고 한다. metallb는 L2 네트워크(ARP/NDP)와 L3 네트워크(BGP)로 로드밸런서를 구현한다. 설치 방법과 내용은 아래 공식 docs을 참고 하였다. https://metallb.universe.tf/installation/ MetalLB, bare metal load-balancer for Kubernetes Installation B..

Docker, k8s 2023.09.20

k8s_ Autoscaling Metric Server(HPA)

이번에는 Pod의 리소스를 일정 수준을 초과 했을 때, 자동으로 Pod을 확장해주는 Auto Scaling을 k8s에서 구현시켜보록 하겠다. 이 때 autoscale 방법은 HPA를 사용하겠다. HPA(Horizontal Pod Autoscaling) 이렇게 수평적으로 파드를 늘려주는 방식이다. 반대로 수직확장은 cpu의 자원을 늘려주는 방식이다. 이를 위해선 Metric Server을 우선 설치 해야한다. Metric Server 란 - Metric-server는 Kubernetes 내에 존재하는 Pod의 메트릭을 실시간으로 수집해 kube-api 서버에 안정적으로 전달하는 역할을 합니다. - 여기서 주의 해야 할 점은 Metric Server는 단순히 CPU 리소스를 체크 하는 모니터링 기능이 아니라..

Docker, k8s 2023.09.18

k8s_NodePort , Port, TargetPort

k8s을 공부하다 보니 이 부분이 헷갈려서 따로 정리하려고 한다. 우선 각자의 정의에 대해서 알아보자 NodePort - 외부에서 Node로 접근할 때 사용 되는 포트 Port - Cluster 안에서 내부적으로 Service 객체에 접근하기 위해 사용되는 포트 TargetPort - Service에서 전달 된 요청을 한 단계 아래인 Pod로 전달 될 때 사용되는 포트 즉 전달 순서는 NodePort - Port - TargetPort 순인 것이다. Nginx을 NodePort로 서비스 시키고 NodePort는 32000 , 포트는 80 타겟 포트는 8080일때, Service.yml 파일은 아래와 같다. apiVersion: v1 kind: Service metadata: name: web-nginx ..

Docker, k8s 2023.09.17

k8s_wordpress + mysql 연동

이번에는 mysql과 wordpress pod을 만들어 연동시켜 서비스 하는 실습을 해보겠다. Requirement - mysql 5.7 - wordpress https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/ Example: Deploying WordPress and MySQL with Persistent Volumes This tutorial shows you how to deploy a WordPress site and a MySQL database using Minikube. Both applications use PersistentVolumes and PersistentVolumeC..

Docker, k8s 2023.09.17

k8s_Volume (1) EmptyDir , hostPath

k8s 에서 Volume은 Data 보존을 위해서는 필요하다. 컨테이너는 다시 삭제하고 재시작 하면 되지만, 그렇게 되면 해당 데이터는 삭제되기때문에, 데이터 보존을 위해서도 volume 기능을 사용하는 것이 좋다. 종류는 EmptyDir(임시볼륨), hostpath, Persistent volume이 있다. 가장 기본적인 구조는 yml 파일에서 아래 같은 문법을 사용한다. VolumeMounts: # 해당 컨테이너와 연결한 볼륨 설정 mountPath: name: volumes: # 호스트에서 연결할 볼륨 설정 - name: Emptydir Lifecycle은 pod와 동일하여 pod가 삭제되면 해당 볼륨도 삭제된다. yml 파일을 통해 Emptydir을 설정해보도록 하겠다. 이때 nginx의 html..

Docker, k8s 2023.09.16

k8s_ Ingress nginx

Ingress란? 쿠버네티스 Ingress란 HTTP(S) 기반의 L7 로드밸런싱 기능을 제공하는 컴포넌트이다. Ingress는 외부에서 쿠버네티스 내부로 들어오는 네트워크 요청을 어떻게 처리할지 결정하며, 쉽게 말해 외부에서 쿠버네티스에서 실행중인 Deployment와 Service에 접근하기 위한 관문과 같은 역할을 담당한다. Ingress 는 LoadBalancer, SSL Terminated, Named 의 가상호스팅을 지원하기도 한다. 즉, Ingress 가 서비스 앞에서 L7 로드밸런서 역할을 하고, URL에 따라서 라우팅을 하게 된다. Ingress-Nginx 환경세팅 https://kubernetes.github.io/ingress-nginx/deploy/ Installation Guide..

Docker, k8s 2023.09.15