11. Practices - Microservices Architecture

2024. 7. 25. 02:38·Kubernetes
이 글은 아래 자료를 참고하여 작성되었습니다.

Udemy [Kubernetes For the Absolute Beginners]

 

1. Application 소개

 

2. Docker로 배포하기

2-1. Container 배포 

docker run -d --name=redis redis
docker run -d --name=db postgres:9.4
docker run -d --name=vote -p 5000:80 voting-app
docker run -d --name=result -p 5001:80 result-app
docker run -d --name=worker worker
  • 옵션 설명
    • --name: 컨테이너에 이름을 지정한다
    • -d: --detach의 약자로, 컨테이너를 백그라운드(detached) 모드에서 실행한다.
    • -p: --publish의 약자로, 호스트 시스템의 포트와 컨테이너의 포트를 연결한다. 포트 매핑 형식은 호스트포트:컨테이너포트이다.
  • 문제점: 위와 같이 배포할 경우, 컨테이너는 배포되지만 동작하지 않는다. 컨테이너가 서로를 참조하지 못하기 때문!

2-2. Link

docker run -d --name=redis redis
docker run -d --name=db postgres:9.4
docker run -d --name=vote -p 5000:80 --link redis:redis voting-app
docker run -d --name=result -p 5001:80 --link db:db result-app
docker run -d --name=worker --link db:db --link redis:redis worker
  • 옵션 설명
    • --link: 특정 컨테이너가 다른 컨테이너에 접근할 수 있게 하는 네트워크 연결을 설정한다. 
      • 형식: --link <container-name-or-id>:<alias>
        • <container-name-or-id>: 연결하고자 하는 대상 컨테이너의 이름 또는 ID
        • <alias>: 현재 컨테이너에 사용할 별칭. (연결된 컨테이너를 식별하는 데 사용된다)
      • 동작
        • 링크된 컨테이너의 연결 정보(IP 주소 및 포트)가 환경 변수로 설정된다.
        • /etc/hosts 파일에 링크된 컨테이너의 호스트 이름이 추가된다.
          • /etc/hosts의 역할
            1. 호스트 이름 해석: /etc/hosts 파일은 로컬 컴퓨터에서 특정 호스트 이름을 해당 IP 주소로 매핑하는 데 사용된다. 시스템이 네트워크 상의 호스트 이름을 IP 주소로 변환할 때, 먼저 /etc/hosts 파일을 참조하고, 파일에서 호스트 이름과 IP 주소가 매핑되어 있으면, DNS 서버에 질의하지 않고도 해당 IP 주소로 접근할 수 있다.
            2. DNS 대체: 작은 네트워크나 특정 테스트 환경에서는 DNS 서버를 사용하지 않고도 /etc/hosts 파일을 통해 네트워크 자원을 쉽게 관리할 수 있다.
      • 한계점
        • 컨테이너 간의 고정된 네트워크 연결을 설정한다. 만약 연결된 컨테이너가 중지되거나 삭제되면 링크가 끊어질 수 있다.
        • --link는 deprecated. 대신 Docker Network나 Docker Compose / Docker Swarm 사용을 권장

 

3. Kubernetes로 배포하기

  1. Deploy Pods
  2. Create Services - ClusterIP: 클러스터 내에서만 접근 필요
    • redis (port: 6379)
    • db (port: 5432)
  3. Create Services - NodePort: 외부에서 접근 필요
    • voting-app (port: 80)
    • result-app (port: 80)

note) workers pod의 경우, 해당 pod으로의 접근이 존재하지 않으므로 service가  필요하지 않다. 

YAML 코드: https://github.com/kodekloudhub/example-voting-app-kubernetes

 

'Kubernetes' 카테고리의 다른 글

13. Core Concepts - Namespace  (2) 2024.09.11
12. Tips - create YAML  (0) 2024.09.11
10. Core Concepts - Services  (1) 2024.07.18
9. Kubernetes Overview - Networking  (1) 2024.07.08
8. Core Concepts - Deployment  (0) 2024.07.04
'Kubernetes' 카테고리의 다른 글
  • 13. Core Concepts - Namespace
  • 12. Tips - create YAML
  • 10. Core Concepts - Services
  • 9. Kubernetes Overview - Networking
SerenaDev
SerenaDev
나의 기술블로그 입니다.
  • SerenaDev
    나의 기술블로그
    SerenaDev
    • 분류 전체보기 (33)
      • FastAPI (1)
      • Iceberg (6)
      • Kubernetes (24)
      • ETC (1)
      • 독서 (1)
  • hELLO· Designed By정상우.v4.10.0
SerenaDev
11. Practices - Microservices Architecture
상단으로

티스토리툴바