题目
如何创建一个简单的Nginx Deployment并暴露服务?
信息
- 类型:问答
- 难度:⭐
考点
Deployment基本概念,YAML文件编写,kubectl命令使用,Service类型选择
快速回答
创建Nginx Deployment并暴露服务的步骤如下:
- 编写Deployment YAML文件定义副本数和容器镜像
- 使用
kubectl apply创建Deployment - 通过Service YAML或
kubectl expose创建ClusterIP服务 - 验证Pod运行状态和服务端点
原理说明
Deployment是Kubernetes中管理Pod副本的核心对象,它确保指定数量的Pod副本持续运行。Service为Pod提供稳定的网络端点,ClusterIP是默认服务类型,提供集群内部访问。
操作步骤与代码示例
1. 创建Deployment
创建nginx-deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80应用配置:kubectl apply -f nginx-deployment.yaml
2. 创建Service
方法1:YAML文件(nginx-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80方法2:kubectl命令kubectl expose deployment nginx-deployment --port=80
3. 验证资源
- 检查Pod:
kubectl get pods -l app=nginx - 检查Service:
kubectl get svc nginx-service - 访问测试:
kubectl exec -it [POD_NAME] -- curl http://nginx-service
最佳实践
- 标签选择器:确保Deployment和Service使用相同的标签匹配规则
- 镜像版本:始终指定具体镜像版本而非
latest - 资源限制:生产环境应添加
resources.requests/limits - 滚动更新:Deployment默认支持滚动更新策略
常见错误
- 标签不匹配:Service的selector与Pod标签不一致导致无端点
- 端口错误:targetPort与容器暴露端口不匹配
- 镜像拉取失败:使用私有镜像未配置imagePullSecret
- 权限不足:未给ServiceAccount绑定合适RBAC权限
扩展知识
- 服务类型对比:
- ClusterIP:集群内部访问(默认)
- NodePort:通过节点端口暴露
- LoadBalancer:云厂商负载均衡器
- 探针配置:添加
livenessProbe和readinessProbe确保应用健康 - HPA:通过HorizontalPodAutoscaler实现自动扩缩容