k8s 的多副本 微服务
时间: 2025-07-12 10:50:03 浏览: 10
在 Kubernetes 中实现微服务的多副本部署,主要依赖于 **Deployment** 或 **ReplicaSet** 控制器来确保指定数量的 Pod 副本始终处于运行状态。这种机制不仅提高了服务的可用性,还支持负载均衡和弹性扩展。
### 配置 Deployment 实现多副本部署
通过定义 Deployment 的 `replicas` 字段,可以指定期望运行的 Pod 数量。例如,在 YAML 文件中配置如下内容:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mystarshipapp-deployment
spec:
replicas: 3 # 指定副本数量为3
selector:
matchLabels:
app: mystarshipapp
template:
metadata:
labels:
app: mystarshipapp
spec:
containers:
- name: mystarshipapp
image: mystarshipapp:latest
ports:
- containerPort: 80
```
该配置文件定义了一个名为 `mystarshipapp-deployment` 的 Deployment,它将确保始终有 3 个运行中的 Pod 副本 [^4]。
### 利用 ReplicaSet 管理副本
Deployment 内部通常使用 ReplicaSet 来管理 Pod 副本。ReplicaSet 会监控当前运行的 Pod 数量,并根据设定的 `replicas` 值自动调整。如果某个 Pod 出现故障或被终止,ReplicaSet 会立即启动新的 Pod 以维持预期的副本数。
### 服务发现与负载均衡
为了实现对多个副本的访问,需要结合 Service 资源进行配置。Service 提供了一个稳定的 IP 地址和 DNS 名称,并将请求分发到后端的多个 Pod 实例上。例如,以下是一个基于上述 Deployment 创建的 ClusterIP 类型的 Service:
```yaml
apiVersion: v1
kind: Service
metadata:
name: mystarshipapp-service
spec:
selector:
app: mystarshipapp
ports:
- protocol: TCP
port: 80
targetPort: 80
```
此 Service 将流量路由到带有标签 `app: mystarshipapp` 的所有 Pod 上,从而实现了基本的负载均衡能力 [^4]。
### 滚动更新与回滚
Kubernetes 支持滚动更新策略,可以在不停机的情况下逐步替换旧版本的 Pod。通过设置 `.spec.strategy.type` 字段为 `RollingUpdate` 并定义最大不可用副本数(`maxUnavailable`)和最大扩缩容超出副本数(`maxSurge`),可以控制更新过程中的行为:
```yaml
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
```
当新版本出现问题时,可以通过 `kubectl rollout undo` 命令快速回滚到之前的稳定版本。
### 弹性伸缩
除了静态配置副本数量外,还可以利用 HorizontalPodAutoscaler (HPA) 根据 CPU 使用率或其他自定义指标动态调整副本数。例如,以下命令可以根据平均 CPU 利用率自动扩展副本数量:
```bash
kubectl autoscale deployment mystarshipapp-deployment --cpu-percent=50 --min=2 --max=10
```
这条命令设置了最小副本数为 2,最大副本数为 10,并且当平均 CPU 使用率达到 50% 时触发自动扩展 [^4]。
---
阅读全文
相关推荐


















