[k8s] 6. 데몬셋, 잡 그리고 서비스

ㅎㅈㅈㅇ·2021년 6월 27일
1

Kubernetes

목록 보기
6/6

데몬셋: apps/v1

모든 노드에 파드 실행하기

  • 노드를 지정하지 않으면 모든 노드에 파드를 배포함

특정 노드에 파드 실행하기

  • 데몬셋은 지정한 노드 수 만큼 노드를 생성함
  • node-Selector 속성으로 노드를 지정함
  • 노드 추가 시 조건에(라벨) 맞는 경우 파드를 배포함

데몬셋의 활용 예시

  • 모든 노드에서 클러스터 스토리지 데몬 실행
  • 모든 노드에서 로그 수집 데몬 실행
  • 모든 노드에서 노드 모니터링 데몬 실행

잡: batch/v1

특징

  • 완료 가능한 단일 Task를 수행하는 파드 실행
  • 잡에서 관리하는 파드는 성공적으로 끝날 때까지 다시 스케줄링 된다
  • restartPolicy를 OnFailure나 Never로 명시해야 한다

실행

  • 실행 중인 pod을 삭제한 결과 자동으로 재실행됨

여러 파드 인스턴스 실행하기

  • 병렬 또는 순차 실행 가능(completions, parallelism 설정)
  • 잡 실행 중에 스케일링도 가능하다

완료 제한 시간 설정

  • 제한 시간을 넘어서는 경우 파드를 종료하고, 실패한 것으로 표시한다

크론잡 생성하기

  • 리눅스의 크론 형식을 따른다
  • strartingDeadlineSeconds 설정으로 시작 시간이 예정 시간에서 일정 시간 이상 초과하지 않도록 할 수 있다

서비스

서비스의 의의

  • 클라이언트가 파드를 검색하고 통신을 가능하게 함
  • 동일한 서비스를 제공하는 파드 그룹에 지속적인 단일 접점을 만들어줌

서비스는 어떻게 파드 그룹과 연결되는가?

  • rc에서 레이블 셀렉터를 사용해 파드 세트를 지정하는 매커니즘과 같다

서비스의 생성

  • kubectl expose 를 사용하여 rc를 노출하는 방법을 통해서 서비스 생성 가능
  • service YAML 파일을 만들고 수동으로 노출
  • kubectl get svc를 통해 서비스에 할당된 클러스터 IP주소를 알 수 있다
    • 클러스터 IP: 클러스터 내부에서만 액세스 가능한 주소
  • 더블 대시는 kubectl 명령줄 옵션의 끝을 의미한다, 더블 대시 뒤의 모든 것은 파드 내에서의 명령
  • 모든 요청을 매번 같은 파드로 리디렉션하려면 세션 어피니티 값을 None 대신 Client IP로 설정한다
  • 동일한 서비스의 여러 포트 노출
    • 각 포트의 이름을 지정해야 한다
  • 이름이 지정된 포트 사용
    • 파드 정의에 포트 이름을 사용
    • 서비스 스펙에서 해당 이름을 참조
    • 이 경우 서비스 스펙에서 자유롭게 파드의 포트를 변경할 수 있다는 장점이 있다

서비스의 IP와 포트를 검색할 수 있는 방법

  • 환경변수를 통한 서비스 검색
    • {{서비스 이름}}_SERVICE_PORT
    • {{서비스 이름}}_SERVICE_HOST
    • 서비스 이름의 -는 자동으로 _로 변환된다, 또한 모든 문자는 대문자로 표시된다
  • DNS를 통한 서비스 검색
    • kube-system 네임스페이스의 kube-dns 파드는 DNS 서버를 실행하며, 클러스터에서 실행 중인 모든 파드는 이를 사용하도록 구성됨
    • 각 서비스는 내부 DNS 서버에서 DNS 항목을 가져오고, 서비스 이름을 알고 있는 클라이언트 파드는 FQDN으로 액세스할 수 있다
  • FQDN을 통한 서비스 연결
    • {{서비스 이름}}.{{네임스페이스 이름}}.svc.cluster.local
    • 이 경우에도 포트 번호는 알아야 한다
    • 동일한 네임스페이스에 있는 경우 단순히 서비스 이름만을 이용하여 연결할 수 있다
  • 파드 컨테이너 내에서 셸 실행
    • 컨테이너 /etc/resolv.conf 파일을 보명 DNS resolver 설정을 볼 수 있다
  • 서비스 IP에 핑을 할 수 없는 이유
    • 서비스로 curl은 동작하지만 핑은 응답이 없다
    • 서비스의 클러스터 IP가 가상 IP이므로 포트와 결합된 경우에만 의미가 있기 때문이다

0개의 댓글