Get the sample code
- 구글 쿠버네티스 엔진 시작
기본 컴퓨팅 영역을 설정한 후 실습에서 사용할 클러스터 시작
- 샘플 코드 가져오기
GitHub 저장소를 복제한 후 실습에 필요한 디렉터리로 변경하고 작업 중인 항목을 확인
- deployment : 배포 매니페스트
- ngix : nginx 구성 파일
- pods : 포드 매니페스트
- services : 서비스 매니페스트
- tls : TLS 인증서
- cleanup.sh : 정리 스크립트
Quick Kubernetes Demo
- Kubernetes는 kubectl 실행 및 노출 명령을 사용해 즉시 사용하기 쉬운 워크플로우를 지원
- kubectl create 명령을 사용해 nginx 컨테이너의 단일 인스턴스를 시작해 배포 Deployment 생성
- Kubernetes에서 모든 컨테이너는 포드에서 실행되므로 포드에서 실행 중인 nginx 컨테이너 보기
- nginx 컨테이너를 Kubernetes 외부에 노출하기
Kubernetes는 공개 IP 주소가 연결된 외부 로드 밸런서를 생성하고
해당 공용 IP 주소에 도달한 모든 클라이언트는 서비스 뒤의 nginx 포드로 라우팅되게 됨
- 서비스 나열하기
- 외부 IP를 추가하여 ngix 컨테이너를 원격으로 실행하기
Pods
- Kubernetes의 핵심에는 Pod가 존재하며, Pod는 하나 이상의 컨테이너 컬렉션을 나타내고 보유함
일반적으로 서로에 대한 종속성이 강한 여러 컨테이너가 있는 경우 컨테이너를 단일 포드 안에 패키징함 - Pod에는 Volumes도 있으며 볼륨은 포드가 살아있는 동안 지속되는 데이터 디스크이며 해당 포드의 컨테이너에서 사용
포드는 콘텐츠에 대한 공유 네임 스페이스를 제공하므로 포드 내부의 두 컨테이너는 서로 통신하며 연결된 볼륨 공유도 가능 - 예) monolith와 nginx가 포함된 포드
monolith와 nginx가 포함된 포드는 하나의 IP를 가지며,
monolith와 ngix는 공유 네임 스페이스를 가지므로 서로 통신할 수 있고 연결된 볼륨인 GCE, iSCSI, NFS 도 공유 가능
Creating pods
- 포드 구성 파일을 사용해서 포드를 생성하기 위해 모놀리스 포드 구성 파일 살펴보기
monolith 포드 구성 파일을 사용하며 이 파일을 살펴봄
포드는 하나의 컨테이너로 구성되며 컨테이너가 시작될 때 몇 가지 파라미터를 컨테이너에 전달함
또한 http 트래픽을 위해 포트 80을 열음 - 포드 구성 파일을 사용해 모놀리스 포드 생성
- 포드를 검사
기본 네임스페이스에서 실행 중인 모든 포드를 나열함
- 모노리스 포드에 대한 자세한 정보 살펴보기
Pod IP 주소 및 이벤트 로그를 포함해 모놀리스 Pod에 대한 많은 정보를 얻을 수 있음
Interacting with pods
- 기본적으로 포드에는 사설 IP 주소가 할당되며 클러스터 외부에서 연결할 수 없음
- 두 번째 터미널에서 로컬 포트를 모놀리스 포드 내부의 포트에 매핑
두 번째 터미널에서 kubectl port-forward 명령을 실행해 포트 전달을 설정하여 로컬 포트를 모놀리스 포드 내부의 포트에 매핑
- 첫 번째 터미널에서 포드와 대화 시작
첫 번째 터미널에서 curl 명령을 실행해 포드와 대화를 시작
- 보안 엔드포인트에 도달해보기
- 로그인을 시도하여 모놀리스에서 인증 토큰 다시 발급받기 위해 로그인 프롬프트에서 비밀번호 "password"를 사용해 로그인
로그인하면 JWT 토큰이 인쇄됨
- 긴 문자열 복사 처리를 위해 토큰에 대한 환경 변수를 생성하기 위해 호스트 암호에 "password"를 입력하기
- 토큰을 사용해 보안 엔드포인트에 도달하기
- 모놀리스 포드의 로그 살펴보기
- 세 번째 터미널을 열고 실시간으로 발생하는 로그 스트림 가져오기
- 첫 번째 터미널에서 모놀리스와 상호 작용하는 경우, 세 번째 터미널에서 로그가 업데이트 되는 것 살펴보기
- 모놀리스 포드 내에서 대화형 셸 실행하기
컨테이너 내에서 문제를 해결할 때 유용함
예) 모놀리스 컨테이너에 셸이 있으면 ping 명령을 사용해 외부 연결 테스트 가능
- 대화형 셸 로그아웃
Services
- 포드는 영구적이지 않고 활성 상태, 준비 상태 확인 실패같은 여러 가지 이유로 중지되거나 시작될 수 있으며 이로 인해 문제 발생
이로 인해 다시 시작할 때 다른 IP 주소를 가지므로 포드 집합과 통신하려고 할 때 문제가 발생
이때 서비스는 포드에 안정적인 엔드포인트를 제공 - 서비스는 레이블을 사용해 작동하는 포드를 결정하므로 포드에 올바른 레이블이 있으면 자동으로 선택되어 서비스에 노출됨
- 서비스가 포드 세트에 제공하는 액세스 수준은 서비스 유형에 따라 다름
- Cluster IP (내부) : 기본 유형은 이 서비스가 클러스터 내부에서만 볼 수 있음을 의미
- NodePort : 클러스터의 각 노드에 외부에서 액세스할 수 있는 IP를 제공
- LoadBalancer : 서비스에서 서비스 내의 노드로 트래픽을 전달하는 클라우드 공급자의 로드 밸런서 제공
Creating a service
- 서비스 생성 전 https 트래픽을 처리할 수 있는 보안 포드 생성
디렉터리를 변경한 후 모놀리스 서비스 구성 파일을 탐색하고 보안 모놀리스 포드 및 해당 구성 데이터를 작성함
- 보안 모놀리스 포드를 외부에 노출하기
모놀리스 서비스 구성 파일을 탐색한 후 모놀리식 서비스 구성 파일에서 모놀리식 서비스 생성
모놀리스 서비스 구성 파일의 app:monolith와 secure:enabled는 레이블이 있는 모든 포드를 자동으로 찾고 노출되는데 사용
또한 이 파일은 포트 31000에서 ngix(포트 443)로 외부 트래픽을 전달하는 방법이므로 노드 포드를 노출해야 함
- 노출된 노드 포트에서 모놀리스 서비스에 대한 트래픽을 허용
31000 포트에서 TCP 트래픽을 허용하는 방화벽 규칙을 생성
- 포트 전달을 사용하지 않고 클러스터 외부에서 보안 모놀리스 서비스에 접속하기
노드 중 하나에 대한 외부 IP 주소를 가져온 후 모놀리스 서비스를 시도할 수 있으나 시간이 초과되게 되며 이를 뒤에서 해결
Adding labels to pods
- 모놀리스 서비스에 끝점이 없으므로 레이블 쿼리와 함께 kubectl get pods 명령 사용해 위의 문제 해결하기
모놀리스 레이블로 실행 중인 포드를 확인한 후
app:monolith 및 secure=enabled를 사용해 모놀리스 레이블로 실행 중인 포드를 확인하면 결과가 나타나지 않음
그러므로 레이블 쿼리를 사용해 누락된 레이블을 추가한 후 다시 위의 secure=enable을 살펴보아 레이블 업데이트 확인
- 포드에 올바른 레이블이 지정되었으므로 모놀리스 서비스에서 엔드포인트 목록을 확인
- 노드를 하나 선택해 테스트하기
Deploying applications with Kubernetes
- 프로덕션 환경에서 컨테이너를 확장하고 관리하기 위해서는 배포가 필요
- 배포는 실행 중인 포드 수가 사용자가 원하는 포드 수와 동일하도록 선언하는 방법
- 배포의 주요 이점은 포드 관리의 낮은 수준 세부 정보를 추상하하는 것이므로
이후에 배포는 복제본 세트를 사용해 포드 시작 및 중지를 관리할 수 있으며
포드를 업데이트하거나 확장해야 하는 경우에도 배포에서 처리하고
중단된 경우에도 배포에서 포드를 다시 시작하도록 처리
- 예) 포드는 생성된 노드의 수명과 연결되므로 Node3이 다운되면
새 포드를 수동으로 생성하고 노드를 찾는 대신, 배포에서 새 포드를 생성하고 Node2에서 시작
Creating deployments
- 모놀리스 앱을 세 개의 개별 조각으로 나눈 후, 각 서비스에 대해 하나씩 배포를 만들고
auth 및 hello 배포를 위한 내부 서비스와 frontend 배포를 위한 외부 서비스를 정의하며
마이크로 서비스와 상호 작용하도록 하여 각 부분을 독립적으로 확장하고 배포하도록 함
- auth : 인증된 사용자에 대한 JWT 토큰을 생성
- hello : 인증된 사용자를 환영함
- frontend : auth 및 hello 서비스로 트래픽을 라우팅
- auth 배포 구성 파일을 검사하고 시작
auth 배포 구성 파일은 1개의 복제본이 생성되고 인증 컨테이너 버전 2.0.0을 사용하고 있음
auth 배포를 생성하기 위해 kubectl create 명령을 실행하면 배포 매니패스트의 데이터를 준수하는 하나의 포드가 생성됨
즉, 복제본(replicas) 필드에 지정된 수를 변경하여 포드 수를 확장할 수 있음
- auth 배포 개체 생성
- auth 배포를 위한 auth 서비스를 생성해 노출
- hello 배포 생성 후 hello 서비스를 생성해 노출
- frontend 배포 생성 후 frontend 서비스를 생성해 노출
- 외부 IP를 가져와 컬링하여 frontend와 상호작용하기
'Cloud > GCP' 카테고리의 다른 글
[Cloud Skills Boost] Kubernetes Engine에서 Jenkins로 지속적 배포 (0) | 2022.07.08 |
---|---|
[Cloud Skills Boost] Kubernetes Engine으로 배포 관리 (0) | 2022.07.06 |
[Cloud Skills Boost] Kubernetes Engine (0) | 2022.07.02 |
[Cloud Skills Boost] Docker 소개 (0) | 2022.07.01 |
[Cloud Skills Boost] Database Engineer learning path - 목차 (0) | 2022.02.17 |