Kubernetes基础入门4 应用的扩展与收缩

Kubernetes应用的扩展与收缩

📋 概述

在Kubernetes中,您可以通过调整Deployment中的副本数量来轻松扩展应用程序实例。本文将向您展示如何手动扩展应用程序实例,并使用负载均衡器将流量分发到所有Pod。

🔧 先决条件

在开始之前,请确保:

  • 已完成之前教程中的步骤,创建了kubernetes-bootcamp Deployment

  • 已创建一个类型为LoadBalancer的服务(如果没有,请运行以下命令):

    复制代码
    kubectl expose deployment/kubernetes-bootcamp --type="LoadBalancer" --port 8080

📊 扩展工作原理

核心概念

  • 副本(Replicas):在Deployment中运行的应用程序实例数量

  • 自动扩缩:Kubernetes还支持Pod自动扩缩,但本教程仅涵盖手动扩缩

  • 负载均衡:Service会自动将流量均匀分发到所有可用的Pod

  • 端点监控:Service持续监控Pod健康状态,确保流量仅发送到可用的Pod

扩展优势

  • 处理流量增加:通过增加实例数量来满足用户需求

  • 高可用性:多个实例确保部分故障不会影响整体服务

  • 无缝更新:运行多个实例后,可以进行滚动更新而无需停机

🚀 扩展应用实例

1. 查看当前Deployment状态

复制代码
kubectl get deployments

输出示例:

复制代码
ccc@cccs-MBP ~ % kubectl get deployments

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           168m
ccc@cccs-MBP ~ % 

列说明:

  • READY:当前副本数/期望副本数

  • UP-TO-DATE:已更新到期望状态的副本数

  • AVAILABLE:用户可用的副本数

  • AGE:应用运行时长

2. 查看ReplicaSet

复制代码
kubectl get rs

ReplicaSet名称格式为:[DEPLOYMENT-NAME]-[RANDOM-STRING]

ccc@cccs-MBP ~ % kubectl get rs

NAME DESIRED CURRENT READY AGE
kubernetes-bootcamp-75c5d958ff 1 1 1 170m
ccc@cccs-MBP ~ %

3. 扩展到4个副本

复制代码
kubectl scale deployments/kubernetes-bootcamp --replicas=4

ccc@cccs-MBP ~ % kubectl scale deployments/kubernetes-bootcamp --replicas=4

deployment.apps/kubernetes-bootcamp scaled

ccc@cccs-MBP ~ %

4. 验证扩展结果

复制代码
kubectl get deployments
kubectl get pods -o wide
复制代码
ccc@cccs-MBP ~ % kubectl get deployments

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           171m
ccc@cccs-MBP ~ % kubectl get pods -o wide

NAME                                   READY   STATUS    RESTARTS   AGE    IP          NODE             NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-75c5d958ff-8jz9t   1/1     Running   0          102s   10.1.0.20   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-flfdd   1/1     Running   0          172m   10.1.0.17   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-rzfjt   1/1     Running   0          103s   10.1.0.19   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-wzbdr   1/1     Running   0          102s   10.1.0.18   docker-desktop   <none>           <none>
ccc@cccs-MBP ~ % 

现在应该有4个Pod运行,每个都有不同的IP地址。

5. 查看详细事件

复制代码
kubectl describe deployments/kubernetes-bootcamp
复制代码
ccc@cccs-MBP ~ % kubectl describe deployments/kubernetes-bootcamp

Name:                   kubernetes-bootcamp
Namespace:              default
CreationTimestamp:      Fri, 30 Jan 2026 09:18:24 +0800
Labels:                 app=kubernetes-bootcamp
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=kubernetes-bootcamp
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=kubernetes-bootcamp
  Containers:
   kubernetes-bootcamp:
    Image:        gcr.io/google-samples/kubernetes-bootcamp:v1
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   kubernetes-bootcamp-75c5d958ff (4/4 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m46s  deployment-controller  Scaled up replica set kubernetes-bootcamp-75c5d958ff to 4 from 1
ccc@cccs-MBP ~ %

查看输出中显示的副本数量变化。

⚖️ 负载均衡验证

1. 获取服务信息

复制代码
kubectl describe services/kubernetes-bootcamp
复制代码
ccc@cccs-MBP ~ % kubectl describe services/kubernetes-bootcamp

Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.98.179.76
IPs:                      10.98.179.76
LoadBalancer Ingress:     localhost
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31450/TCP
Endpoints:                10.1.0.17:8080,10.1.0.18:8080,10.1.0.19:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
ccc@cccs-MBP ~ %

2. 设置环境变量

复制代码
export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo NODE_PORT=$NODE_PORT
复制代码
ccc@cccs-MBP ~ % export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo NODE_PORT=$NODE_PORT
NODE_PORT=31450
ccc@cccs-MBP ~ %

3. 测试负载均衡

多次运行以下命令:

复制代码
curl http://localhost:8080

每次请求会命中不同的Pod:

ccc@cccs-MBP ~ % curl http://localhost:8080

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-75c5d958ff-flfdd | v=1

ccc@cccs-MBP ~ % curl http://localhost:8080

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-75c5d958ff-8jz9t | v=1

ccc@cccs-MBP ~ % curl http://localhost:8080

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-75c5d958ff-rzfjt | v=1

ccc@cccs-MBP ~ % curl http://localhost:8080

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-75c5d958ff-flfdd | v=1

ccc@cccs-MBP ~ % curl http://localhost:8080

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-75c5d958ff-wzbdr | v=1

ccc@cccs-MBP ~ %

📉 缩减应用实例

1. 缩减到2个副本

复制代码
kubectl scale deployments/kubernetes-bootcamp --replicas=2

ccc@cccs-MBP ~ % kubectl scale deployments/kubernetes-bootcamp --replicas=2

deployment.apps/kubernetes-bootcamp scaled

2. 验证缩减结果

复制代码
kubectl get deployments
kubectl get pods -o wide
复制代码
ccc@cccs-MBP ~ % kubectl get deployments

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   2/2     2            2           179m
ccc@cccs-MBP ~ % kubectl get pods -o wide

NAME                                   READY   STATUS        RESTARTS   AGE     IP          NODE             NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-75c5d958ff-8jz9t   1/1     Terminating   0          8m56s   10.1.0.20   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-flfdd   1/1     Running       0          3h      10.1.0.17   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-rzfjt   1/1     Terminating   0          8m57s   10.1.0.19   docker-desktop   <none>           <none>
kubernetes-bootcamp-75c5d958ff-wzbdr   1/1     Running       0          8m56s   10.1.0.18   docker-desktop   <none>           <none>
ccc@cccs-MBP ~ %

确认Pod数量已减少到2个。

📈 扩展相关操作总结

操作 命令 说明
查看Deployment kubectl get deployments 查看所有部署状态
查看Pod详情 kubectl get pods -o wide 查看Pod详细信息
扩展副本数 kubectl scale deployments/[NAME] --replicas=[NUM] 增加或减少副本
查看事件 kubectl describe deployments/[NAME] 查看部署详细事件
测试负载均衡 curl http://$(minikube ip):$NODE_PORT 验证流量分发
相关推荐
Wpa.wk3 小时前
容器编排 - K8s - 配置文件参数说明和基础命令
经验分享·测试工具·docker·云原生·容器·kubernetes
掘根7 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
杭州杭州杭州7 小时前
Docker
运维·docker·容器
一体化运维管理平台7 小时前
容器监控难题破解:美信监控易全面支持K8s、Docker
云原生·容器·kubernetes
江畔何人初8 小时前
service发现
linux·运维·云原生
造夢先森8 小时前
Clawdbot(OpenClaw)安装部署教程
人工智能·微服务·云原生
qiubinwei8 小时前
kubeadm部署K8S集群(踩坑实录)
云原生·容器·kubernetes
牛奶咖啡138 小时前
Prometheus+Grafana构建云原生分布式监控系统(十三)_Prometheus数据模型及其PromQL
云原生·prometheus·prometheus数据类型·promql使用场景·promql表达式解析·promql数据类型·监控系统的方法论与指标
等什么君!9 小时前
Docker 数据卷:MySQL 数据同步实战
运维·docker·容器