题目
如何创建一个简单的Nginx Deployment并通过Service暴露访问?
信息
- 类型:问答
- 难度:⭐
考点
Deployment创建,Service暴露,端口映射
快速回答
实现步骤:
- 创建Deployment YAML文件定义Nginx容器
- 使用
kubectl apply部署应用 - 创建Service YAML文件定义NodePort类型服务
- 验证Pod运行状态和Service访问
原理说明
Deployment管理Pod副本的生命周期,确保指定数量的Pod运行。Service提供稳定的网络端点,通过标签选择器关联Pod,NodePort类型会在集群所有节点开放指定端口。
代码示例
1. 创建Deployment (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.14.2
ports:
- containerPort: 802. 创建Service (service.yaml)
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80 # Service端口
targetPort: 80 # 容器端口
nodePort: 30007 # 节点端口(可选)3. 执行命令
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# 验证
kubectl get pods -l app=nginx
kubectl get svc nginx-service最佳实践
- 使用
replicas: 2保证基本高可用 - 明确指定容器镜像版本(如
nginx:1.14.2)避免版本漂移 - 生产环境建议使用
ClusterIP配合Ingress代替NodePort
常见错误
- 标签不匹配:Service的selector必须与Pod标签一致
- 端口冲突:NodePort范围默认为30000-32767,超出会报错
- 镜像拉取失败:检查镜像名称拼写及仓库权限
扩展知识
- 服务发现:集群内可通过
nginx-service.default.svc.cluster.local域名访问 - 滚动更新:修改Deployment镜像版本会自动滚动升级
- 监控:使用
kubectl describe pod/nginx-pod查看异常事件