Kubernetes

xanthorrhizol·2022년 5월 18일
0

k8s

목록 보기
1/1

공통

  • DNS 질의 속도 개선
    • ClusterIP 사옹하는 서비스의 도메인 마지막에 '.'을 붙여서 fully qualified domain name으로 만들면 DNS 질의를 1회만 진행하게 됨
    • ndots가 디폴트로 5인데, 이것도 적당히 줄이면 좋을 듯 한데, 클러스터명이 cluster.local일 때 기준 도메인 길이가 딱 다섯자리라서 아직 손떨려서 안줄임. 제품 말고 내꺼에다 삽 떠야지

Bare-metal 설치 시

  • 도커 엔진 이용 시, log opts 적용 안하면 후회할 것이다(로그 용량 터짐)
  • Resource Quota 최대한 빠짐없이 할당할 것
    • 네임스페이스에 한 번 걸고, 각 리소스 마다 requests, limits 걸기
      • 리소스 중에 하나라도 누락되면 안됨
      • 특히 지금 helm 사용 중인데, 저 내용 누락된 팟이나 잡은 그냥 디플로이가 안됨
      • TODO: kubectl로 일부 quota 누락된 팟을 띄워보고, 동일한 문제가 있으면, helm 문제는 아닌걸로
    • 안했다가 리소스 터지면 그냥 서버가 멈춤
    • 잠시 후 문제가 되는 팟이 죽어서 서버는 살아나긴 함
    • TODO: Resource Quota 대신 리눅스 자체에서 프로세스에 리소스 제한 거는게 있던데, 이걸 도커 데몬에다가 걸어버리면 서버는 안죽지 않을까?
  • Resource Quota 할당 시 주의할 것
    • 팟이 계속 새로 뜰 수 있는 구조인데 싱글노드 시스템이거나, 멀티노드지만 수평 스케일이 안되는 경우라면, 특히 주의해야 함
    • 새 팟이 뜨다가 노드에서 더이상 리소스를 할당할 수 없는 경우, Pending이 먹는데, 이게 반복되면 node의 상태가 NotReady로 바뀜.
    • 문제는 다른 팟들이나 디플로이가 삭제되지 않음
      • 해당 노드를 재실행해야 함
      • 설상가상으로 이게 고객사 서버이면, 루트 권한도 못받기 때문에 번거롭게 요청해야 함
    • 하이퍼스레딩 적용된 노드에 대한 궁금증
      • 1 vCPU 할당된 VM(DB)에서 블락이 많이 걸렸던 현상이 있었음
      • 하이퍼스레딩 켠 머신의 경우, 1 vCPU보단 2 vCPU가 안정적이지 않을지?
      • 그런데, OS 레벨에서 2 vCPU를 할당할 때 물리적 코어 하나를 온전하게 줄지? 모두 다른 코어라고 받아들인다고 하는데?
      • 그래서 서로 다른 물리적 코어의 1vCPU씩 할당하고, 그 두 코어가 다른 작업에 의해 모두 블락을 먹으면?
      • 이라고 생각했는데, 쿠버네티스는 어차피 논리적 코어를 진짜 할당하는게 아닌 cputime을 분배하는 방식이라 괜춘함
      • TODO: NUMA와 k8s 사이에 어떤 영향이 있는지 조사하기
  • 노드 조인할 때, kubeadm init하지 말고 진행할 것
    • kubespray라는 갓툴이 있는데, 고객사 들어가면 못쓰는거 뻔하니까 그냥 kubeadm 마스터가 될 것 ㅋㅋ
  • 노드 조인 후, cni에 네트워크 인터페이스 지정해줄 것
    • calico
      • 데몬셋의 calico-node env에 IP_AUTODECTION_METHOD로 노드끼리 통신 가능한 네트워크 인터페이스 지정해서 추가
      • 예시
        	- name: IP_AUTODETECTION_METHOD
        	  value: "interface=eth0"
    • 다른거
      • 안써봄
  • kubelet에서 node "$(hostname)" not found 에러 발생
    • /etc/resolv.conf 없을 때 발생
    • 있더라도 자기 호스트명 없으면 발생할 듯?
    search <hostname>
    nameserver 127.0.0.53

클라우드 서비스 이용 시

  • ip 계산을 타이트하게 해서 VPC/subnet 설정을 하면 나중에 후회할 것이다(AWS)
    • 특별히 설정하지 않으면, 각 인스턴스가 ip를 꽤 많이 예약해 둠
    • 그 결과 초반에 할당받은 노드는 팟에 할당할 수 있는 ip가 많은 반면, 나중에 할당받은 노드는 해당 서브넷 안에서 더이상 예약할 수 있는 ip가 없어서, 노드 할당이 아예 안되거나, 필요한 ip보다 적은 ip를 예약한 상태가 됨.
    • 이 상황에서 node affinity나 node selector와 콜라보되면 대환장 파티가 벌어짐
    • 혹시 이미 늦었다면, 아래와 같은 방법으로 세팅을 진행하여 노드가 처음에 예약하는 ip를 줄일 수 있음
  • kube-system/aws-node의 MINIMUM_IP_TARGET 조정 → 노드가 생길 때 선점하는 ip 개수 바꿈
$ kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=??
  • kube-system/aws-node의 WARM_IP_TARGET 조정 → 팟이 생성될 때 추가로 가지는 ip 조정
$ kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=??

0개의 댓글