Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
Google Kubernetes Engine은 Kubernetes를 만든 구글에서 제공하기 때문에 다른 클라우드의 kubernetes보다 최신 기능을 제공한다.
명령어 한 줄만으로 배포할 수 있기 때문에 EKS보다 세팅하기도 편리하다.
GKE는 Control node는 완전 관리형으로 제공하기 때문에, 사용자들을 Control node의 가용성을 신경 쓰지 않고 노드만 관리하면 된다.
최근에는 노드마저 정말 관리해 주는 서비스인 AutoPliot도 제공한다.
이 서비스는 파드에 따라서 노드의 개수를 자동으로 scaling 해주고, 노드에서 동작하는 파드 단위로 비용이 청구되기 때문에, 적은 파드를 사용한다면 굉장히 비용 효율적인 서비스가 가능하다.
GUI 콘솔에서 GKE 생성하기
클러스터 만들기를 눌러주자.
기본 옵션인 Autopilot이 모든 노드까지 정말 관리해 주는 서비스이다.
우리는 노드는 직접 제어하기 위해 Standard 클러스터로 전환해 준다.
생성할 영역을 고르고, 나머지는 기본값으로 만들어주자.
Node pool
생성 후 디폴트 노드 풀이 생성되어 있다.
노드 풀은 클러스터 내에서 구성(성능 스펙)이 모두 동일한 노드 그룹이다.
노드 풀은 클러스터 생성 이후에 추가또는 수정 할 수도 있다.
만약 특별한 성능이 필요한 컨테이너라면, 성능이 뛰어난 노드 풀에서 동작시키는 등의 방식을 사용할 수 있다.
GUI 콘솔에서도 이 노드 풀의 size를 변경할 수 있다.
기본으로 3개의 노드가 생성되어 있고 이를 4개로 바꾸어 주면, 노드의 개수가 4개로 늘어난다.
워크 로드에서 예제 파드를 배포해 보자.
이는 K8s의 Deployment를 배포하는 것과 동일하다.
간단하게 컨테이너 이미지 이름을 넣어주면 yaml을 생성하여 배포해 준다.
yaml을 확인해 보면 기본적으로 3개의 파드가 배포되도록 설정되어 있다.
yaml에서 알 수 있듯이 cpu util이 80 퍼 이상일 때, 수평적으로 최대 5개까지 확장되도록 설정이 되어 있다.
파드 개별의 상세 정보도 확인이 된다.
이제 cloud shell에서 kubectl 세팅을 하면, 클라우드 쉘에서 ctl로 명령을 내릴 수 있다.
하지만 GCP는 모든 작업을 CLI로 할 수 있고, GCP는 이를 권장하고 있다.
이번에는 Cloud Shell로 GKE 클러스터를 배포해 보자.
Cloud Shell로 GKE 클러스터 배포하기
# 환경변수 설정
export my_zone=us-central1-a
export my_cluster=standard-cluster-1
환경 변수를 이용해서 cluster 생성 명령어를 실행하는 것이 이후 명령어 반복에 편리하다.
gcloud container clusters create <cluster 명> --num-nodes 3 --zone <생성할 zone> --enable-ip-alias
프로젝트 ID를 명시하라는 오류가 발생하면 다음 옵션을 추가해 주면 된다.
--project <프로젝트 ID>
노드 수도 4개로 변경하는 명령어를 줄 수도 있다.
gcloud container clusters resize $my_cluster --zone $my_zone --num-nodes=4
Cloud Shell을 GKE 클러스터에 연결하기
Cloud Shell은 GKE 클러스터에게 kubectl 명령을 주기 위해서 인증을 받아야 한다.
이때 인증은 OAuth2 토큰을 사용하며 IAM을 통해서 관리된다.
이를 위해서 현재 사용자의 인증 정보로 kubeconfig 파일을 만들고, GKE 클러스터의 엔트포인트 정보를 얻어오는 명령어를 실행한다.
gcloud container clusters get-credentials $my_cluster --zone $my_zone
이제 cloud shell에서 인증과 GKE 엔드포인트 데이터를 확인할 수 있다.
nano ~/.kube/config
kubectl 확인해 보기
클러스터 정보 확인하기
kubectl cluster-info
활성화된 context 출력하기
kubectl config current-context
context 변경하기
kubectl config use-context <context 이름>
여러 개의 Cluster를 사용한다면 콘텍스트 변경으로 다른 클러스터에 kubectl 명령어를 내릴 수 있다.
kubectl 명령어를 bash에서 자동완성되도록 적용
source <(kubectl completion bash)
GKE 클러스터에 파드 배포하기
# deployment
kubectl create deployment --image <image명> <deployment 명>
# 파드 확인
kubectl get pods
여기서는 파드에 접근해 보기 위해서 nginx를 띄웠다.
파드를 외부에서 접근하기(LoadBalancer service)
외부에서 쿠버네티스에 접속하기 위해서 Loadbalancer 서비스를 사용해 보자.
kubectl expose pod <pod id> --port 80 --type LoadBalancer
kubectl get services
External-ip에 주소가 할당될 것이다.
(kubernetes는 ClusterIP로 API server의 역할을 한다.)
이때 할당된 IP는 외부 IP이기 때문에 웹 접속이 가능하다.
LoadBalancer는 아래처럼 yaml로도 배포할 수 있다.
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
이는 app: nginx 라벨이 있는 모든 컨테이너의 TCP 포트 60000에서 포트 80으로 인바운드 트래픽을 분산해 준다.
#적용
kubectl apply -f ./service-nginx.yaml
kubectl get service nginx
외부 ip가 할당되었다.
K8S에서는 Loadbalancer type으로 service를 배포하려면, metaLB와 같이 외부 라이브러리를 설치해주어야 한다.
반면 GKE에서는 자동으로 gcp의 lb가 생성되어서 붙어지기 때문에 매우 편리하다.
'Cloud > GCP' 카테고리의 다른 글
GCP Cloud Build로 Docker 컨테이너 빌드하기 (Artifact Registry) (0) | 2024.04.11 |
---|---|
GCP Cloud NAT 구성하기 (0) | 2024.04.09 |
[GCP] IAP와 Private Google Access 사용하기 (0) | 2024.04.08 |
GCP VPC와 AWS의 VPC의 차이점 (0) | 2024.04.05 |