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 验证流量分发
相关推荐
数据知道2 分钟前
云原生MongoDB:容器化部署与Kubernetes集成详细步骤
mongodb·云原生·kubernetes
无级程序员9 分钟前
k8s v1.35配置gateway, istio通过metalb vip访问
kubernetes·gateway·istio
ai产品老杨17 分钟前
跨越指令集鸿沟:基于K8s编排与Docker多架构镜像的GB28181/RTSP异构AI视频底座构建
docker·架构·kubernetes
文静小土豆20 分钟前
Docker 网络配置指南:Bridge、Host、None、Container 全攻略
网络·docker·容器
青木96010 小时前
封装成开箱即用的docker
docker·容器
还在忙碌的吴小二10 小时前
k8s是啥?
云原生·容器·kubernetes
爱丽_11 小时前
Docker 从原理到项目落地(镜像 / 容器 / 网络 / 卷 / Dockerfile)
网络·docker·容器
zhen2411 小时前
K8s Service
云原生·容器·kubernetes
sbjdhjd13 小时前
RHCE | Web 服务器与 Nginx 全栈详解
linux·nginx·http·云原生·oracle·架构·web
我爱学习好爱好爱13 小时前
Kubernetes 1.29集群上部署Java网站项目
java·容器·kubernetes