Kubernetes 53

GitOps 기반 시스템 운영

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

원격 EKS 접속 환경 설정

원격 EKS 클러스터에 접속 가능하도록 로컬에 kubectl 환경을 세팅하는 방법을 공유한다. TL;DR . eks 접속 용 aws credential 정보 등록 . aws 계정에 따라 접속 가능한 eks가 다르다. . kubectl config 파일(~/.kube/config) eks 정보 등록 . 필요한 경우 원격 eks의 configmap/aws-auth에 aws 계정 정보를 등록한다. 간략하게 그림으로 정리하면 아래와 같다. AWS Credential 정보 등록 eks에 접속하기 위해서는 로컬에 aws 계정 정보가 필요하다. 로컬에 awscli를 설치하여 해당 정보를 등록한다. awscli 설치 최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface 이전..

EKS OJT 교육 실습 목차

고맙게도 팀에 새로운 DevOps가 조인했다. 그 친구에게 업무 공유도 할 겸 DevOps로 해야 할 일을 실습으로 정리해 보았다. 아래 실습을 하면 우리 업무를 마스터 할 듯. 그리고 아마도 어느 정도는 우리 같은 40명 언더의 스타트업이고 DevOps 1~2명 조직에서도 비슷한 일을 할 것 같다. 그분들에게 도움이 될까 봐 공유한다. 기회가 된다면 이번에는 아래 목차로 동영상을 찍어볼까 한다. 온프레미스로 책을 썼으니 이번에는 EKS로 동영상을 만들어보면 어떨까 싶다. 머 책처럼 1년 걸리는 노가다이겠지만. 아니다 2번째니 6개월이면 되지 않을까? 기본적으로 모든 업무는 자동화할 수 있도록 코드화(IaC) 한다. 작업 속도를 높일 수 있도록 GUI 작업은 지양하고 스크립트화 한다. GUI는 확인 용도..

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

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

Strimzi Kafka Operator 실습

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

이직 4주 차 회고

아틀라스랩스 이직한 지 4주차, 2022년은 시작한지 9주 차. 이직을 해서 참으로 정신없는 매일매일 한주한주가 지나가고 있다. 신입도 아닌 경력이라 빠르게 업무에 적응해야 한다는 부담감이 있다. 물론 부담감이 결과로 이어지지 않기에 나만의 페이스로 적응하려한다. 다행히 팀 분위기도 그런 걸 이해하지 못하는 건 아니다. 당연히 쫀다고 성과가 나는 건 아니다. 긴장은 하지만 여유도 잃지 않으려 한다. 결국 회사에 가장 성과가 나는 방향으로 내가 가장 일을 잘하고 많이 배울 수 있도록. 기술적인 부분으로 이번 주에 새롭게 적용하게 꽤 된다. 많이 부족하지만 어찌하였든 오레곤 리전에 새로운 EKS 클러스터를 구축하였다. A10 GPU를 사용하는 g5.2xlarge 인스턴스가 오레곤만 지원하기에 해당 리전을 사..

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

쿠버네티스 칼리코 네트워크

오늘은 쿠버네티스 칼리코(calico) CNI에 관하여 정리한다. 가시다님 네트워크 스터디 3주차 예습 내용이다. 1) 같은 노드 내 파드 - 파드 통신 2) 파드와 외부 인터넷 통신 3) 다른 노드의 파드와 파드 통신 내용 실습한 걸 정리하였다. 가시다님, 3주차 스터디 실습 환경은 아래와 같다. 3대의 컨트롤 플레인 + 워커 노드 + 1대의 워커 노드. 쿠버 버전 1.22.4, CRI containerd. [spkr@erdia22 ~ (ubun81:default)]$ kgn # k get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ubun20-81 R..

sniff - kubectl 환경 패킷 캡쳐 유틸리디

가시다님 스터디에서 ‘stewart’ 님이 공유해 주신 파드 패깃덤프 플러그인 sniff 사용 예제를 공유한다. sniff 사용하면 파드에 접속해서 tcpdump 명령어 실행하지 않아도 로컬PC에서 kubectl 명령어로 원격 파드의 패킷 덤프를 바로 실행할 수 있다. 패킷덤프는 그동안 귀찮아서 네트워크 엔지니어에게 미루었는데 내가 해보게 되고 여러모로 도움이 되는 스터디다. sniff 참고 https://github.com/eldadru/ksniff GitHub - eldadru/ksniff: Kubectl plugin to ease sniffing on kubernetes pods using tcpdump and wireshark Kubectl plugin to ease sniffing on kube..