Kubernetes部署Nginx实战指南

准备环境

在开始之前,确保你已经有一个运行中的 ref="/tag/2020/" style="color:#C468A7;font-weight:bold;">Kubernetes 集群。可以用 minikube 在本地快速搭建一个测试环境,适合刚入门的朋友。打开终端,输入以下命令启动:

minikube start

如果你用的是云服务商提供的 K8s 服务(比如阿里云 ACK、腾讯云 TKE),那就直接连接你的集群即可。

部署 Nginx Pod

Kubernetes 中最基础的部署单位是 Pod。我们先来创建一个运行 Nginx 的 Pod。新建一个名为 nginx-pod.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80

保存后,在终端执行:

kubectl apply -f nginx-pod.yaml

稍等几秒,Pod 就会启动。通过下面命令查看状态:

kubectl get pods

看到 STATUS 显示为 Running,说明 Nginx 已经跑起来了。

暴露服务访问

Pod 跑起来了,但默认只能在集群内部访问。为了让外部能打开网页,需要创建一个 Service。新建 nginx-service.yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

这里用了 NodePort 类型,意思是把服务映射到节点的一个高端口上(比如 30080),方便从外部访问。应用配置:

kubectl apply -f nginx-service.yaml

然后查看服务信息:

kubectl get services

找到 nginx-service 对应的 PORT(S) 字段,格式通常是 80:30080,表示外部通过 30080 端口访问。

访问 Nginx 页面

如果是在本地用 minikube,运行下面命令获取访问地址:

minikube service nginx-service --url

它会返回一个类似 http://192.168.49.2:30080 的地址。复制到浏览器打开,看到“Welcome to nginx!”就成功了。

如果是云服务器集群,记得检查安全组是否放行了 NodePort 的端口范围(通常是 30000-32767)。

用 Deployment 管理更稳妥

直接起 Pod 不够稳定,一旦挂掉不会自动重启。推荐使用 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

这个配置会维持两个 Nginx 实例运行。应用后:

kubectl apply -f nginx-deployment.yaml

再配合前面的 Service,就能实现高可用的基础 web 服务。

查看日志排查问题

页面打不开?别急,看看日志。假设 Pod 名字是 nginx-deployment-5b96d7c89d-2xklp,执行:

kubectl logs nginx-deployment-5b96d7c89d-2xklp

如果有错误信息,比如镜像拉取失败或端口冲突,都会在这里显示。也可以加上 --follow 实时跟踪日志输出。

更新和滚动升级

想换版本也不难。比如把镜像改成 nginx:1.26,修改 deployment 文件后再次运行 kubectl apply,Kubernetes 会自动逐个替换 Pod,保证服务不中断。

你可以用下面命令观察升级过程:

kubectl rollout status deployment/nginx-deployment

这种平滑更新对网站维护特别友好,用户几乎感觉不到变化。