GCP GKE를 사용해보자 - 8.26

양승현·2022년 8월 26일
1

docker

목록 보기
8/12

GCP와 Ubuntu 연결

  • 프로젝트 생성하기
  • 내 프로젝트에 접속하기
  • 처음 계정을 생성하게 되면 구글에서 $300을 무료로 제공해준다.
  • GCP sdk 설치
rapa@manager:~$ sudo snap install google-cloud-sdk --classic 
  • gcloud 로그인하기
rapa@manager:~$ gcloud auth login

  • gcloud 시작하기
rapa@manager:~$ gcloud init

rapa@manager:~$ gcloud config list project

  • 프로젝트 리스트 확인
rapa@manager:~$ gcloud config list project --format "value(core.project)"
yangseunghyun-test-project
  • 프로젝트 명 변수 지정
rapa@manager:~$ PROJECT_ID=$(gcloud config list project --format "value(core.project)")
  • echo로 변수명 확인
rapa@manager:~$ echo $PROJECT_ID
yangseunghyun-test-project
  • git clone 하기
rapa@manager:~$ git clone https://github.com/beomtaek78/btstore
  • 일반적인 저장소
-> public
-> local
-> private -> private-registry -> 우리 회사내에 사설 저장소를 만들어 팀원간 공유한다.
-> aws, gcp, azure와 같은 퍼블릭 클라우드는 작업을 위한 공간이 별도로 만들어진다. 이를 Project 라고 한다. 이는 퍼블릭 클라우드 안의 프라이빗 공간이다
  • API 및 서비스에 접속 후

  • API 및 서비스 사용 설정에 접속

API 활성화 하기

    1. kubernetes engine
    1. cloud build
    1. condainer registry
  • yml파일로 이미지 생성 및 GCP에 업로드
rapa@manager:~/btstore/kube$ gcloud builds submit --config config/cloudbuild.yaml

cloudbuild.yaml 
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/imageview:blue', './blue']
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/imageview:green', './green']
images: ['gcr.io/$PROJECT_ID/imageview:blue', 'gcr.io/$PROJECT_ID/imageview:green']

  • cloud build를 이용하면 로컬 컴퓨터에서 이미지를 생성하고 생성된 이미지를 자신의 사설 저장소에 push 할 수 있다.

cluster 생성하기

  • kubernetes engine 클릭 후 접속
  • standard 클릭
  • 클러스터 생성

클러스터 사용 방법

ubuntu에서 사용하기

  • ubuntu에서 kubectl 설치
rapa@manager:~/btstore/kube/config$ sudo apt-get install kubectl
  • 클러스터 연결
rapa@manager:~/btstore/kube/config$ gcloud container clusters get-credentials yangseunghyun-cluster --zone 영역 --project 프로젝트 명

cloud shell에서 사용하기

  • 클러스터 연결
gcloud container clusters get-credentials yangseunghyun-cluster --zone 영역 --project 프로젝트 명
  • 클러스터 노드 확인
kubectl get node
NAME                                                  STATUS   ROLES    AGE   VERSION
gke-yangseunghyun-cluste-default-pool-377c54d2-f185   Ready    <none>   7m51s   v1.22.11-gke.400
gke-yangseunghyun-cluste-default-pool-377c54d2-rlbr   Ready    <none>   7m50s   v1.22.11-gke.400
gke-yangseunghyun-cluste-default-pool-377c54d2-z9c9   Ready    <none>   7m51s   v1.22.11-gke.400
  • git clone 하기
git clone https://github.com/beomtaek78/btstore

Configmap & Secret 배포하기

Configmap

kubectl apply -f config/configmap.yaml
cat config/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
    name: projectid
data:
    project.id: "hello-docker"

  • configmap은 data 확인이 가능하다.

Secret

kubectl apply -f config/secrets.yaml
cat config/secrets.yaml

apiVersion: v1
kind: Secret
metadata:
  name: apikey
type: Opaque
data:
  id: YXNh
  key: YUJjRDEyMw==

  • secrets은 data 확인이 불가능하다.

Yaml 파일로 APP 배포하기

  • api 버전 확인
kubectl api-resources
  • 배포 할 파일 내용
vi config/deployment-green.yaml   

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      color: blue
  template:
    metadata:
      labels:
        type: webserver
        color: blue
    spec:
      containers:
      - image: gcr.io/beomtaek-test/imageview:blue
        name: webserver-container
        env:
        - name: PROJECT_ID
          valueFrom:
            configMapKeyRef:
              name: projectid
              key: project.id
        - name: SECRET_ID
          valueFrom:
            secretKeyRef:
              name: apikey
              key: id
        - name: SECRET_KEY
          valueFrom:
            secretKeyRef:
              name: apikey
              key: key
        ports:
        - containerPort: 80
          name: http-server
  • 배포하기
kubectl apply -f config/deployment-blue.yaml

load balancer 배포하기

  • 80번 포트로 매핑하였으며, LB의 80번 포트로 접근하게 되면 webserver 타입의 blue인 pod에 전달하게 된다.
cat config/secrets.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    type: webserver
    color: blue
  • 컨테이너 배포하기
kubectl apply -f config/service.yaml
  • 확인

0개의 댓글