쿠버네티스 일반 41

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 ..

Strimzi Kafka Operator 실습

AS-IS 통화 녹음, 문자 변환 앱 '스위치'를 서비스하는 아틀라스랩스는 현재 카프카를 운영 환경은 AWS MSK 매니지드 서비스를 사용하고 개발은 EC2, 스테이지는 AWS EKS에 사용 중이다. 스테이지 환경이기는 하지만 EKS에 카프카 올려서 사용하고 있는데, Bitnami 헬름 차트로 설치하였다. 다른 애플리케이션처럼 헬름을 사용하면 (당연하게도) 설치는 잘되고 카프카 메시지도 정상적으로 보내지고 받아지니 아무 생각없이 사용하고 있다. 문제는 별 생각없이 설치하고 기본 기능만 잘 동작하면 그냥 사용한다는 거다. DB도 마찬가지이지만 바쁘고 담당자가 없다는 이유로 운영 환경은 그냥 매니지드 서비스 맡기고 스테이지 환경은 돌아가기만 하면 된다는 안일한 생각으로 운영하고 있다. Failover 테스트..

온프렘 아재의 eks 사용기

KANS 졸업 과제로 쿠버네티스 관련 내용 포스팅합니다. 가시다 님 감사합니다. 20년 차 아재로 온프렘, 쿠버네티스, Ansible만 하다가 아틀라스랩스 이직 후 1달 동안 aws, eks, 테라폼에 생존기 및 작업한 내역을 공유합니다. 아재도 적응할 수 있는 스타트업, 아틀라스랩스 회사 좋아요 ^^ 아틀라스랩스 많이 지원해 주세요. DevOps 엔지니어가 저 혼자라 힘듭니다. 저랑 같이 일할 수 있는 분 찾고 있습니다. 아이폰 통화녹음 텍스트 변환 1위 회사 아틀라스랩스. 넷플릭스의 규칙없음이 문화로 지켜지고 있는 회사입니다. https://www.atlaslabs.ai/7ec66638-7041-4d98-a52b-dbb16f841ea3 온프렘 네이티브 k8s와 퍼블릭 eks는 정말 다르다는 걸 많이 ..

Kubernetes Ingress-NGINX on EKS

이직하고 EKS에 ingress-nginx 설정한 내용들 정리합니다. 1. Ingress-nginx on EKS 설정 내용 헬름 파일 이용 설치 LB 타입으로 CLB가 아닌 NLB 사용 AWS 인증서 적용 - 헬름 배포 시 변수 파일로 지정하여 설치 시 자동으로 적용되도록 AWS LB에서 TLS Termination 처리 설정 : NLB가 TLS 처리하고 이 후 백엔드는 Https to Http로 전달 443 port 남기고 default 80 port는 삭제 Default 헬름 차트 변수 파일(values.yaml) 수정 내역 서비스 annotations 수정 annotations: service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp ..

스테이트풀셋 on Kubernetes

가시다(서종호) 님 KANs 중간 과제로 스테이트풀셋을 쿠버네티스에 사용한 사례를 공유합니다. https://gasidaseo.notion.site/c9cd413265ea4ea1b1ae38eb36dfda94 쿠버네티스 네트워킹 스터디 [모집 마감] 모집 종료합니다. 감사합니다. gasidaseo.notion.site Stateless 한 웹/App 서버 등은 쿠버네티스에 많이 사용하는 것 같은데 일부는 아직 Stateful(데이터를 가지는)한 데이터베이스 등은 아직 쿠버네티스를 사용하지 않는 것 같다. 필자는 20년 1월 외부 프로젝트 경험으로 MariaDB 갈레라 클러스터를 쿠버네티스를 성공적으로 마이그레이션하고 이 후 전체 Stateful 애플리케이션을 쿠버네티스에서 잘 사용하고 있다. Redis, ..