이 글은 아래 자료를 참고하여 작성되었습니다.
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의 역할
- 호스트 이름 해석: /etc/hosts 파일은 로컬 컴퓨터에서 특정 호스트 이름을 해당 IP 주소로 매핑하는 데 사용된다. 시스템이 네트워크 상의 호스트 이름을 IP 주소로 변환할 때, 먼저 /etc/hosts 파일을 참조하고, 파일에서 호스트 이름과 IP 주소가 매핑되어 있으면, DNS 서버에 질의하지 않고도 해당 IP 주소로 접근할 수 있다.
- DNS 대체: 작은 네트워크나 특정 테스트 환경에서는 DNS 서버를 사용하지 않고도 /etc/hosts 파일을 통해 네트워크 자원을 쉽게 관리할 수 있다.
- /etc/hosts의 역할
- 한계점
- 컨테이너 간의 고정된 네트워크 연결을 설정한다. 만약 연결된 컨테이너가 중지되거나 삭제되면 링크가 끊어질 수 있다.
- --link는 deprecated. 대신 Docker Network나 Docker Compose / Docker Swarm 사용을 권장
- 형식:
3. Kubernetes로 배포하기
- Deploy Pods
- Create Services - ClusterIP: 클러스터 내에서만 접근 필요
- redis (port: 6379)
- db (port: 5432)
- 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 |