동영상: 소개
무엇을 배울것인지
- GKE(Google Kubernetes Engine) 이 어떤건지
- 컨테이너란 무엇인지
- 앱 배포와 관련하여 어떤 이점이 있고, 어떤 방식으로 빌드되는지
- 자체적으로 빌드한 컨테이너 vs GKE(Google Kubernetes Engine) 비교
- Cloud Build를 사용하여 컨테이너를 만드는 방법
- Container Registry에 컨테이너를 저장하는 방법
동영상: 컨테이너 소개
물리적인 컴퓨터에 Application을 직접 배포하는시대
- 하드웨어 하나마다 역할을 지정했음
- 서비스를 확장하려면 물리장비 자체를 확장해야했음
가상화의 시대(하이퍼바이저)
- 하이퍼바이저는 OS의 종속성을 깨뜨리고, 가상머신이 동일한 하드웨어를 공유하도록하는 소프트웨어 레이어
- Application 자체를 가상화 환경으로 빠르게 배포할수 있지만, 아직 종속성이나 OS에 대한 이슈를 해결하지못했음
- 종속항목을 공유하는 Application이 서로 격리되지 않은 환경이라면, 다른 Application의 운영에 영향을받음
VM 중심적인 해결책
- 각각의 Application 에 대해서 전용 가상머신을 실행하는것
- 한 Application이 다른 Application에 영향을 받지않도록 커널을 격리시킴
- 머신, OS, 사용자 공간 전체를 가상화시키는 방식
- 커널사본을 늘리는 방식으로 진행되는 방식, 그러나 대규모의 환경에서는 금방 한계에 다다를것임
컨테이너적인 해결책
- 전체 머신이나, 전체 OS를 가상화 할 필요없이 사용자 공간만 가상화 시키는 방식
- 컨테이너가 가벼운 이유는 OS 전체를 포함하지않기때문
- 컨테이너방식이 환영받는 이유는, Application을 설계할때 시스템 전체에 대한 염려를 하지 않아도 된다(가상화 위에서 올라가는 거라서)
퀴즈: Introduction to Containers
- Which of these problems are containers intended to solve? Mark all that are correct (3 correct answers).
- Applications need a way to isolate their dependencies from one another.
- Packaging applications in virtual machines can be wasteful.
- It's difficult to troubleshoot applications when they work on a developer's laptop but fail in production.
동영상: Containers and Container Images
이미지: App + Application의 종속항목
컨테이너: 이미지의 실행중인 Instance
컨테이너를 구성하는 Linux의 요소
- Process: 모든 프로세스와 별개로 가상 메모리 주소공간을 가지고, 매우 빠른속도로 생성 혹은 제거됨
- namespace: 애플리케이션이 볼 수 있는 PID, Dir, IP주소등을 제어함
- cgroups: CPU, Mem, IO 등의 리소스 사용량을 제어함
- Union File Systems: Application, Application의 종속항목을 최소한의 레이어세트로 캡슐화를 담당함
Container manifest: 컨테이너 이미지를 빌드하는데 사용하는 도구를 지칭하는 말
Dockerfile: 도커형식의 컨테이너 이미지를 빌드하는데 사용하는 도구를 지칭하는 말
Dockerfile
- 각 컨테이너는 각각의 레이어 별로 구조화가 되어있음
- FROM: 저장소에서 가져온 기본 레이어(OS 런타임)를 생성
- COPY: 빌드하는 현재 디렉터리에서 복사된 일부 파일을 포함하는 레이어 추가
- RUN: make명령어로 Application을 빌드하고, 빌드결과를 삽입
- CMD: 특정한 명령어를 직접 실행
- Dockerfile을 작성할때는 레이어의 변경 가능성이 작은것부터, 큰것 순으로 구성해야함
- 직접 Container에서 빌드하는게 가능하긴한데, 공격할 포인트도 많고, 비효율적이라서 권장되지않음
- 한개의 컨테이너가 최종실행가능한 이미지를 빌드하고, 별개의 컨테이너가 Application을 실행하는데 필요한 요소만 수신하는 방식을 권장함
- Container Layer
- 실행중ㄷ인 컨테이너에 대해서 이루어지는 모든 변경사항을 저장하는 레이어
- 해당 레이어는 임시레이어라서, 컨테이너가 삭제되면 같이 삭제된다.
- Container Image share
- 하나의 이미지를 가지고, 여러개의 컨테이너를 빌드하는경우: 이미지 전체를 복사하지않고, 차이만 가지고 레이어를 생성함
- 컨테이너를 실행하면 컨테이너 런타임은 필요한 이미지를 가져옴
퀴즈: Containers and Container Images
- Why do Linux continaers use union file systems?
- To efficiently encapsulate applications and their dependencies into a set of clean, minimal layers
- What is significant about the topmost layer in a container? Choose all that are true (2 correct answers).
- An application running in a container can only modify the topmost layer.
- The topmost layer's contents are ephemeral. When the container is deleted the contents will be lost.
동영상: 실습소개
실습: Cloud Build로 작업하기
Cloud Build를 사용해서 컨테이너빌드, 푸시하기
Container Registry를 사용해서 컨테이너 저장, 배포하기
작업1. API 설정하기
사용등록할것
- Cloud Build
- Container Registry API
작업2. Dockerfile, Cloud Build로 컨테이너 빌드하기
Dockerfile는 결국 무언가를 ‘빌드’ 하기 위한건데, 뭐를 빌드할지는 Dockerfile 내부에 작성하는것이다.
nano quickstart.sh
#!/bin/sh
echo "Hello, world! The time is $(date)."
nano Dockerfile
FROM alpine #알파인 리눅스 기본이미지를 사용하도록 지정
COPY quickstart.sh / #현재디렉토리의 quickstart.sh 를 이미지의 / 디렉토리에 추가함
CMD ["/quickstart.sh"] #컨테이너를 생성하고 실행할때 /quickstart.sh 를 실행하도록 이미지를 구성함
컨테이너 이미지 빌드(Cloud Build사용)
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/quickstart-image .
빌드가 완료되면 Docker image가 빌드되어 Container Registry에 푸시된다
작업3. Cloud Build로 컨테이너 빌드하기
Cloud Build는 커스텀 빌드파일도 지원한다
git clone
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
soft link 생성
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
mv
cd ~/ak8s/Cloud_Build/a
이때 cloudbuild.yaml 파일을 확인하면
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'
TAG를 gcr.io/$PROJECT_ID/quickstart-image 로 지정하고
Cloud Build
gcloud builds submit --config cloudbuild.yaml .
이미지를 Container Registry로 푸시하는 내용이다.
동영상: Kubernetes 소개
컨테이너의 시대
- 컨테이너로 서비스를 배포하고있는 시대
- 문제는, 컨테이너가 너무 많다는것.
- 컨테이너에서 실행하는 애플리케이션은 Network를 통해서 통신해야하지만, 컨테이너 끼리 찾게해주는 네트워크 패브릭이없음
Kubernetes의 시대
- 컨테이너 인프라를 조정 및 관리하는데 도움이 되는 오픈소스플랫폼
- Platform as a Service: 부하분산, 로깅, 모니터링 등
- Infrastructure as a Service: 환경설정 및 구성 유연성
- 선언적(declare) 구성: 배포된 시스템을 원하는 상태와 일치하도록 만들고, 장애가 발새해도 그 상태를 유지하는 역할을 제공
- 명령적 구성: 명령어를 실행하는 것도 가능(그러나, 쿠버네티스의 강점은 아님)
K8s
- Stateless: Nginx, Apache Web server
- Stateful
- CRD: Custom Resource Definition
퀴즈: Introduction to Kubernetes
Q1. When you use Kubernetes, you describe the desired state you want, and Kubernetes's job is to make the deployed system conform to your desired state and to keep it there in spite of failures. What is the name for this management approach?
A. Declarative configuration
Q2. What is a stateful application?
A. An application that requires user and session data to be stored persistently
동영상: Google Kubernetes Engine
GKE(Google Kubernetes Engine)
- GCP에서 컨테이너화된 애플리케이션을 위한 K8s 환경을 배포, 관리, 확장하게 도움주는역할
- 굳이 따지면 GKE는 GCP의 제품군
- GKE를 사용하면 K8s워크로드를 클라우드로 쉽게 가져올수 있음
GKE의 특징
- Fully Managed: GKE는 완전관리형 서비스
- Container-Optimized OS: K8s를 빠르게 확장하기에 용이함
- Auto upgrade: 서비스에 K8s를 인스턴스화 하도록 지시
- Auto repair: 자동복구, 비정상 노드를 단계적으로 종료하고, 정상노드로 다시 올려줌
퀴즈: Introduction to Google Kubernetes Engine
Q1. What is the relationship between Kubernetes and Google Kubernetes Engine?
A. Google Kubernetes Engine is Kubernetes as a managed service.
Q2. What is the name for the computers in a Kubernetes cluster that can run your workloads?
A. Nodes
Q3. Which of the following supports scaling a Kubernetes cluster as a whole?
A. Google Kubernetes Engine
동영상: 컴퓨팅 옵션 세부정보
Compute Engine
- Fully customizable virtual machine: 사용자가 직접 성능설정가능
- Persistent disks and optional local SSD
- Global load balancing and autoscalinng: 자동확장을 지원하는 Local Balancer 뒤에 둘수있기때문에 확장성에 용의
- Per-second billing: 사용한 만큼 요금냄
Compute Engine을 사용하는이유
- 인프라를 완벽하게 제어하기위해서
- 온프렘or클라우드 에서 클라우드로 이전(lift and shift)가 쉬워서
- 다른 컴퓨팅 옵션이 마음에 안들어서
App Engine
- fully managed, code-first platform
- streamlines application deployment and scalability: 개발자가 배포부분에 대한 걱정없이 배포가 가능하다
- support popular programming Lang: 코드만 쓰면 App Engine이 필수 인프라를 알아서 배포해줌
- StackDriver(monitoring, logging)지원
- version control, traffic ,, etc
App Engine을 사용하는 이유
- 배포에 관리를 신경쓸 필요가 없음, 코드작성에만 신경쓰고싶을때
- Website
- Mobile App and gaming backend
- RESTful API
GKE
- Fully managed K8s Platform
- Cluster scaling, Persistent disk, auto repair
- Built in Google Cloud Service
- multiple environment: Hybird Computing, Multi-cloud computing지원
GKE를 사용하는 이유
- Containerized application
- Cloud native distributed systems(application)
- Hybrid application
Cloud Run
- 웹 요청 또는 google Pub/Sub 이벤트를 통해서 Stateless컨테이너를 실행시켜줄수있게 사용하는거
- 서버리스 환경
- Fully managed
- 서버 프로비저닝, 구성 및 관리를 전혀 안해줘도되기때문에, 코드작성에만 하면됨
- Automatically scale up and down
Cloud Run을 사용하는 이유
- HTTP 전송되는 요청 혹은 이벤트를 리슨하는 Stateless 컨테이너를 배포하는 목적
- 원하는 프로그래밍언어, 애플리케이션을 관리할필요없이 쉽게 배포가능
Cloud Functions
- 이벤트드리븐, 서버리스 컴퓨팅 서비스
- 고가용성, fault-tolerant design
- 코드를 실행할때만 요금하면됨
Cloud Functions을 사용하는이유
- microservice application아키텍쳐의 일부로 사용
- Serverless application Backend(Mobile or IOT)
정리
Compute Engine
- Long lived VM가 필요한 경우
- Physical server에서 이전하는 경우
- One container/ One VM 인 경우
GKE
- On-prem 의 K8s에서 이전하는 경우
- container workloads에서 관리자가 많은경우
AppEngine
- No-Ops
- Container run by Service
Cloud Run
- Managed
- Stateless Container
Cloud Functions
- No Ops
퀴즈: Containers and Kubernetes in Google cloud
Q1. You are deploying a containerized application, and you want maximum control over how containers are configured and deployed. You want to avoid the operational management overhead of managing a full container cluster environment yourself. Which Google Cloud compute solution should you choose?
A. Google Kubernetes Engine
Q2. You are choosing a technology for deploying applications, and you want to deliver them in lightweight, standalone, resource-efficient, portable packages. Which choice best meets those goals?
A. Containers
Q3. You are classifying a number of your applications into workload types. Select the stateful applications in this list of applications. Choose all responses that are correct (2 correct responses).
A. A gaming application that keeps track of user state persistently.
A. A shopping application that saves user shopping cart data between sessions.
Q4. Google Compute Engine provides fine-grained control of costs. Which Compute Engine features provide this level of control? (2 correct responses)
A. Per-second billing
A. Fully customizable virtual machines
'외부활동' 카테고리의 다른 글
[구글 클라우드 쿠버네티스 스터디잼 중급] Kubernetes Architecture 오타 (0) | 2023.06.25 |
---|---|
[구글 클라우드 쿠버네티스 스터디잼 중급] Kubernetes Architecture (0) | 2023.06.23 |
[구글 클라우드 쿠버네티스 스터디잼 중급] 하다가 퀵랩에 문의한썰: 1달 무료구독 안생김 (0) | 2023.06.22 |
[오픈소스 컨트리뷰션] 번외코스1. 머신러닝 분산처리 프레임워크 동작 이해하기 (0) | 2023.06.21 |
[오픈소스 컨트리뷰션] 코스1. Backend.AI 써보고 경험 공유하기 (0) | 2023.06.21 |