쿠버네티스 일반 35

EKS External DNS - Terraform IRSA + Helm

TL; DR; . IRSA(by 테라폼) + 헬름으로 External DNS 설치 경험을 공유합니다. . eksctl도 가능하지만 테라폼을 이용하여 IRSA를 설치하면 코드(IaC)로 남아서 좀 더 관리가 용이합니다. 1. External DNS IRSA 테라폼으로 EKS 관련 모듈(ebs-csi-controller, aws load balancer controller)을 IRSA + 헬름까지 설치할 수 있습니다. 하지만 테라폼으로 헬름까지 설치하는 것은 테라폼 State가 맞지 않는 경우 디버깅을 해야 하는 위험 + 번거로움이 있어 개인적으로는 테라폼은 IRSA까지만 설치하는 것을 선호합니다. AWS 관련 리소스(IAM, VPC 등)는 테라폼으로 쿠버네티스 애플리케이션은 헬름 + ArgoCD로 설치, ..

gRPC in EKS ALB + aws lb controller

TL; DR; . grpc는 nlb + ingress-nginx-controller 설정으로 에러가 발생하여 alb + aws load balancer controller로 해결하였다. . ingress로 설정한 alb는 특이하게 path를 '/'가 아닌 '/*'로 지정해야 한다. 작업 내역 기존 REST 방식이 아닌 gprc는 nlb + ingress-nginx-controller로 설정하면 에러가 발생하였다. ### SERVER SIDE ingress-nginx-controller-6997b74f67-fgbb7 controller 10.0.197.170 - - [15/Jun/2023:05:11:33 +0000] "PRI * HTTP/2.0" 400 150 "-" "-" 0 0.003 [] [] - -..

쿠버스택 창업?

최근에 미팅을 하고 가시다 스터디를 참가하다 보니 어렴풋이 가졌던 쿠버네티스를 가지고 회사를 만들어도 되지 않을까 하는 생각이 다시 든다. 쿠버네티스가 대세이고 사용하면 좋다는 것은 알겠는데 진입 장벽이 있어서 사용하기 어렵다고 말하는 사람들이 많다. 대기업, 스타트업, SI 업체 등. 어제 오늘 이야기도 아니고 한 3,4년 전부터 쭈욱. 그래서 OSC 코리아 이런데서 기존 SI랑 차별화해서 쿠버네티스에 특화된 SI, 컨설팅도 하고 OpenMSA 이런 것도 만드는 것 같고. (머 비슷한 사업 계획이 많이 있겠지.) 나도 비슷한 개념이다. 쿠버스택이라고(feat 오픈스택) 쿠버네티스를 실제 업무에 사용할 수준이 되도록 쿠버네티스 설치 + CI/CD + 모니터링/로깅/알람 + 네트워크(LB, Ingress)..

GitOps 기반 시스템 운영

오늘은 회사에 새로운 (대단한) DevOps가 조인하고 생긴 여러가지 변화 중 하나를 소개한다. 나는 2003년 처음 시스템 엔지니어(솔라리스)로 업무를 할 때는 까만 콘솔에 명령어를 치면서 작업했다. 여러 Unix 명령어를 외우는게 중요했다. 사실 명령어도 쳤지만 네트워크 케이블 찝고 바닥 뜯고 8U(SUN 880, 무게가 무려 88Kg, 둘이서 마운트하면 허리 나간다.) 서버 마운트하고 랙 뒷면 케이블 이쁘게 정리하는게 주요한 업무였다. 당연히 코드를 짤일이 없었다. 시스템 운영자는 개발자와 업무가 달랐다. 난 경력 초반 3년 엔지니어 생활을 하고 이후 여러가지 이유로 제안서를 만들고 고객 미팅을 주로하는 시스템 아키텍트, 세일즈 엔지니어 등의 업무를 15년 넘게 하였다. 굳이 정리하자면 기존의 시스..

EKS 무중단 업그레이드 경험 공유

먼저, 그동안 블로그를 소홀히했는데 다시 정신차리기로 했다. IT 엔지니어는 늘 빚지고 살고 있으니 글 쓰면서 조금이라도 빚 갚고 살아야 생각하는데 안하고 있었다. 다시 정신차리자. (하루 방문수 100은 되는것 같은데 미안한 마음이 크다) 최근에 회사에서 운영 중인 EKS를 업그레이드 했다. 아틀라스랩스는 총 10개 클러스터를 운영 중인데 작업은 1.23 to 1.24 (하나는 1.22 to 1.23) 업그레이드를 했다. 이전에는 업그레이드 작업하면 서비스 끊고 새벽 00:00 ~ 06:00 6시간 작업을 했다. 쿠베가 4개월에 한번씩 업그레이드하는데 4개월마다 서비스를 중단하는게 말이 안되고 그걸 또 밤 새면서 하는건 사람이 할 짓이 아니기에 어떻게 하던지 대책을 마련해야했다. (그래서 기존에는 4개..

파이썬으로 여러 쿠버네티스의 클러스터 정보 가져오기

10개 클러스터를 운영하니 각각의 클러스터 버전을 체크하는 것도 일이다. 버전 정보야 간단히 shell로 가능한데 이번에는 파이썬 코드를 짜 보았다. 나는 시스템 운영자 출신이라 코딩은 손놓고 20년 살았다. 최근에 오래된 로그를 삭제하는 파이썬 코드를 고마운 팀분의 도움으로 작성했다. 안 잃어버릴 겸 해서 이번에도 익숙한 스크립트 대신 파이썬으로 만들었다. 아마도 허접한 코드일 것 같은데, 누군가에게는 도움이 될까 창피함을 무릅쓰고 공개한다. # Need an aws_profile to access EKS # Need kubectl, kubectl ctx tool import os import json # Print each EKS version & total number of nodes def pri..

AWS NLB EKS 환경에서 사용자 IP 파드로 전달

사용자의 IP를 파드까지 정상적으로 전달하도록 작업한 내역을 공유한다. TL;DR AWS NLB는 L4 기반이라 L7 Application LB의 x-forwarded-for 설정없이 client-ip 전달이 가능 하지만 쿠버네티스의 Proxy 구조 상 외부 LB에서 받은 트래픽이 전체 클러스터의 노드를 거쳐서 파드로 전달되기 때문에 파드에는 client ip가 아닌 노드 IP가 기록됨 externalTrafficPolicy을 Local로 변경하면 노드 IP가 아닌 client ip 전달 가능. 하지만 설정을 변경하면 전체 클러스터의 노드가 아닌 ingress controller가 설치된 노드에서만 트래픽을 전달하여 ingress controller가 설치된 노드(통상 이중화를 위한 2개의 노드)만 트래..

Tailscale VPN for 쿠버네티스 & VPC

최근에 EKS, AWS VPC 환경에서 Tailscale VPN을 잘 사용하고 있어 내용을 공유한다. TL;DR Tailscale VPN을 1) EKS 환경에서 LoadBalancer, Ingress 등을 추가 설정하지 않고 ClusterIP 타입 그대로 VPN을 사용하는 사용자에게 외부 노출 2) EC2 사용하는 VPC의 전체 네트워크를 Tailscale VPN으로 연결 EC2 VM이 아닌 쿠버네티스 파드로 실행할 수 있어 EC2 VM 비용을 절감할 수 있다. 추가로 Deployment로 실행하면 파드 다운 시 자동 실행되니 관리 포인트도 줄어든다. ClusterIP는 YAML 파일에서 ClusterIP를 고정할 수 있어, 서비스를 재시작해도 IP가 변경되지 않는다. 쿠버네티스 DNS 이름을 그대로 사..

EKS CSI Driver 설치

EKS를 설치하고 나면 기본적으로 해야할 일이 있다. 기본 gp2 StorageClass를 사용하지 않고 gp3 기반의 ebs-sc 스토리지 클래스 사용하고 prometheus, grafana, loki, ingress 등 여러 필수 요소들도 설치해야 한다. 오늘은 그 중 ebs-sc csi driver 설치 및 사용법을 정리하였다. TL; DR 코드 및 스크립트를 이용하여 eks ebs-sc 스토리지 클래스 설치 가능하다. 코드 기반이라 반복 사용이 가능하며 작업 시간도 10분 내외만 소요된다. AWS의 많은 것들이 그렇듯이 eks csi-driver 설치 작업도 aws 공식 문서를 보고 따라하면 대부분 가능하다. (그래서 굳이 이렇게 블로그를 쓰는 이유도 없기는 하다. 하지만 나의 편집본이 작은 도움..

Strimzi Kafka Operator - Kafka 토픽 생성

지난 포스팅에 이어 이번에는 카프카 토픽을 만들어 보는 실습을 진행하였다. 실습 내역 쿠버네티스 Strimzi CRD를 이용하여 카프카 토픽 생성 및 조회 그럼, 카프카 토픽을 YAML 파일로 만들어본다. 지난 시간에 말한 Operator가 편리한게 카프카 토픽 같은 쿠버네티스 리소스가 아닌 것도 Custom으로 YAML 파일로 만들 수 있는 것이다. 쿠버네티스에 친숙한 YAML 파일 형식이라 거부감이 없고 명령어가 아닌 소스 코드 기반으로 재 사용성이 훨씬 낫다. ## visualcode 등으로 아래 내용을 kafakatopic-crd.yaml 파일에 저장한다. apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: mytopic1 ..