Skip to content

Commit 4eb89bb

Browse files
committed
feat(infra): add k8s guide in week6
1 parent 2f5f531 commit 4eb89bb

File tree

5 files changed

+143
-142
lines changed

5 files changed

+143
-142
lines changed

content/docs/infra/5. AWS: S3, IAM.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Amazon S3의 기본적인 용어들을 알아보고, S3 버킷을 생성하며
2828
- **["AWS Amazon S3 버킷 생성하기" (글)](https://zzang9ha.tistory.com/358)**: S3의 다양한 개념들이 정리되어있습니다.
2929
- **["Amazon S3 요금"](https://aws.amazon.com/ko/s3/pricing/)**: AWS의 S3 요금 페이지입니다. S3의 요금을 알아보세요.
3030
- **["S3 버킷에서 버전 관리를 사용하면 무엇이 달라질까?" (글)](https://dev.classmethod.jp/articles/jw-what-would-it-make-a-difference-to-use-version-management-in-an-s3-bucket/)**: S3의 버전 관리 기능에 대해 알아보세요.
31-
- **["AWS S3 요금으로 한 놈 담궈버리는 방법 "](https://www.youtube.com/watch?v=propgtDEMgM)**: S3와 관련된 재미있는 내용입니다. 재미로 가볍게 봐주세요.
31+
- **["AWS S3 요금으로 한 놈 담궈버리는 방법 "](https://www.youtube.com/watch?v=propgtDEMgM)**: S3와 관련된 재미있는 내용입니다. 재미로 가볍게 봐주세요.
3232

3333
### 2. Amazon CloudFront
3434

@@ -66,8 +66,10 @@ AWS IAM의 용어들과 구성, 문법을 알아봐요.
6666
```mermaid
6767
flowchart LR
6868
subgraph AWS
69-
subgraph Docker in EC2
70-
Node.js
69+
subgraph EC2
70+
subgraph Docker
71+
Node.js
72+
end
7173
end
7274
ALB -- localhost:3000 --> Node.js
7375
CloudFront -- /api/* --> ALB

content/docs/infra/6. AWS: ECS.md

Lines changed: 0 additions & 123 deletions
This file was deleted.
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
+++
2+
title = "6. Kubernetes (k8s)"
3+
description = "컨테이너 오케스트레이션 도구인 Kubernetes에 대해 알아봅니다."
4+
icon = "article"
5+
date = "2023-10-30"
6+
lastmod = "2025-07-07"
7+
weight = 360
8+
+++
9+
10+
Kubernetes는 컨테이너 오케스트레이션 도구로, 여러 개의 컨테이너를 관리하고, 배포할 수 있도록 도와줍니다.
11+
이번 시간에는 많은 기업에서 인프라 팀이라면 필수인 Kubernetes에 대해 알아보겠습니다.
12+
13+
## 공부할 내용 📚
14+
15+
### 1. YAML 문법
16+
17+
Kubernetes는 YAML 파일로 리소스를 정의합니다.
18+
YAML은 데이터를 표현하기 위한 포맷으로, JSON과 비슷하지만 더 간결하고 읽기 쉽습니다.
19+
20+
#### 참고 자료
21+
22+
- **[쿠버네티스 안내서 "YAML 문법"](https://subicura.com/k8s/prepare/yaml.html)**: YAML의 기본 문법을 정리한 글입니다.
23+
- **[인파 'YAML 개념 & 문법 마스터 하기'](https://inpa.tistory.com/entry/YAML-%F0%9F%93%9A-yaml-%EA%B0%9C%EB%85%90-%EB%AC%B8%EB%B2%95-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC)**: JSON과 비교하며 YAML의 내용을 자세히 설명한 글입니다.
24+
25+
### 2. Kubernetes
26+
27+
Kubernetes는 여러 서버에서 많은 컨테이너를 관리하기 위한 도구입니다.
28+
Kubernetes가 복잡한 도구로 많이 알려져 있지만, **'원하는 상태와 실제 상태를 동기화하는 도구'라는 핵심 철학**을 이해하면 어렵지 않게 사용할 수 있습니다.
29+
30+
Kubernetes 자체를 설치하는 것은 매우 까다롭기 때문에, minikube나 k3s를 설치해서 실습하는 걸 추천드립니다.
31+
32+
아래 핵심 개념들은 꼭 익혀두는 걸 추천드립니다.
33+
34+
- kubectl 명령어
35+
- Cluster, Node, Pod, Container의 관계
36+
- Control Plane(Master Node)와 Worker Node의 역할
37+
- Ingress와 Service를 통한 네트워크 설정
38+
- Deployment, ConfigMap, Secret, Volume 등의 리소스
39+
40+
조금 더 깊이 알아보고 싶다면, 내부 구조도 공부해보면 좋습니다.
41+
42+
- Control Plane과 Worker Node를 이루는 내부 components
43+
- Control Plane: kube-apiserver, etcd, kube-controller-manager, kube-scheduler
44+
- Worker Node: kubelet, kube-proxy, container runtime (Docker, containerd 등)
45+
46+
#### 참고 자료
47+
48+
- **[Subicura "쿠버네티스 시작하기"](https://subicura.com/2019/05/19/kubernetes-basic-1.html)**: Kubernetes의 기본 개념을 다루는 글입니다.
49+
- **[쿠버네티스 안내서](https://subicura.com/k8s/)**: Kubernetes의 기본 개념들을 실습과 함께 자세히 정리한 글입니다. 분량이 조금 많지만, Kubernetes를 처음 접하는 분들에게는 좋은 자료입니다.
50+
- **[삼성 SDS 쿠버네티스 알아보기](https://www.samsungsds.com/kr/insights/kubernetes-3.html)**: Kubernetes의 내부 구성 요소들을 정리한 글입니다.
51+
52+
## 프로젝트 실습 🎈
53+
54+
이번 주에는 Kubernetes를 이용해서 Node.js 컨테이너를 스케일링해볼 거예요.
55+
아래 그림처럼 EC2 내에 Docker compose로 구성했던 Node.js 서버를 Kubernetes로 구성해볼 거예요.
56+
57+
{{< alert context="warning" text="사실 EC2에 직접 Kubernetes 클러스터를 구성하는 것은 일반적이지 않아요. AWS에서는 EKS 등의 서비스를 쓰는 것이 더 일반적이지만, 복잡성과 비용을 감안해 이번 실습은 간단하게 k3s를 활용해보기로 해요." />}}
58+
59+
```mermaid
60+
flowchart LR
61+
subgraph AWS
62+
subgraph EC2
63+
subgraph Kubernetes
64+
Ingress --> Node.js
65+
end
66+
end
67+
style Kubernetes fill:#ffaa90
68+
ALB -- localhost:3000 --> Ingress
69+
CloudFront -- /api/* --> ALB
70+
CloudFront -- /* --> S3
71+
end
72+
Client -- http://[domain-name] --> CloudFront
73+
```
74+
75+
### EC2 인스턴스는 새로 생성해주세요.
76+
77+
- [k3s의 최소 요구사항](https://docs.k3s.io/installation/requirements)에 맞게 아래 조건을 지켜주세요.
78+
- **운영체제**: Ubuntu 20.04 LTS 이상 (24.04 LTS 권장)
79+
- **인스턴스 타입**: t3.small 이상 (2 CPU, 2GB RAM 이상)
80+
- **스토리지**: SSD 20GB 이상 할당
81+
- **보안 그룹**: 22(SSH), 6443(Kubernetes API) 포트가 inbound로 열려있어야 합니다.
82+
- EC2 인스턴스 내부에 Docker와 k3s를 설치해주세요.
83+
84+
```bash
85+
# Docker 설치
86+
curl -fsSL https://get.docker.com | sudo sh -
87+
88+
# k3s 설치
89+
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --tls-san=$(curl ifconfig.me) --write-kubeconfig-mode=644" sh
90+
```
91+
92+
### 원격 kubectl 접속을 설정하세요.
93+
94+
- 로컬 환경에 kubectl을 설치하세요. ([공식 가이드](https://kubernetes.io/docs/tasks/tools/))
95+
- 서버에서 명령어 `sudo cat /etc/rancher/k3s/k3s.yaml`로 kubeconfig를 확인하세요.
96+
- 출력된 kubeconfig를 복사해 로컬의 `~/.kube/remote-config` 파일에 저장하세요.
97+
- kubeconfig 파일에서 `server` 항목의 IP 주소를 EC2 인스턴스의 퍼블릭 IP로 변경하세요.
98+
99+
```yaml
100+
server: https://[EC2-PUBLIC-IP]:6443
101+
```
102+
103+
- KUBECONIFG 환경 변수를 설정하세요.
104+
105+
```bash
106+
export KUBECONFIG=~/.kube/remote-config
107+
```
108+
109+
- kubectl 명령어로 EC2 인스턴스에 접속이 잘 되는지 확인하세요.
110+
111+
```bash
112+
kubectl get all
113+
```
114+
115+
### Deployment를 YAML 파일로 작성하세요.
116+
117+
- Node.js 컨테이너를 실행하는 Deployment YAML 파일을 작성하세요.
118+
- 2개의 Node.js 컨테이너를 실행하도록 설정하세요.
119+
- kubectl 명령어로 잘 배포되었는지 확인해보세요.
120+
121+
### Service를 YAML 파일로 작성하세요.
122+
123+
- Node.js 서비스를 외부에 노출할 수 있도록 Service를 작성하세요.
124+
- 외부에 31000 포트로 노출되도록 설정하세요. (EC2 보안 그룹에서도 31000 포트를 열어주세요.)
125+
- 직접 curl 명령어로 Node.js 서비스를 확인해보세요.
126+
- ALB의 target group에 EC2 인스턴스의 31000 포트를 추가하세요.

content/docs/infra/7. Terraform.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,12 @@ Terraform은 HCL(HashiCorp Configuration Language)이라는 독자적인 언어
4848
```mermaid
4949
flowchart LR
5050
subgraph AWS
51-
subgraph ECS
52-
ALB --> Node.js
51+
subgraph EC2
52+
subgraph Kubernetes
53+
Ingress --> Node.js
54+
end
5355
end
56+
ALB -- localhost:3000 --> Ingress
5457
CloudFront -- /api/* --> ALB
5558
CloudFront -- /* --> S3
5659
style CloudFront fill:#ffaa90
@@ -59,10 +62,13 @@ flowchart LR
5962
Client -- http://[domain-name] --> CloudFront
6063
```
6164

62-
### AWS CLI를 설치하세요.
65+
### AWS CLI를 설치하세요. (AWS의 서비스들을 터미널 명령어만으로 제어할 수 있게 해주는 도구입니다.)
6366

64-
- [지난 주차 내용](../infra/6.%20AWS:%20ECS.md#aws-cli를-설치하세요)을 참고해주세요.
65-
- `aws s3 ls` 명령어가 잘 실행되는지 확인해주세요.
67+
1. [공식 가이드](https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html)를 참고해 설치하세요.
68+
2. 설치가 완료되면, `aws --version` 명령어를 실행해 설치가 잘 되었는지 확인하세요.
69+
3. Management Console에서 IAM User를 생성하세요. (`AmazonEC2ContainerRegistryFullAccess` 권한 필요)
70+
4. 생성된 IAM User의 "Security Credentials" 탭에서 access key를 생성하세요. (CLI 모드)
71+
5. 터미널에서 `aws configure` 명령어를 실행해 access key를 등록하세요.
6672

6773
### Terraform을 설치하세요.
6874

content/docs/infra/8. GitHub Actions.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,7 @@ weight = 380
1111

1212
## 공부할 내용 📚
1313

14-
### 1. YAML
15-
16-
<!-- TODO: YAML 내용 3주차로 옮기기 (docker-compose 배우기 전) -->
17-
18-
DevOps에서 자주 쓰이는 YAML 파일의 기본 문법을 배워봅니다.
19-
20-
#### 참고 자료
21-
22-
- **[쿠버네티스 안내서 "YAML 문법"](https://subicura.com/k8s/prepare/yaml.html)**: YAML의 기본 문법을 정리한 글입니다.
23-
24-
### 2. GitHub Actions
14+
### 1. GitHub Actions
2515

2616
DevOps의 핵심인 CI/CD가 무엇인지 이해하고, GitHub Action을 이용해서 CI/CD를 구성하는 방법을 배워봅니다.
2717

0 commit comments

Comments
 (0)