ㅎㅈㅈㅇ
로그인
ㅎㅈㅈㅇ
로그인
[k8s] 6. 데몬셋, 잡 그리고 서비스
ㅎㅈㅈㅇ
·
2021년 6월 27일
팔로우
1
k8s
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이므로 포트와 결합된 경우에만 의미가 있기 때문이다
ㅎㅈㅈㅇ
팔로우
이전 포스트
[k8s] 5. Replication Controller
0개의 댓글
댓글 작성