
Action Controller Runner (이하 ARC) 는 파드 단위 Self Hosted Runner 입니다. 즉, 쿠버네티스 환경에서 파드를 Self Hosted Runner 로 지정할 수 있게 해주는 오픈소스죠. ARC 에 대한 정보는 여기를 확인해주세요. 근데 ARC 를 사용하는 경우 하나 고려해야 할 사항이 있습니다. 바로 ARC 에 의해 만들어지는 파드는 Github Action 의 Job 이 종료될 경우 제거되고 다시 생성됩니다. 따라서 HostPath 나 EFS 를 사용하지 않으면 Job 을 실행할 때 생성했던 Java SDK, Node, Build File 등 또한 같이 삭제됩니다. 그 말은 즉슨, caching 을 할 수 없으며, 매번 필드할 때 마다 새롭게 패키지를 설치하기 때문..

퍼블릭 클라우드 환경에서 쿠버네티스를 운영할 때 온프로미스보다 편한 점 중 하나가 바로 볼륨 관리 라고 생각합니다. EBS CSI Driver 를 설치 후 Storage Class, PV 그리고 PVC 를 통해 쉽게 AWS EBS 를 통해 볼륨을 언제 어디서든 가져다 쓸 수 있죠. 한편, 쿠버네티스에선 다양한 방법으로 볼륨을 사용할 수 있는데요. 컨테이너간 공유를 가능케 해주는 EmptyDir, 노드의 볼륨을 통해 파드간 공유를 가능케 해주는 HostPath, NFS 서버를 사용하는 NFS 기능 등이 있습니다. 그라파나를 노드에 배포할 때, 그라파나의 설정 파일은 그라파나가 배포된 노드의 볼륨에 저장이 됩니다. 따라서 만약 그라파나 파드가 다른 노드에 배포가 될 경우 이전에 가지고 있던 그라파나 설정을 ..

그동안 퍼블릭 클라우드를 이용해서 쿠버네티스 클러스터 환경을 구축했습니다. 문제없이 잘 사용하고 있었지만, 역시나 문제는 비용이였습니다. 마스터 노드, 워커 노드 총 2대만 띄어놓아도 족히 달에 5만원 이상은 나왔죠 😢 playground 를 사용한다해도 속도가 느리고 아무래도 휘발성이다 보니 불편함이 많았습니다. 그래서 결국 쿠버네티스 클러스터를 구성할 PC 를 하나 장만해야겠다 생각을 했고, A to Z 까지 구성을 해보고 싶어 PC 또한 부품별로 구매하여 조립하고자 했습니다. 어떤 부품들이 있을까? 부품은 아래와 같습니다. AMD Ryzen 5700G 16core ASRock DeskMini X300 베어본 삼성 PM9A1 M.2 NVMe SSD 1TB 삼성 DDR4 PC-25600 32G 노트북용..

쿠버네티스 환경에선 Action Controller Runner (이하 ARC) 를 이용해서 파드를 Self Hosted Runner 로 사용할 수 있습니다. ARC 구조는 위와 같습니다. Self Hosted Runner 로 사용할 파드를 RunnerDeployment 또는 RunnerSet 으로 배포할 수 있죠. RunnerDeployment 는 쿠버네티스에서 Deployment 와 동일하게 동작하고, RunnerSet 은 StatefulSet 과 동일하게 동작합니다. 또한 배포하게 되면 파드 안에 2가지 컨테이너 동작하게 되는데, 하나는 Github Action Job 을 처리하는 Runner 컨테이너, 또 하나는 Docker 관련 일을 처리하는 Docker 컨테이너입니다. 옵션을 통해 Runner..

Istio 는 흔히 K8S 클러스터 내에서 서비스 메시 역할을 해줍니다. 서비스 메시 뿐만 아니라 Nginx Ingress, ELB Ingress 처럼 Ingress 역할 또한 해줍니다. Istio Ingress Gateway 가 정식 명칭이나 쉽게 Istio Ingress 로 지칭하도록 하죠 🤟 EKS 와 같은 퍼블릭 클라우드를 이용해서 Load Balancer Service 를 생성해주면 자동으로 CLB 가 할당됩니다. 따라서 Istio Ingress 또한 CLB 로 할당이 됩니다. CLB 는 앞으로 AWS 에서 deprecated 되기 때문에 Network Load Balancer(이하 NLB) 나 Application Load Balancer(이하 ALB) 로 대체되어야 합니다. 그래서 이번 글에..

Nginx 기반의 Pod 내에서 S3 와 Mount 하기 위해 goofys 를 사용했던 적이 있습니다. (goofys 말고 EBS 나 EFS 도 위시리스트에 있었지만, goofys 가 가장 적합하다고 판단하여 goofys 를 사용하게 되었습니다) 그림으로 표현하자면 아래와 같죠. Nginx 가 provisioning 될 때 ConfigMap 으로 init.sh 를 주어 goofys 를 마운트 한 후 실행되도록 했습니다. 이런식으로 말이죠. #!/usr/bin/env sh set -eu wget https://github.com/kahing/goofys/releases/latest/download/goofys chmod +x goofys /goofys /var/nginx ... nginx -g 'daemo..

쿠버네티스는 다른 플랫폼처럼 인증(Authentication)/인가(Athorization) 를 제공해줍니다. 따라서 인증받지 못한 사용자라면 401 (UnAuthorized) 를 응답 받고, 인증은 되었지만 권한이 없다면 403(Forbidden) 응답을 받게 되죠. 아주 평범한 인증/인가 프로세스입니다. 그런데 인증/인가가 완료되었다고쿠버네티스 환경에 바로 적용할 순 있는 건 아닙니다. 사용자가 보낸 요청을 적용하기 직전 한 군데를 더 들립니다. 그것이 바로 Adimission Controller 입니다. 이번 글에서는 Adimission Controller 에 대한 개념을 간단하게 설명하고, Adimission Controller 를 구현해볼 생각입니다. 😎 Admission Controller 가..

Iptables 를 알아보기 전에 먼저 Netfilter 에 대해 알아보죠 ! Netfilter 와 Iptables AWS EC2 인스턴스를 생성할 때 Security Group 이라는 것을 설정합니다. 이름 그대로 외부로 들어오는 트래픽을 조절할 수 있게 해주는 방화벽 기능이죠. EC2 인스턴스 앞단에 이를 처리해주는 아마 물리적인 기계가 있어서 어떤 트래픽은 허용하고, 어떤 트래픽은 거부하겠죠. Security Group 이 하드웨어 방화벽 이라면 Netfilter 는 소프트웨어 방화벽이라고 생각하면 이해하기 쉽습니다. Netfilter 는 다음과 같은 특징이 있습니다. 소프트웨어 방화벽 패킷 필터링 리눅스 커널 내부의 프레임워크 포트 주소, 변환, 포트 포워딩 및 패킷 변경 라우팅 전후에 데이터 및..

테라폼은 Code 로 인프라를 구축할 수 있게 도와주는 IaC Tool 입니다. 특히 AWS 인프라를 구축할 때 참 유용하게 사용할 수 있죠. module 을 제공해주기 때문에 어렵지 않게 VPC, EKS, ELB 를 생성하고 코드를 관리 할 수 있습니다. 이번 글에서는 테라폼을 이용해 EKS 를 구축하는 과정에서 겪은 문제점과 이를 해결했던 방법에 대해 이야기 해볼까 합니다. 우선 Apply!! terraform-aws-eks 에 가보면 아주 친절하게 테라폼을 이용해 EKS 를 구축할 수 있는 방법에 대해 알려줍니다. 무작정 eks 모듈을 import 하고 example 과 EKS Best Practices Guides 참고하여 테라폼 코드를 작성했습니다. provider "kubernetes" { h..

왜 Helm 을 사용하나요? Helm 이 무엇인지 알아보기 전에 왜 필요한지 먼저 알아보죠 ! 🧐 Consistency 쿠버네티스에 리소스를 배포하려면 아래 이미지처럼 yaml 로 작성해주어야합니다. yaml 이 1,2 개라면 관리가 어렵지 않겠지만 10개 정도만 되도 관리하기가 매우 힘들고 불편해집니다. 또한 kubectl edit을 통해 쿠버네티스의 리소스를 업데이트 해줄 수 있는데, 여러 개발자가 관리를 하게 된다면 일관성(Consistency) 문제가 발생할 수 있습니다. Revision History 어떠한 애플리케이션이 Deploy, ConfigMap, Service, Ingress yaml 로 배포된다고 가정해보죠. 이때 ConfigMap 과 Service 가 업데이트 되어서 yaml 이 변..

EFS (Elastic File System) 은 AWS 의 파일 시스템 서비스입니다. EBS, S3 처럼 데이터를 저장할 수 있습니다. 하지만 각각 쓰임의 목적이 다르기 때문에 자신의 목적에 맞게 잘 사용하여야 합니다. EFS S3 EBS 사용 케이스 프라이빗 이미지 레지스트리 엔터프라이즈급 데이터 백업 웹 서비스 및 컨텐츠 EC2 의 부팅 볼륨 그리고 AWS DataSync 를 이용하면 저장소의 데이터들을 다른 곳으로 옮길 수 있습니다. 같은 VPC 내 저장소는 물론 다른 VPC, 교차 계정 모두 가능합니다. ✅ 다른 VPC, 교차 계정은 서로의 VPC 가 Peering 되거나 TGW 로 sharing 된 상태여야 합니다 자세한 동작 방식은 확인하려며 여기를 눌러주세요 그럼 간단하게 한번 DataSy..

쿠버네티스를 공부하면서 처음 User Account 와 Service Account 를 접했을 때 단순히 쿠버네티스 API 서버에게 자격 증명하는 리소스인가보다 하고 넘어갔던 적이 있습니다. 이해가 안되서 그냥 넘어갔던.. 그래서 User Account 랑 Service Account 는 비슷한거 !! 같은 거 !! 라는 생각을 가지고 있었죠.. 하지만 이 둘은 분명 다릅니다. 쿠버네티스에는 쿠버네티스 내에 존재하는 자원에 대한 접근을 위한 2가지의 account 타입이 존재합니다. User Account Service Account 쿠버네티스 공식 문서에는 이와 같이 나와있습니다. 사용자 어카운트는 사람을 위한 것이다. 서비스 어카운트는 파드에서 실행되는 프로세스를 위한 것이다. 100% 맞는 말이지만..

🔗 eksctl 깃헙 🔗 eksctl 공식 문서 🔗 eksctl config file example eksctl 설치 curl --silent --location "(uname -s)_arm64.tar.gz" | tar xz -C /tmp sudo mv /tmp/eksctl /usr/local/bin eksctl version EKS 구성 eks 는 아마존의 쿠버네티스 서비스이며, eksctl 은 eks 를 쉽게 구성할 수 있도록 도와주는 커맨드 툴 eksctl 공식 문서는 굉장히 친절한 편이라고 생각 💡 eksctl 은 EKS 를 위한 커맨트 툴이므로 aws configure 가 된 상태여야 함 aws 로그인 aws configure 1. Using Config Files (가장 기본) apiVersi..

S3는 퍼블릭 액세스 차단 기능을 이용하여 버킷 내 객체에 대한 접근을 제한 할 수 있습니다. 퍼블릭 액세스 차단을 활성화 하게 되면 자원을 안전하게 보호할 수 있지만, 외부에서 접근이 불가능해 s3 객체에 접근할 수 없습니다. 따라서 S3는 퍼블릭 액세스 차단을 하면서 외부에서 접근할 수 방법을 제공해주는데, 그 방법에 대해 알아보고자 합니다. Pre-Signed-URL 을 이용하여 S3 객체 업로드(PUT)/다운로드(GET) 하기 Pre-Signed-URL 을 이용하여 S3 객체 업로드(PUT)를 진행하고, 다운로드는 서버를 프록시로 두어 서버에서 S3에 접근하여 다운로드(GET)하기 Pre-Signed-URL 을 이용하여 S3 객체 업로드(PUT)를 진행하고, 다운로드는 goofys를 사용하여 S3..

이 글의 내용은 [이펙티브 코틀린]을 참고합니다. 때로는 데이터를 한꺼번에 전달해야 할 때가 있습니다. 아래 코드처럼 말이죠. data class Player( val id: Int, val name: String, val points: Int ) val player = Player(0, "Gecko", 9999) data 한정자는 아래의 함수들을 자동으로 생성해줍니다. toString equals 와 hashCode copy componentN(component1, component2 등) toString 클래스의 이름과 기본 생성자 형태로 모든 프로퍼티와 값을 출력 해줍니다. 주로 로그 출력이나 디버깅 할때 사용합니다. println(player) // Player(id=0, name=Gecko, p..