侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

如何创建一个简单的Nginx Deployment并通过Service暴露访问?

2025-12-12 / 0 评论 / 4 阅读

题目

如何创建一个简单的Nginx Deployment并通过Service暴露访问?

信息

  • 类型:问答
  • 难度:⭐

考点

Deployment创建,Service暴露,端口映射

快速回答

实现步骤:

  1. 创建Deployment YAML文件定义Nginx容器
  2. 使用kubectl apply部署应用
  3. 创建Service YAML文件定义NodePort类型服务
  4. 验证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: 80

2. 创建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查看异常事件