Kubernetes: 첫 ì í늬ìŒìŽì ë°°í¬íêž°
Kubernetesìì ì í늬ìŒìŽì ì ë°°í¬íêž° ìí ì€ì© ê°ìŽëì ëë€. minikube ì€ì¹ë¶í° Deployment, Service, ConfigMapê¹ì§ 구첎ì ìž ìì ì íšê» ì€ëª í©ëë€.

Kubernetes(K8s)ë 컚í ìŽë ì€ìŒì€ížë ìŽì ì ì¬ì€ì íì€ìŽ ëììµëë€. Googleìì ì€ê³ëìê³ íì¬ë CNCFìì ì ì§êŽëЬíë Kubernetesë 컚í ìŽëíë ì í늬ìŒìŽì ì ë°°í¬, íì¥, êŽëŠ¬ë¥Œ ìëíí©ëë€. ìŽ ê°ìŽëë ë¡ì»¬ íŽë¬ì€í° ì€ì 곌 첫 ì í늬ìŒìŽì ë°°í¬ê¹ì§ì 곌ì ì ìëŽí©ëë€.
Kubernetes륌 ê¹ìŽ ë€ë£šêž° ì ì Dockerì ëí Ʞ볞 ì§ìì ê°ì¶ë ê²ìŽ ê¶ì¥ë©ëë€. 컚í ìŽëë Kubernetesê° ì€ìŒì€ížë ìŽì íë Ʞ볞 êµ¬ì± ììì ëë€. Docker ê°ìŽë륌 뚌ì ìœìŽë멎 ì¬êž°ì ìê°íë ê°ë ì íšì¬ ìœê² ìŽíŽí ì ììµëë€.
Kubernetes ìí€í ì² ìŽíŽíêž°
Kubernetesë ë§ì€í°-ì컀 ìí€í ì²ì êž°ë°í©ëë€. Control Planeì íŽë¬ì€í°ì ëí ì ìì ê²°ì ì ëŽëŠ¬ê³ , Nodeë ìí¬ë¡ë륌 ì€íí©ëë€.
# Simplified Kubernetes Architecture
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â CONTROL PLANE â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââââââââ â
â â API Server â â Scheduler â â Controller Manager â â
â âââââââââââââââ âââââââââââââââ âââââââââââââââââââââââ â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â â etcd ââ
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
ââââââââââââââââââââââŒâââââââââââââââââââââ
⌠⌠âŒ
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â NODE 1 â â NODE 2 â â NODE 3 â
â âââââââââââââ â â âââââââââââââ â â âââââââââââââ â
â â kubelet â â â â kubelet â â â â kubelet â â
â ââââââââââââ†â â ââââââââââââ†â â ââââââââââââ†â
â â kube-proxyâ â â â kube-proxyâ â â â kube-proxyâ â
â ââââââââââââ†â â ââââââââââââ†â â ââââââââââââ†â
â â Pods â â â â Pods â â â â Pods â â
â âââââââââââââ â â âââââââââââââ â â âââââââââââââ â
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââAPI Serverë 몚ë ëª ë ¹ì ì§ì ì ì ëë€. etcdë íŽë¬ì€í° ìí륌 ì ì¥í©ëë€. Schedulerë Pod륌 Nodeì í ë¹í©ëë€. Controllerë ìì€í ì ìíë ìí륌 ì ì§í©ëë€.
ë¡ì»¬ í겜 ì€ì íêž°
Kubernetes륌 ë¡ì»¬ìì ìííŽ ë³Œ ì ìë ìµì ì ì¬ë¬ ê°ì§ê° ììµëë€: minikube, kind, k3d ëë Docker Desktopì ëë€. minikubeë íìµì ê°ì¥ ìžêž° ìë ì룚ì ìŒë¡ ëšì ììµëë€.
# terminal
# Install kubectl (Kubernetes client)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# Verify installation
kubectl version --client
# Client Version: v1.31.0
# Install minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Start the local cluster
minikube start --driver=docker --cpus=2 --memory=4096
# Check status
minikube status
# minikube: Running
# cluster: Running
# kubectl: Configuredminikubeë ê°ì ëšžì ìŽë Docker 컚í ìŽë ìì ëšìŒ ë žë Kubernetes íŽë¬ì€í°ë¥Œ ìì±í©ëë€. í ë¹ë ìì(CPU, ë©ëªšëЬ)ì íìì ë°ëŒ ì¡°ì í ì ììµëë€.
# terminal
# Access the Kubernetes dashboard (web interface)
minikube dashboard
# Check cluster nodes
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# minikube Ready control-plane 5m v1.31.0
# Detailed cluster information
kubectl cluster-infoKind(Kubernetes in Docker)ë ë ë¹ ë¥Žê² ììíë©° CI/CD í ì€ížì ë ì í©í©ëë€. K3dë 겜ë Kubernetes ë°°í¬íìž k3s륌 ì¬ì©í©ëë€. Docker Desktopì Kubernetes륌 ì§ì íµí©íì§ë§ ë ë§ì ììì ìë¹í©ëë€.
Pod: Ʞ볞 ëšì
Podë Kubernetesìì ë°°í¬ ê°ë¥í ê°ì¥ ìì ëšìì ëë€. Podë ëìŒí ë€ížìí¬ì ì€í 늬ì§ë¥Œ ê³µì íë íë ìŽìì 컚í ìŽë륌 캡ìíí©ëë€.
# pod-simple.yaml
apiVersion: v1
kind: Pod
metadata:
# Unique Pod name within the namespace
name: nginx-pod
# Labels for organization and selection
labels:
app: nginx
environment: development
spec:
containers:
# Main container definition
- name: nginx
# Docker image to use
image: nginx:1.25-alpine
# Ports exposed by the container
ports:
- containerPort: 80
# Container resource allocation
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"ìŽ YAML ë§€ëíì€ížë ëšìŒ nginx 컚í ìŽë륌 í¬íšíë Pod륌 ì ìží©ëë€. ë ìŽëžì Pod륌 ìë³íê³ ì íí ì ìê² í©ëë€. ììì ìµì 볎ì¥(requests)곌 ìµë íë(limits)륌 ì ìí©ëë€.
# terminal
# Create the Pod
kubectl apply -f pod-simple.yaml
# pod/nginx-pod created
# List Pods
kubectl get pods
# NAME READY STATUS RESTARTS AGE
# nginx-pod 1/1 Running 0 30s
# Full Pod details
kubectl describe pod nginx-pod
# Container logs
kubectl logs nginx-pod
# Execute a command inside the Pod
kubectl exec -it nginx-pod -- /bin/sh
# Delete the Pod
kubectl delete pod nginx-podPodë 볞ì§ì ìŒë¡ ìŒìì ì ëë€. ì¶©ëìŽë ìì ê° ë°ìíŽë Kubernetesë ìëìŒë¡ ë€ì ë§ë€ì§ ììµëë€. Deploymentê° ìŽë¬í íê³ë¥Œ íŽê²°í©ëë€.
Deployment: ì ìžì êŽëЬ
Deploymentë ëìŒí Pod ì§í©ì ëí ìíë ìí륌 ì ìí©ëë€. Kubernetesë íìì ë°ëŒ Pod륌 ë§ë€ê³ , ì ë°ìŽížíê³ , ìì í멎ì ìŽ ìí륌 ìëìŒë¡ ì ì§í©ëë€.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# Deployment name
name: webapp-deployment
labels:
app: webapp
spec:
# Desired number of replicas
replicas: 3
# Selector to identify managed Pods
selector:
matchLabels:
app: webapp
# Template for Pod creation
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:1.25-alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
# Liveness probe: restarts container on failure
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 10
# Readiness probe: removes Pod from Service on failure
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5Deploymentë 3ê°ì ëìŒí Pod륌 ì ì§íë ReplicaSetì ìì±í©ëë€. íë¡ëžë 컚í ìŽëì ìí륌 íìžíê³ Kubernetesê° ë¬žì ì ìëìŒë¡ ëìí ì ìê² í©ëë€.
# terminal
# Create the Deployment
kubectl apply -f deployment.yaml
# deployment.apps/webapp-deployment created
# Verify the Deployment
kubectl get deployments
# NAME READY UP-TO-DATE AVAILABLE AGE
# webapp-deployment 3/3 3 3 1m
# List Pods created by the Deployment
kubectl get pods -l app=webapp
# NAME READY STATUS RESTARTS AGE
# webapp-deployment-7d9f8b6c4-abc12 1/1 Running 0 1m
# webapp-deployment-7d9f8b6c4-def34 1/1 Running 0 1m
# webapp-deployment-7d9f8b6c4-ghi56 1/1 Running 0 1m
# Manual scaling
kubectl scale deployment webapp-deployment --replicas=5
# Deployment history
kubectl rollout history deployment webapp-deploymentPod륌 ìì í멎 ìíë ë³µì 볞 ì륌 ì ì§íêž° ìíŽ ì Podì ìì±ìŽ ìëìŒë¡ ížëŠ¬ê±°ë©ëë€.
DevOps 멎ì ì€ë¹ê° ëì šëì?
ìží°ëí°ëž ì뮬ë ìŽí°, flashcards, êž°ì í ì€ížë¡ ì°ìµíìžì.
Service: ë€ížìí¬ ë žì¶
Podë ìŒìì ìž IP 죌ì륌 ê°ìµëë€. Serviceë ëŽì¥ ë¡ë ë°žë°ì±ê³Œ íšê» Pod ì§í©ì ì¡ìžì€í ì ìë ìì ì ìž ì£Œì륌 ì ê³µí©ëë€.
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
# Service type: ClusterIP (internal), NodePort, LoadBalancer
type: ClusterIP
# Selector to identify target Pods
selector:
app: webapp
ports:
# Port exposed by the Service
- port: 80
# Target container port
targetPort: 80
# Protocol (TCP by default)
protocol: TCPìŽ ClusterIP Serviceë íŽë¬ì€í° ëŽë¶ììë§ ì ê·Œ ê°ë¥í©ëë€. webapp-service:80ìŒë¡ ê°ë ìì²ì app: webapp ë ìŽëžì ê°ì§ Pod ì¬ìŽì ë¶ì°ë©ëë€.
# terminal
# Create the Service
kubectl apply -f service.yaml
# service/webapp-service created
# List Services
kubectl get services
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# webapp-service ClusterIP 10.96.123.456 <none> 80/TCP 30s
# Test from a temporary Pod
kubectl run curl-test --rm -it --image=curlimages/curl -- curl webapp-service
# Detailed Service description
kubectl describe service webapp-serviceì í늬ìŒìŽì ì íŽë¬ì€í° ìžë¶ë¡ ë žì¶íë €ë©Ž NodePort ëë LoadBalancer íì ìŽ íìí©ëë€.
# service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: webapp-nodeport
spec:
type: NodePort
selector:
app: webapp
ports:
- port: 80
targetPort: 80
# Port on each Node (30000-32767)
nodePort: 30080minikubeìì minikube service webapp-nodeport ëª
ë ¹ì ìëìŒë¡ ì¬ë°ë¥ž URLë¡ ëžëŒì°ì 륌 ìœëë€.
ConfigMap: ìžë¶íë 구ì±
ConfigMapì 구ì±ì ìœëì ë¶ëЬí©ëë€. ê°ì í겜 ë³ìë¡ ì£Œì ëê±°ë íìŒë¡ ë§ìŽížë©ëë€.
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: webapp-config
data:
# Simple key-value pairs
APP_ENV: "production"
LOG_LEVEL: "info"
MAX_CONNECTIONS: "100"
# Multiline configuration (complete file)
nginx.conf: |
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
location /health {
return 200 'OK';
add_header Content-Type text/plain;
}
}ConfigMapì 믌ê°íì§ ìì ë°ìŽí°ë¥Œ ì ì¥í©ëë€. ë¹ë°(ë¹ë°ë²íž, í í°)ìë Kubernetes SecretìŽ ë ì í©í©ëë€.
# deployment-with-config.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-configured
spec:
replicas: 2
selector:
matchLabels:
app: webapp-configured
template:
metadata:
labels:
app: webapp-configured
spec:
containers:
- name: webapp
image: nginx:1.25-alpine
ports:
- containerPort: 80
# Inject environment variables
envFrom:
- configMapRef:
name: webapp-config
# Or individual variables
env:
- name: SPECIFIC_VAR
valueFrom:
configMapKeyRef:
name: webapp-config
key: LOG_LEVEL
# Mount configuration file
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: nginx.conf
volumes:
- name: nginx-config
configMap:
name: webapp-configìŽ êµ¬ì±ì í겜 ë³ì륌 죌ì íê³ ì»ší ìŽë ìì nginx.conf íìŒì ë§ìŽíží©ëë€.
# terminal
# Apply resources
kubectl apply -f configmap.yaml
kubectl apply -f deployment-with-config.yaml
# Verify environment variables
kubectl exec deployment/webapp-configured -- printenv | grep APP_ENV
# APP_ENV=production
# Verify mounted file
kubectl exec deployment/webapp-configured -- cat /etc/nginx/conf.d/default.confConfigMapì ìì íŽë Podê° ìëìŒë¡ ì¬ììëì§ ììµëë€. ë³ê²œ ì¬íì ì ì©íë €ë©Ž ìë ì¬ìììŽ íìí©ëë€: kubectl rollout restart deployment webapp-configured. Reloaderì ê°ì ëêµ¬ê° ìŽ ê³Œì ì ìëíí©ëë€.
Secret: 믌ê°í ë°ìŽí°
Secretì ë¹ë°ë²íž, í í°, SSH í€ì ê°ì 믌ê°í ì 볎륌 ì ì¥í©ëë€. base64ë¡ ìžìœë©ëìŽ ìì§ë§ Ʞ볞ì ìŒë¡ ì ì¥ ì ìížíëì§ë ììµëë€.
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: webapp-secrets
type: Opaque
# Values must be base64-encoded
data:
# echo -n 'admin' | base64
username: YWRtaW4=
# echo -n 'supersecretpassword' | base64
password: c3VwZXJzZWNyZXRwYXNzd29yZA==
---
# Alternative: stringData accepts plain text values
apiVersion: v1
kind: Secret
metadata:
name: webapp-secrets-plain
type: Opaque
stringData:
username: admin
password: supersecretpasswordSecretì ConfigMap곌 ê°ì ë°©ììŒë¡ 죌ì ë©ëë€.
# deployment-with-secrets.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-secure
spec:
replicas: 1
selector:
matchLabels:
app: webapp-secure
template:
metadata:
labels:
app: webapp-secure
spec:
containers:
- name: webapp
image: nginx:1.25-alpine
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: webapp-secrets
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: webapp-secrets
key: password# terminal
# Create the Secret
kubectl apply -f secret.yaml
# List Secrets (values are not displayed)
kubectl get secrets
# NAME TYPE DATA AGE
# webapp-secrets Opaque 2 10s
# Decode a value
kubectl get secret webapp-secrets -o jsonpath='{.data.password}' | base64 -d
# supersecretpasswordNamespace: ë ŒëŠ¬ì 격늬
Namespaceë íŽë¬ì€í°ë¥Œ 격늬ë ê°ì í겜ìŒë¡ ë¶í í©ëë€. ìŽë¬í ë¶ëЬë ëìŒí íŽë¬ì€í°ìì ì¬ë¬ íìŽë í겜ì êŽëЬí ì ìê² í©ëë€.
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: development
labels:
environment: development
---
apiVersion: v1
kind: Namespace
metadata:
name: staging
labels:
environment: stagingê° ììì í¹ì Namespaceì ìì±ë ì ììµëë€.
# terminal
# Create namespaces
kubectl apply -f namespace.yaml
# List namespaces
kubectl get namespaces
# NAME STATUS AGE
# default Active 1d
# development Active 10s
# staging Active 10s
# Create a resource in a specific namespace
kubectl apply -f deployment.yaml -n development
# List Pods in a namespace
kubectl get pods -n development
# Change default namespace
kubectl config set-context --current --namespace=developmentë€ë¥ž Namespaceì ììì Ʞ볞ì ìŒë¡ 격늬ë©ëë€. Namespace ê° íµì ì ëŽë¶ DNS륌 íµíŽ ìŽë£šìŽì§ëë€: service-name.namespace.svc.cluster.local.
ìì í ì í늬ìŒìŽì : ìì ì¡°í©íêž°
ë€ìì ìê°í 몚ë ê°ë ì ê²°í©í ìì í ì í늬ìŒìŽì ì ëë€.
# complete-app.yaml
---
# Dedicated Namespace
apiVersion: v1
kind: Namespace
metadata:
name: myapp
---
# ConfigMap for configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
namespace: myapp
data:
APP_NAME: "MyApp"
LOG_LEVEL: "info"
---
# Secret for sensitive data
apiVersion: v1
kind: Secret
metadata:
name: myapp-secrets
namespace: myapp
type: Opaque
stringData:
api-key: "sk-1234567890abcdef"
---
# Deployment with 3 replicas
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx:1.25-alpine
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: myapp-config
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: myapp-secrets
key: api-key
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
---
# Service for internal exposure
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: myapp
spec:
type: ClusterIP
selector:
app: myapp
ports:
- port: 80
targetPort: 80
---
# NodePort Service for external access (development)
apiVersion: v1
kind: Service
metadata:
name: myapp-nodeport
namespace: myapp
spec:
type: NodePort
selector:
app: myapp
ports:
- port: 80
targetPort: 80
nodePort: 30100ìŽ ëšìŒ íìŒì ìžë¶íë 구ì±, ë¹ë°, ê³ ê°ì©ì±, ë€ížìí¬ ë žì¶ì ê°ì¶ ìì í ì í늬ìŒìŽì ì ë°°í¬í©ëë€.
# terminal
# Deploy the complete application
kubectl apply -f complete-app.yaml
# Verify all resources
kubectl get all -n myapp
# NAME READY STATUS RESTARTS AGE
# pod/myapp-7d9f8b6c4-abc12 1/1 Running 0 30s
# pod/myapp-7d9f8b6c4-def34 1/1 Running 0 30s
# pod/myapp-7d9f8b6c4-ghi56 1/1 Running 0 30s
#
# NAME TYPE CLUSTER-IP PORT(S) AGE
# service/myapp-service ClusterIP 10.96.123.456 80/TCP 30s
# service/myapp-nodeport NodePort 10.96.123.789 80:30100/TCP 30s
#
# NAME READY UP-TO-DATE AVAILABLE AGE
# deployment.apps/myapp 3/3 3 3 30s
# Access the application with minikube
minikube service myapp-nodeport -n myappì ë°ìŽížì 례백
Kubernetesë ì ì§ì ì ë°ìŽížì 례백ì ì©ìŽíê² í©ëë€.
# terminal
# Update the Deployment image
kubectl set image deployment/myapp myapp=nginx:1.26-alpine -n myapp
# Track deployment in real-time
kubectl rollout status deployment/myapp -n myapp
# Waiting for deployment "myapp" rollout to finish: 1 out of 3 new replicas updated
# Waiting for deployment "myapp" rollout to finish: 2 out of 3 new replicas updated
# deployment "myapp" successfully rolled out
# Revision history
kubectl rollout history deployment/myapp -n myapp
# REVISION CHANGE-CAUSE
# 1 <none>
# 2 <none>
# Rollback to previous revision
kubectl rollout undo deployment/myapp -n myapp
# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=1 -n myappꞰ볞 ì ë°ìŽíž ì ëµ(RollingUpdate)ì ìŽì Pod륌 ì Podë¡ ì ì§ì ìŒë¡ êµì²Žíì¬ ì§ìì ìž ê°ì©ì±ì 볎ì¥í©ëë€.
íì kubectl ëª ë ¹ìŽ
# terminal
# ========================================
# General Information
# ========================================
kubectl cluster-info # Cluster info
kubectl get nodes -o wide # Nodes with details
kubectl api-resources # List resource types
# ========================================
# Resource Management
# ========================================
kubectl get all # All namespace resources
kubectl get pods -A # Pods from all namespaces
kubectl get pods -o wide # Pods with IP and Node
kubectl get pods -w # Watch mode (real-time)
# ========================================
# Inspection and Debugging
# ========================================
kubectl describe pod <name> # Full details
kubectl logs <pod> -f # Streaming logs
kubectl logs <pod> -c <container> # Specific container logs
kubectl exec -it <pod> -- /bin/sh # Interactive shell
kubectl port-forward <pod> 8080:80 # Local tunnel to Pod
# ========================================
# Editing and Deletion
# ========================================
kubectl edit deployment <name> # Live editing (vi)
kubectl delete -f manifest.yaml # Delete via file
kubectl delete pod <name> --force # Force deletionê²°ë¡
Kubernetesë ì ìžì ìŽê³ íë³µë ¥ ììŒë©° íì¥ ê°ë¥í íë ììí¬ë¥Œ ì ê³µíšìŒë¡ìš 컚í ìŽëíë ì í늬ìŒìŽì êŽëŠ¬ë¥Œ ë³íìíµëë€. ì¬êž°ì ìê°í Ʞ볞 ê°ë ì íë¡ëì í겜ì ì í©í ë°°í¬ì êž°ìŽë¥Œ íì±í©ëë€.
첫 Kubernetes ë°°í¬ë¥Œ ìí 첎í¬ëЬì€íž
- â ìëíë ë¡ì»¬ íŽë¬ì€í°(minikube, kind ëë k3d)
- â kubectl ì€ì¹ ë° êµ¬ì± ìë£
- â ë³µì 볞곌 health probe륌 ê°ì¶ Deployment
- â ë€ížìí¬ ë žì¶ì ìí Service
- â ìžë¶íë 구ì±ì ìí ConfigMap
- â 믌ê°í ë°ìŽí°ë¥Œ ìí Secret
- â 격늬륌 ìí Namespace
- â ì ìë ìì íë(requests/limits)
- â ì ë°ìŽíž ì ëµê³Œ 례백 ìë¬
ì°ìµì ììíìžì!
멎ì ì뮬ë ìŽí°ì êž°ì í ì€ížë¡ ì§ìì í ì€ížíìžì.
Kubernetes륌 ë§ì€í°í멎 íì¥ ê°ë¥í íŽëŒì°ë ë€ìŽí°ëž ìí€í ì²ë¡ ê°ë ë¬žìŽ ìŽëŠœëë€. ë€ì ëšê³ìë HTTP ëŒì°í ì ìí Ingress Controller, ì€í 늬ì§ë¥Œ ìí PersistentVolume, íší€ì§ êŽëŠ¬ë¥Œ ìí Helm íêµ¬ê° í¬íšë©ëë€. Kubernetesë DevOpsì SRE 멎ì ìì ì€ìí ìì°ìŽ ë©ëë€.
íê·ž
ê³µì
êŽë š êž°ì¬

Kubernetes 멎ì ì벜 ê°ìŽë: Pod, Service, Deployment íµì¬ ì 늬
Kubernetes 멎ì ìì ì죌 ì¶ì ëë Pod, Service, Deploymentì íµì¬ ê°ë ì YAML ìì ì íšê» ììží ì 늬í©ëë€. 2026ë ìµì ížë ë륌 ë°ìí ì€ì ëë¹ ê°ìŽëì ëë€.

DevOps ìží°ë·° íì ì§ë¬ž: ìì ê°ìŽë 2026
CI/CD, Kubernetes, Docker, Terraform, SRE ì€ì²ì êŽí íì ì§ë¬žìŒë¡ DevOps ìží°ë·°ë¥Œ ì€ë¹íììì€. ììží ëµë³ í¬íš.

Docker: ê°ë°ìì íë¡ëì ê¹ì§
ì í늬ìŒìŽì 컚í ìŽëí륌 ìí ì벜í Docker ê°ìŽë. Dockerfile, Docker Compose, ë©í°ì€í ìŽì§ ë¹ë ë° íë¡ëì ë°°í¬ë¥Œ ì€ì©ì ìž ìì ì íšê» ì€ëª í©ëë€.