侧边栏壁纸
博主头像
colo

欲买桂花同载酒

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

如何创建一个简单的Nginx Deployment并暴露服务?

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

题目

如何创建一个简单的Nginx Deployment并暴露服务?

信息

  • 类型:问答
  • 难度:⭐

考点

Deployment基本概念,YAML文件编写,kubectl命令使用,Service类型选择

快速回答

创建Nginx Deployment并暴露服务的步骤如下:

  1. 编写Deployment YAML文件定义副本数和容器镜像
  2. 使用kubectl apply创建Deployment
  3. 通过Service YAML或kubectl expose创建ClusterIP服务
  4. 验证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:云厂商负载均衡器
  • 探针配置:添加livenessProbereadinessProbe确保应用健康
  • HPA:通过HorizontalPodAutoscaler实现自动扩缩容