# 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์ ๋ณผ๋ฅจ