โ˜๏ธ DevOps ๐ŸŒฟ ์ค‘๊ธ‰

Kubernetes ์ž…๋ฌธ

K8s ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜ ๊ธฐ์ดˆ

โฑ๏ธ 10์‹œ๊ฐ„ ๐Ÿ‘๏ธ 23 ์กฐํšŒ
๐Ÿ“– ๊ฐ•์ขŒ ๋‚ด์šฉ
# Kubernetes ์ž…๋ฌธ ๊ฐ€์ด๋“œ

## ํ•™์Šต ๋ชฉํ‘œ
Kubernetes๋กœ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

## 1. Kubernetes๋ž€?
์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
- ์ž๋™ ๋ฐฐํฌ ๋ฐ ์Šค์ผ€์ผ๋ง
- ์…€ํ”„ ํž๋ง
- ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
- ๋กค๋ง ์—…๋ฐ์ดํŠธ

## 2. ํ•ต์‹ฌ ๊ฐœ๋…
Pod: ์ตœ์†Œ ๋ฐฐํฌ ๋‹จ์œ„ (์ปจํ…Œ์ด๋„ˆ ๊ทธ๋ฃน)
Deployment: Pod ๊ด€๋ฆฌ ๋ฐ ๋ณต์ œ
Service: ๋„คํŠธ์›Œํฌ ๋…ธ์ถœ
ConfigMap: ์„ค์ • ๋ฐ์ดํ„ฐ
Secret: ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ
Namespace: ๋ฆฌ์†Œ์Šค ๋ถ„๋ฆฌ

## 3. ๋กœ์ปฌ ์„ค์น˜
minikube:
minikube start
minikube status
minikube dashboard
minikube stop

kind:
kind create cluster
kind delete cluster

kubectl ์„ค์น˜:
curl -LO https://dl.k8s.io/release/stable.txt

## 4. kubectl ๊ธฐ๋ณธ ๋ช…๋ น์–ด
์กฐํšŒ:
kubectl get pods
kubectl get pods -o wide
kubectl get deployments
kubectl get services
kubectl get all

์ƒ์„ธ ์ •๋ณด:
kubectl describe pod pod-name
kubectl logs pod-name
kubectl logs -f pod-name

์‹คํ–‰:
kubectl exec -it pod-name -- sh

์‚ญ์ œ:
kubectl delete pod pod-name
kubectl delete -f manifest.yaml

## 5. Pod ์ƒ์„ฑ
pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80

์ ์šฉ:
kubectl apply -f pod.yaml
kubectl get pods
kubectl delete pod nginx-pod

## 6. Deployment
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
resources:
limits:
memory: "128Mi"
cpu: "500m"

์Šค์ผ€์ผ๋ง:
kubectl scale deployment nginx-deployment --replicas=5

์—…๋ฐ์ดํŠธ:
kubectl set image deployment/nginx-deployment nginx=nginx:1.22
kubectl rollout status deployment/nginx-deployment
kubectl rollout history deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment

## 7. Service
service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP

์„œ๋น„์Šค ํƒ€์ž…:
ClusterIP: ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ์ ‘๊ทผ
NodePort: ๋…ธ๋“œ ํฌํŠธ๋กœ ์™ธ๋ถ€ ๋…ธ์ถœ
LoadBalancer: ํด๋ผ์šฐ๋“œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ

NodePort ์˜ˆ์‹œ:
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080

## 8. ConfigMap
์ƒ์„ฑ:
kubectl create configmap app-config --from-literal=DB_HOST=localhost
kubectl create configmap app-config --from-file=config.txt

yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DB_HOST: localhost
DB_PORT: "3306"

์‚ฌ์šฉ:
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: DB_HOST

## 9. Secret
์ƒ์„ฑ:
kubectl create secret generic db-secret --from-literal=password=mysecret

yaml:
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
password: bXlzZWNyZXQ= # base64 ์ธ์ฝ”๋”ฉ

์‚ฌ์šฉ:
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password

## 10. Ingress
ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80

## 11. ๋ณผ๋ฅจ
PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

Pod์—์„œ ์‚ฌ์šฉ:
volumes:
- name: data
persistentVolumeClaim:
claimName: data-pvc
containers:
- volumeMounts:
- mountPath: /data
name: data

## 12. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ช…๋ น์–ด
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰:
kubectl top nodes
kubectl top pods

์ด๋ฒคํŠธ:
kubectl get events

๋กœ๊ทธ:
kubectl logs pod-name
kubectl logs -f pod-name --tail=100

๋””๋ฒ„๊น…:
kubectl describe pod pod-name
kubectl exec -it pod-name -- sh

## ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
1. Pod์™€ ๊ธฐ๋ณธ ๋ช…๋ น์–ด
2. Deployment ๋ฐฐํฌ
3. Service ๋„คํŠธ์›Œํ‚น
4. ConfigMap/Secret
5. Ingress์™€ ๋ณผ๋ฅจ