CKA 공부 4일차
in Devops on Kubernetes
4일차
네이버 다닐 때 생긴 과민성 대장 증후군 때문에 컨디션이 너무 안좋다.
그래도 공부는 멈출 수 없지. 고고!
Deployment
디플로이먼트 > 레플리카셋 > 파드
디플로이먼트는 롤링업데이트, 롤백, 중지, 재개 등등 여러 파드를 제어하는 컨트롤러이다.
Namespaces
Namespaces에 대해 알아보자.
최초 클러스터 생성하면 Namespaces는 기본은 default
k8s의 서비스,파드 등과 같은 각종 k8s 오브젝트들은 네임스페이스에 소속된다.
이 네임스페이스는 결과적으로 k8s 클러스터 내부에서 오브젝트들을 구분하는 논리적 단위이다.
가령 Dev, Prod와 같이 운영환경을 네임스페이스로 구분하는 것도 가능하다.
이러한 네임스페이스의 구분은 각각의 네임스페이스가 자신만의 독자적인 규칙을 갖게 만든다.
특정 네임스페이스의 메모리 및 CPU 쿼터를 주는 것도 가능하다. 예시는 아래에.
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: '1'
requests.memory: 1Gi
limits.cpu: '2'
limits.memory: 2Gi
- 코드상에서 dev라는 이름의 서비스에 연결하려면 다음과 같이 할 수 있다.
mysql.connect('db-service.dev.svc.cluster.local');
- 이렇게 하면 k8s DNS 서버에 등록된 dev 네임스페이스의 db-service를 찾아준다.
db-service.dev.svc.cluster.local의 의미
db-service : 서비스 이름
dev : 네임스페이스
svc : 서비스
cluster.local : 도메인
Services
서비스는 로드밸런서 역할도 담당한다.
서비스는 가상의 오브젝트이며(파드처럼 컨테이너로 동작하지않으며 프로세서로 동작), 서비스의 고유 IP 주소를 갖는다.
파드의 불안정한 IP와 다르게 파드에 연결된 서비스는 항상 서비스에 연결된 파드로 트래픽을 전달해준다.
서비스는 마이크로서비스간에 느스한 연결을 가능하게 한다.
서비스의 타입에는 총 3가지가 존재한다.
- NodePort : 노드의 포트로 내부 파드에 접근할 수 있게 해준다.
- 30000 ~ 32767 포트까지 외부에서 접근할 수 있는 포트를 사용할 수 있음.
- 이 포트로 들어온 요청을 타겟 포트에 전달한다.
- targetPort는 내가 전달할 포트이며, port는 서비스에 셋팅된 port이다.
- label과 selector를 이용해 특정 파드에 요청을 전달해줄 수 있다.
- ClusterIP : 서비스는 클러스터 내부에 VIP를 생성하고 다른 서비스와 통신할 수 있게 해준다.
- 가령 여러 클라이언트가 여러 백엔드에 접근할 때 하나의 VIP를 보고 접근한 후 해당 서비스에서 부하분산을 해줄 수 있을 것이다.
- 마찬가지로 여러 서버가 Redis 저장소에 연결하려고 할 때 ClusterIP 타입의 서비스의 VIP를 보고 요청을 주면 해당 서비스가 부하분산을 해서 레디스에 전달할 것이다.
- LoadBalancer : 클라우드 제공자를 위한 로드밸런서를 프로비저닝한다.
- 로드밸런서는 타입의 서비스는 특정 포트로 들어오는 IP들의 요청을 모두 받아주고 부하분산을 해주는 서비스이다.
- 이를 위해 GCP, AWS, Azure같은 클라우드 서비스들은 자신들만의 독자적인 LoadBalancer 서비스를 만들어서 서비스를 제공한다.
- NodePort : 노드의 포트로 내부 파드에 접근할 수 있게 해준다.