CKA 공부 4일차

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 서비스를 만들어서 서비스를 제공한다.




© 2022. by minkuk

Powered by minkuk