Kubernetes已经成为容器编排的事实标准。本文将带你从零开始,用最小必要知识完成第一个K8s应用的部署。
核心概念速览
Kubernetes的架构围绕几个核心资源构建:
- Pod:最小调度单元,包含一个或多个容器
- Deployment:管理Pod的副本数和滚动更新
- Service:为Pod提供稳定的网络访问入口
- Namespace:逻辑隔离不同环境(如dev、staging、prod)
理解这四个概念,足以应对80%的日常运维场景。
部署第一个应用
假设你有一个Docker镜像myapp:v1,以下是完整的Deployment和Service配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: app
image: myapp:v1
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
resources字段至关重要。requests告诉调度器Pod需要什么资源,limits则是硬上限。不设置资源限制会导致节点资源耗尽时Pod被无差别驱逐。
常用kubectl命令
# 应用配置
kubectl apply -f deployment.yaml
# 查看Pod状态
kubectl get pods -o wide
# 查看Pod日志
kubectl logs -f deployment/myapp
# 进入容器调试
kubectl exec -it pod/myapp-xxx -- /bin/sh
# 扩缩容
kubectl scale deployment myapp --replicas=5
# 滚动更新镜像
kubectl set image deployment/myapp app=myapp:v2
健康检查配置
生产环境必须配置存活探针(liveness)和就绪探针(readiness):
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 3
- livenessProbe:检测应用是否存活,失败则重启容器
- readinessProbe:检测应用是否准备好接收流量,失败则从Service端点移除
总结
Kubernetes的学习曲线确实陡峭,但掌握Pod、Deployment、Service和Namespace四个核心概念后,你已经可以完成大部分日常部署工作。建议先在本地用minikube或kind练习,再逐步迁移到生产集群。
本文是博客完整版的精简版,更多技术细节和代码示例请查看完整版:
阅读原文
Top comments (0)