这扩展你的Kubernetes集群:理解水平扩展与垂直扩展

  • 一、前言
    • 1.1 什么是 Kubernetes
    • 1.2 扩展集群规模的必要性
  • 二、集群规模扩展概述
    • 2.1 水平扩展 vs 垂直扩展
    • 2.2 Kubernetes 中的水平扩展
    • 2.3 节点的添加和删除
  • 三、水平扩展实现方法
    • 3.1 使用 Deployment 扩展集群规模
      • 3.1.1 创建 Deployment
      • 3.1.2 手动缩放 Deployment
      • 3.1.3 自动缩放 Deployment
    • 3.2 扩展 StatefulSet
      • 3.2.1 创建 StatefulSet
      • 3.2.2 手动缩放 StatefulSet
      • 3.2.3 自动缩放 StatefulSet
  • 四、节点的添加和删除
    • 4.1 添加节点
      • 4.1.1 创建节点
      • 4.1.2 加入集群
    • 4.2 删除节点
      • 4.2.1 从集群中移除节点
      • 4.2.2 删除节点
  • 五、使用 Horizontal Pod Autoscaler 自动调整副本数
    • 5.1 什么是 Horizontal Pod Autoscaler
    • 5.2 如何创建 Horizontal Pod Autoscaler
  • 六、小结回顾

一、前言

1.1 什么是 Kubernetes

Kubernetes是一个用于管理容器化应用程序的开源平台。它提供了自动化部署、扩展和操作应用程序所需的资源,并对容器的运行状态进行监控和修复。Kubernetes 能够节省大量时间和精力,让开发人员能够专注于应用程序的开发和部署。

1.2 扩展集群规模的必要性

随着业务需求的增加,集群规模也需要不断扩展。集群规模的扩展可以提高应用程序的可靠性,同时也能够保障应用程序的性能和弹性。对于 Kubernetes 集群而言,应用程序的扩展通常是在节点层面进行的,通过添加更多的节点能够提高 Kubernetes 集群的处理能力。下面我们将会讨论 Kubernetes 中的集群规模扩展的方法。

二、集群规模扩展概述

2.1 水平扩展 vs 垂直扩展

集群规模的扩展可以通过水平扩展和垂直扩展两种方法来实现。水平扩展指的是在集群中添加更多的节点,以提高整个集群的处理能力。垂直扩展则是增加每个节点的处理能力,例如增加内存、CPU 等资源,以提高单个节点的处理能力。

在 Kubernetes 中,集群规模的扩展通常采用水平扩展的方法进行。因为 Kubernetes 的设计理念是将应用程序分布在多个节点上,通过水平扩展能够提高整个集群的处理能力,保证应用程序的高可用性和稳定性。

2.2 Kubernetes 中的水平扩展

# 声明Deployment对象,同时定义了ReplicaSet的副本数,默认为1
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1# 定义了Pod模板,每个Pod中运行一个nginx容器template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latest# 定义容器的资源限制resources:limits:cpu: "1"memory: "64Mi"requests:cpu: "0.5"memory: "32Mi"

在Kubernetes中,水平扩展的方法通常是通过添加或删除节点来实现的。启动新的Pod时,Kubernetes会自动将应用程序负载均衡到新Pod上,以提高群集的处理能力,从而实现水平扩展。

Kubernetes支持多种水平扩展方法,包括自动扩展。自动扩展能够通过Kubernetes的自动伸缩机制实现,根据所需资源量进行自适应调整,以实现自动化扩展和收缩。

# 声明HorizontalPodAutoscaler对象,用于自动调整Pod数量
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deployment# 定义水平扩展规则和阈值minReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputargetAverageUtilization: 50- type: Resourceresource:name: memorytargetAverageValue: 40Mi

2.3 节点的添加和删除

要向 Kubernetes 集群中添加节点,必须首先创建一个新的节点,并为其分配一个唯一的标识符,例如 IP 地址或主机名。然后,需要使用 Kubernetes API 将新节点添加到集群中,同时还需要为其定义一个节点配置文件,以确定节点的资源和其他属性。

同样地,当需要删除节点时,只需将其从 Kubernetes 集群中删除即可。在 Kubernetes 中,要删除节点,则需要执行相反的步骤,即首先需要删除节点的配置文件,然后再将其从集群中删除。

三、水平扩展实现方法

3.1 使用 Deployment 扩展集群规模

3.1.1 创建 Deployment

在 Kubernetes 中,使用 Deployment 对象可以很容易地扩展集群规模,并实现应用程序的高可用性。以下是创建 Deployment 的 YAML 文件示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app-deployment
spec:replicas: 3  # Pod 的副本数,可以根据需要进行修改selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: appimage: my-app:latestports:- containerPort: 8080

上述 YAML 内容定义了一个 Deployment 对象 my-app-deployment。这个 Deployment 对象的 spec 字段中定义了 Pod 的副本数,使用了 selector 标签选择器来指定要管理的 Pod,以及 Pod 的模板。

3.1.2 手动缩放 Deployment

可以手动更改 Deployment 的副本数,来扩展或缩小集群规模。以下是通过kubectl命令缩放 Deployment 的示例:

kubectl scale deployment my-app-deployment --replicas=5

在这个例子中,我们将 my-app-deployment Deployment 对象的副本数从 3 扩展到了 5。

3.1.3 自动缩放 Deployment

自动缩放可以根据 CPU、内存等指标的使用率自动扩展或缩小集群规模。Kubernetes 中的 自动水平扩展(HPA) 可以方便地实现自动缩放。以下是一个自动扩展 Deployment 的 YAML 文件示例:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: my-app-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-app-deploymentminReplicas: 3maxReplicas: 10targetCPUUtilizationPercentage: 50

上述 YAML 内容定义了一个自动扩展 Deployment 的 HorizontalPodAutoscaler 对象 my-app-hpa。它指定了要管理的 Deployment 对象的名称 my-app-deployment,以及自动扩展的最小和最大副本数。

3.2 扩展 StatefulSet

3.2.1 创建 StatefulSet

StatefulSet 和 Deployment 一样,也是 Kubernetes 提供的扩展集群规模的一种 object ,但是 StatefulSet 可以为 Pod 指定一个唯一的、持久的标识符。这就意味着,可以方便地管理有状态的应用程序,例如数据库或消息队列。

以下是创建 StatefulSet 的 YAML 文件示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:name: my-app-statefulset
spec:replicas: 3serviceName: my-app-serviceselector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: appimage: my-app:latestports:- containerPort: 8080

在上面的示例中,我们使用 StatefulSet 对象来创建一个具有唯一标识符的 Pod 集。与 Deployment 对象不同的是,StatefulSet 对象的 spec 字段中指定了 serviceName,这样就可以为 Pod 指定一个唯一的 DNS 主机名。

3.2.2 手动缩放 StatefulSet

和 Deployment 一样,StatefulSet 也可以手动扩展或缩小集群规模。以下是通过 kubectl 命令缩放 StatefulSet 的示例:

kubectl scale statefulset my-app-statefulset --replicas=5

在这个例子中,我们将 my-app-statefulset StatefulSet 对象的副本数从 3 扩展到了 5。

3.2.3 自动缩放 StatefulSet

与 Deployment 一样,StatefulSet 也可以通过自动扩展来实现弹性伸缩。可以使用 状态化应用程序的自动伸缩 (SAAS) 来自动扩展 StatefulSet。以下是一个自动扩展 StatefulSet 的 YAML 文件示例:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: my-app-statefulset-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: StatefulSetname: my-app-statefulsetminReplicas: 3maxReplicas: 10targetCPUUtilizationPercentage: 50

在这个示例中,我们使用了自动扩展 HorizontalPodAutoscaler 对象 my-app-statefulset-hpa,指定了要管理的 StatefulSet 对象的名称 my-app-statefulset,以及自动缩放的最小和最大副本数和 CPU 使用率的目标百分比。

四、节点的添加和删除

4.1 添加节点

在 Kubernetes 集群中添加节点可提高集群的容错性和可用性,同时也可以提高集群的扩展能力。

4.1.1 创建节点

在 Kubernetes 中,我们可以通过在物理机或者虚拟机上配置 Kubernetes 软件环境,并将其加入到集群中。节点上需要运行 kubelet、kube-proxy 等组件。以下是一个在节点上安装 Kubernetes 的示例脚本:

# 拉取 Kubernetes 的二进制文件并解压
wget https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl -O /usr/local/bin/kubectl
chmod +x /usr/local/bin/kubectl
curl -L -o kubeadm https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubeadm
chmod +x kubeadm
mv kubeadm /usr/local/bin/# 初始化 Kubernetes 节点
kubeadm init --pod-network-cidr=10.244.0.0/16

4.1.2 加入集群

在创建节点之后,需要将其加入到现有的 Kubernetes 集群中。可以使用 kubeadm 工具加入节点,将节点的加入操作分为两步。

在主节点上执行以下命令,获取加入节点的命令:

kubeadm token create --print-join-command

将输出的命令在节点上执行,将节点加入到集群中:

kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash>

4.2 删除节点

当节点出现故障或需要进行升级时,可能需要将其从集群中移除。

4.2.1 从集群中移除节点

从集群中移除节点可以使用以下 kubectl 命令:

kubectl drain <node-name> --ignore-daemonsets

这个命令会将节点上的 Pod 驱逐到其他节点,等待 Pod 迁移完成之后再将节点从集群中移除。

4.2.2 删除节点

当节点完全从集群中移除之后,即可执行以下 kubeadm 命令将节点删除:

kubeadm reset

五、使用 Horizontal Pod Autoscaler 自动调整副本数

Kubernetes 提供了 Horizontal Pod Autoscaler(HPA)来自动调整副本数,使得应用程序可以根据负载自动进行水平扩展。

5.1 什么是 Horizontal Pod Autoscaler

Horizontal Pod Autoscaler 是 Kubernetes 中的扩展对象,它可以自动扩展或缩减 Pod 的副本数,以保持 Pod 的 CPU 使用率、内存使用率等指标在一定范围内。

5.2 如何创建 Horizontal Pod Autoscaler

以下是使用 kubectl 命令创建 Horizontal Pod Autoscaler 的示例:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: my-app
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-appminReplicas: 2maxReplicas: 10targetCPUUtilizationPercentage: 50

在这个示例中,我们创建了一个名为 my-app 的 HorizontalPodAutoscaler 对象。这个对象指定了要自动扩展的 Deployment 对象的名称,以及自动扩展的最小和最大副本数和 CPU 使用率的目标百分比。可以使用以下命令将 Horizontal Pod Autoscaler 对象部署到 Kubernetes 集群中:

kubectl apply -f hpa.yaml

这样,我们就创建了一个可以根据负载自动调整副本数的 Horizontal Pod Autoscaler 对象。

六、小结回顾

Kubernetes是一个用于管理容器化应用程序的开源平台。当需求量增加时,扩展集群规模变得必要。本文将讨论集群规模扩展的概述,水平扩展和垂直扩展的区别,以及在Kubernetes中如何实现水平扩展和节点的添加和删除。

水平扩展和垂直扩展
水平扩展是通过增加与应用程序相关的数量来扩展系统规模。例如,在Kubernetes中,可以通过创建更多的Pod并将它们分配到现有节点上来实现水平扩展。通过水平扩展,可以提高集群的冗余程度和可用性。另一方面,垂直扩展是通过增加单个组件的大小或容量来增加系统的资源。例如,增加节点的处理器速度或内存大小。

水平扩展Kubernetes集群
在Kubernetes中,可以使用Deployment和StatefulSet来进行水平扩展。 Deployment是一种创建和管理Pod的抽象方式,StatefulSet用于管理有状态应用程序。使用Deployment进行水平扩展的步骤包括创建Deployment、手动缩放或自动缩放。

使用StatefulSet进行水平扩展的步骤包括创建StatefulSet以及手动或自动缩放。 添加和删除节点 可以通过两种方式添加节点:手动和自动。

手动添加节点包括创建节点并将其添加到集群中。自动添加节点可以设置为根据需求自动添加节点和配置自动扩展选项。

删除节点包括将其从集群中移除并删除节点。 可以使用Horizontal Pod Autoscaler进行自动缩放。它是一种控制器,根据CPU使用率或其他指标自动增加或减少Pod的数量。

综上,我们了解了在Kubernetes中如何进行集群规模的水平扩展、节点的添加和删除以及如何使用Horizontal Pod Autoscaler自动调整副本数。水平扩展能够提高集群的可用性和冗余程度,并能够自动调节副本数量以优化性能。节点的添加和删除可以扩展集群规模,并根据需求自动扩展选项。

扩展你的Kubernetes集群:理解水平扩展与垂直扩展相关推荐

  1. Airbnb 如何实现 Kubernetes 集群动态扩展

    运营 Airbnb 基础设施的一项重要工作是,确保我们的云开支随着需求自动增长和下降.我们的流量每天波动很大,为此,我们的云资源占用应该能够动态扩展. 为了实现这种扩展,Airbnb 利用了 Kube ...

  2. 部署Kubernetes集群(二进制 v1.18.8版)

    第一章 kubernetes 功能介绍 · kubernetes 从入门到实践 · 看云 二进制 部署Kubernetes集群 组件版本 组件 版本 二进制包下载地址 备注 centos 7.8.20 ...

  3. 安装Kubernetes集群

    目录 1.K8s是什么 2.架构 1.工作方式 2.组件架构 1.控制平面组件(Control Plane Components) 2.Node 组件 3.形象化理解各组件的意义 3.kubeadm创 ...

  4. 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

    目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...

  5. 容器技术---(二)kubernetes集群部署

    Kubernetes简介 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用:Kubernetes项目来源于Borg, ...

  6. 在阿里云上部署生产级别Kubernetes集群

    阿里云是国内非常受欢迎的基础云平台,随着Kubernetes的普及,越来越多的企业开始筹划在阿里云上部署自己的Kubernetes集群. 本文将结合实战中总结的经验,分析和归纳一套在阿里云上部署生产级 ...

  7. 如何专业化监控一个Kubernetes集群?

    简介:本文会介绍 Kubernetes 可观测性系统的构建,以及基于阿里云云产品实现 Kubernetes 可观测系统构建的最佳实践. 作者:佳旭 阿里云容器服务技术专家 引言 Kubernetes ...

  8. 使用FIT2CLOUD在青云QingCloud快速部署和管理Kubernetes集群

    一.Kubernetes概述 Kubernetes是Google一直在推进的容器调度和管理系统,是Google内部使用的容器管理系统Borg的开源版本.它可以实现对Docker容器的部署,配置,伸缩和 ...

  9. 从零到破万节点!支撑618大促背后的蚂蚁金服Kubernetes集群

    2019年天猫618大促,蚂蚁金服首次在大促中对调度系统和技术栈全面应用Kubernetes,突破了Kubernetes单集群万节点的规模,总节点数达到数十万个,这是世界最大规模的 Kubernete ...

最新文章

  1. P2P太假了,光有网站平台,连人都找不着了,更不用说网站大漏洞没人管,呵呵...
  2. 10个常见的Redis面试刁难问题--转
  3. 转载:每一个程序员要遵守的一些优秀编程风格
  4. python开发图形小程序_python小程序图画 python开发微信小程序
  5. 简述linux内核中,Linux内核中的文件描述符(一)——基础知识简介
  6. python21天打卡day3
  7. eclipse 输入提示插件_【STM32】搭建基于Eclipse平台的STM32调试环境
  8. 破解软件下载网站100个
  9. Creo 由方程创建曲线
  10. 电脑控制手机;电脑操作手机软件(Total Control)
  11. Overload 和 Override 的区别
  12. html代码中font是什么意思,HTML元素font标签的使用方法及作用
  13. STM8S103F3P6锁死问题及解锁
  14. java.lang.UnsupportedOperationException\r\n\tat java.sql.Date.toInstant(Date.java:304)
  15. poj2287田忌赛马
  16. 12个同父异母的孩子都有自闭症,简历造假的捐精者吸引了全球顶级专家
  17. 铁流:代码中的汉字,为什么能挡住CIA黑客
  18. yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1
  19. Interpretable Rl Summary
  20. 卷积神经网络以及经典网络模型的浅谈

热门文章

  1. 数论相关_最大公约数最小公倍数
  2. python之路--Day1
  3. 书写英文论文的方法总结
  4. 一分钟读懂:天使投资 vs. 风险投资 vs. 私募股权融资
  5. 青龙面板--整理能用脚本
  6. 指导软件测试一天200管吃饭两顿,北京来付30车费
  7. 踏万古江河,铸不朽人生
  8. Centos8 Nginx优化
  9. ov9712雄迈模组分析
  10. 雄迈IPC引领智能化时代潮流