kubernetes 90

쿠버네티스 관리자가 혼자 쿠버네티스 업그레이드 할 수 있을까?

24.10 3주차에 EKS를 업그레이드를 하고 느낀 것들을 이 글에 적습니다. 쿠버네티스 소개제 팀이 관리하는 쿠버네티스는 1개가 넘는데 이 글에서 언급하는 쿠버네티스는 여러 팀이 같이 사용하는 쿠버네티스 입니다.  선택한 업그레이드 전략올해 저는 1개 클러스터를 in-place로 업그레이드 한 적이 있습니다. 그리고 몇 개 클러스터는 blue/green방식으로 진행했습니다. 이 글에서 언급하는 쿠버네티스는 blue/green을 선택했습니다. 처음에는 in-place를 선택했지만 "롤백" 우선순위가 높다는 것을 생각하여 blue/green으로 선택했습니다. 그리고 실제로 쿠버네티스 업그레이드 후 롤백했습니다. 쿠버네티스 업그레이드는 잘 되었다. 하지만,쿠버네티스 업그레이드는 잘 되었지만 롤백을 했습니..

회고모음 2024.10.27

쿠버네티스 버전을 업그레이드 할 때 어떤 전략을 선택해야할까? (in-place, 복제)

쿠버네티스 운영의 가장 큰 부담스러운 점은 클러스터 버전 업그레이드 입니다. 클러스터 버전을 업그레이드 했을 때 서비스 장애가 발생할 확률이 있기 때문입니다. 쿠버네티스 업그레이드 전략쿠버네티스 버전 업그레이드는 크게 In-place와 클러스터 복제가 있습니다.  in-place는 서버 한개한개 차례대로 쿠버네티스 버전을 업그레이드 하는 방법입니다. control plane을 먼저 업그레이드 하고 worker node버전을 업그레이드 합니다. 클러스터 복제는 버전이 업그레이드 된 쿠버네티스 클러스터와 쿠버네티스 리소스를 복제한 후, 트래픽을 전환하는 방식입니다. 트래픽을 신규 클러스터에 한번에 전환하면 blue/green, 조금씩 전환하면 canary라고 부릅니다. 어떤 전략을 사용해야할까?개인적으로 ..

쿠버네티스 cpu limit을 설정해야할까? 안해야할까?

가시다님 스터디에서 컨테이너 원리를 다루는 기회가 생겨, kubernetes resources.requet.cpu와 limit.cpu를 공부했습니다.  request.cpu는 cgroup weight(v1에서는 cpu share)로 변경되어, 컨테이너가 cpu시간을 상대적으로 사용한다는 것으로 이해했습니다. 그리고 limit.cpu는 컨테이너의 cpu시간을 제한한는 설정입니다. 공부를 마치고 문득 궁금한점이 생겼습니다. "request.cpu가 cpu시간을 가중치로 사용하면 limit은 설정안해도 될까?" 고민을 많이하고 제 나름대로 결론을 냈습니다. limit을 설정하는 이유는 운영 안전성을 높이기 위해서라고 결론을 냈습니다. 그리고 이권수님과 팟캐스트에 이 주제로 이야기해보니 모니터링 대시보드에서 일..

Pause container는 어떻게 실행될까?

평소에 pause container는 어떻게 궁금했었는데, LuLu님 블로그에 pause container실행 과정을 분석해주셨습니다. kubelet, conatinerd 코드를 분석하면서 과정 하나하나 설명되어 있습니다.- 블로그 링크: https://mateon.tistory.com/127 1. pause contianer가 network namespace를 생성할까?위 블로그 내용을 읽고 공부를 해보니 제가 잘못 알고 있었던 내용이 있었습니다. pause container가 network namespace를 생성하고 유지하는줄 알았는데, CRI가 network namespace를 생성하고 pause container가 network namespace를 유지하는 것이었습니다. CRI가 contain..

컨테이너 원리 - pivot_root(chroot 취약점을 해결)

이 글을 읽기 위해 chroot를 알고 있어야 합니다. chroot는 저의 이전 글에 정리했습니다.블로그 링크: https://malwareanalysis.tistory.com/763 1. chroot 취약점chroot는 디렉터리를 탐색할 수 있는 취약점이 있습니다.  아래 예제는 chroot로 nginx컨테이너를 생성한 프로세스입니다. nginx 컨테이너가 디렉터리 탐색을 사용해서 최상위 경로로 루트 디렉터리를 변경했습니다. nginx 컨테이너의 루트 디렉터리가 호스트 루트 디렉터리로 변경되었기 때문에, 호스트에 있는 정보를 탈취할 수 있습니다. 아래 예는 /etc/passwd파일을 탈취했습니다. 실습환경이 vagrant이기 때문에 vagrant user가 보입니다. 아래 코드는 파이썬 탈옥코드입니다...

Istio ServiceEntry설정할 때 IP만 사용하려면?

istio serviceentry는 service mesh에 없는 host를 등록하는 기능입니다. 보통 도메인을 설정하는데 도메인이 없는 IP를 serviceentry를 등록할 때가 있습니다. IP만 등록할 때는 protocol를 TCP 또는 UDP로 설정해야 합니다. 아래 예제처럼 HTTP로 설정하면 serviceentry가 동작하지 않습니다.apiVersion: networking.istio.io/v1beta1kind: ServiceEntrymetadata: name: test-serviceentryspec: addresses: - 192.168.0.3 hosts: - 192.168.0.3 location: MESH_EXTERNAL ports: - name: test ..