-
[HomeLab] K8S 노드에 Label 추가하기DevOps, 클라우드/Container 2024. 7. 21. 03:22
파드가 죽어요
현재 가지고 있는 쿠버네티스 클러스터에는 4개의 워커 노드가 있다.
3대의 arm64 노드와 1대의 x86 노드를 사용하고 있다.
이전에 Envoy를 테스트하면서 v1.11 이미지를 사용했다.
현재는 1.31 버전이 최신 버전임을 확인할 수 있다.
여기서 생겼던 문제가 4대의 노드 중 arm64 노드에 파드가 생성되면 아키텍처 차이로 파드가 계속 죽는다.
exec format error
컨테이너 이미지
최근에야 멀티 아키텍처를 지원하는 컨테이너 이미지가 많아지면서 큰 문제는 안보이지만 지금 테스트 하는 이미지는 그렇지 않았다.
아래에서 Jaeger로 예시를 들지만 요렇게 버전에 따른 차이를 볼 수 있다.
Envoy 같은 경우도 확인해보면 v1.11는 amd64만 지원한다.
v1.16 부터 arm64도 함께 지원하면서 해당 이미지를 사용했다.
엥? 그러면 그냥 최신 이미지 사용하면 거의 문제 없는거 아냐?
라고 생각했었는데 이번에 Envoy 하면서 조금 바뀌었다.
정확한 차이는 모르지만 Prometheus도 v1과 v2의 config 설정이 다르다고 들었고, Envoy도 버전이 올라가면서 http filter가 v2가 아닌 v3를 사용하게 하는 경우가 생긴다.
이런식으로 내가 테스트하려는 버전과 최신 버전이 항상 동일한 기능을 제공한다고 볼 수가 없었다.
하위호환을 지원하는 경우라면 좋겠지만 그냥 바로 deprecate 시켜버렸다면...
노드에 Label 추가
그래서 사실 큰 작업을 한 것은 아니고 앞으로 배포할 파드에 nodeSelector를 좀 더 잘 명시해보기로 했다.
이를 위해서 다음과 같이 전체 노드에 대해서 label을 추가했다.
k label nodes arm64-****** arch=arm64 gpu=false k label nodes x8664-****** arch=x8664 gpu=false # ...
전체 노드를 컨벤션에 맞춰서 {architecture}-{resources}-{unique-string} 요렇게 관리하고 있었다.
그래서 노드 식별 자체는 쉬웠고, 파드가 앞으로 노드를 잘 선택해서 배포되면 편하겠다 싶었다.
Envoy로 예시를 들었지만, Jaeger나 Kiali도 마찬가지였다.
그래서 요렇게 앞으로 nodeSelector를 잘 이용해보고자 한다.
spec: nodeSelector: arch: "x8664" # ...
k get pods -n istio-system # ... jaeger-68f8fb4676-n9qgt 1/1 Running 0 156m kiali-7b54d865d-7vqwr 1/1 Running 0 156m
'DevOps, 클라우드 > Container' 카테고리의 다른 글
[CNI] 처음 열어보는 CNI 스펙 (0) 2024.10.11 [HomeLab] Tailscale 을 쿠버네티스에 배포하기 (0) 2024.07.05 [HomeLab] Calico와 Tailscale 충돌 문제 (0) 2024.06.22 라즈베리파이를 이용한 멀티 노드 클러스터링 (4) - Spring Boot (0) 2022.04.06 라즈베리파이를 이용한 멀티 노드 클러스터링 (3) - MySQL (0) 2022.04.05