以下是一个完整的例子,展示了如何使用Kubernetes部署一个简单的Web应用程序。这个例子包括一个Deployment和一个Service。

首先,创建一个名为webapp-deployment.yaml的Deployment配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: nginx:latest
        ports:
        - containerPort: 80

这个Deployment配置将创建一个名为webapp-deployment的Deployment,它包含两个副本的Pods,每个Pod都运行一个Nginx容器,监听80端口。

接下来,创建一个名为webapp-service.yaml的Service配置文件:

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

这个Service配置将创建一个名为webapp-service的Service,它将外部请求的80端口转发到标签为app: webapp的Pods的80端口。type: LoadBalancer指示云提供商为Service提供一个外部可访问的负载均衡器。

现在,使用kubectl命令来创建这些资源:

kubectl apply -f webapp-deployment.yaml
kubectl apply -f webapp-service.yaml

检查Deployment和Pods的状态:

kubectl get deployment webapp-deployment
kubectl get pods -l app=webapp

检查Service的状态,并获取外部访问的IP地址(如果是LoadBalancer类型):

kubectl get service webapp-service

如果一切正常,你应该能够看到Pods正在运行,Service已经分配了一个外部IP地址。你可以通过浏览器访问这个IP地址来查看Nginx的默认欢迎页面。

如果你需要更新应用程序,比如使用一个新版本的Nginx镜像,你只需要更新webapp-deployment.yaml文件中的镜像标签,并重新应用配置:

containers:
- name: webapp
  image: nginx:1.19.0 # 更新为新的镜像版本
  ports:
  - containerPort: 80

然后运行:

kubectl apply -f webapp-deployment.yaml

Kubernetes将执行滚动更新,逐步替换旧的Pods,而不会中断服务。

请记住,这个例子假设你已经有一个Kubernetes集群在运行,并且你的kubectl配置正确。如果你使用的是云服务提供商的Kubernetes服务,LoadBalancer类型的Service将自动为你创建一个外部负载均衡器。如果你在本地或没有负载均衡器的环境中运行,你可能需要使用NodePort或其他方法来暴露你的服务。