详情页标题前

阿里云容器服务ACK使用自定义镜像创建CGroup V2节点-云淘科技

详情页1

Kubernetes采用CGroup实现容器的资源隔离。CGroup V2统一了访问资源的路径,支持Pod级别的资源监控、网络重定向,同时在跨多资源协调上具备更强的资源隔离能力。本文介绍如何使用ack-image-builder工具构建CGroup V2的自定义镜像,并在ACK控制台使用自定义镜像创建CGroup V2节点

索引

  • 背景信息

  • 使用限制

  • 注意事项

  • 前提条件

  • 操作步骤

背景信息

CGroup

Kubernetes采用CGroup实现容器的资源隔离。CGroup分为V1和V2版本,V2版本提供了更一致的体验和更丰富的功能。主要特性如下。

  • 统一了访问资源的路径,各种资源处于统一路径下。

  • 新增PSI等功能特性。

  • 支持CGroup级别的eBPF挂载,可以实现Pod级别的资源监控、网络重定向等。

  • 在跨多资源协调上具备更强的资源隔离能力。

    • 统一地管理各种类型的内存分配,例如网络内存、Kernel内存等。

    • 支持异步资源变化的统计,例如通过Page Cache的Write-back统计实现异步IO的限制。

Kubernetes在V1.18中alpha支持CGroup V2,在V1.22中beta支持CGroup V2,在V1.25中GA支持CGroup V2。具体信息,请参见About cgroup v2。

ack-image-builder

ack-image-builder是阿里云推出的一款镜像构建工具,旨在通过简易的方式自动化构建镜像。利用ack-image-builder可以构建出CGroup V2的系统镜像,方便您在ACK集群中添加CGroup V2的节点。关于ack-image-builder,请参见ack-image-builder。

ack-image-builder基于开源工具HashiCorp Packer开发,HashiCorp Packer提供默认配置模板和校验脚本。关于HashiCorp Packer,请参见HashiCorp Packer。

使用限制

限制项

说明

操作系统

目前仅Alibaba Cloud Linux 3支持CGroup V2。所以仅支持使用Alibaba Cloud Linux 3作为基础镜像来构建支持CGroup V2的自定义镜像。

运行时

仅支持Containerd运行时。

Kubernetes

Kubernetes版本大于等于V1.24。

应用或组件

如果集群上运行的应用或者组件依赖于CGroup,请确保它们与CGroup V2兼容。

  • 一般监控类的组件依赖CGroup,需要确保它们与CGroup V2兼容。

  • 使用ack-koordinator来控制Pod资源,需确保它的版本在V1.1.0以上,以便兼容CGroup V2。关于ack-koordinator(原ack-slo-manager),请参见ack-koordinator(ack-slo-manager)。

注意事项

如果使用Java的应用,建议采用JDK 11.0.16或者JDK 15之后的版本,以便与CGroup V2兼容。更多信息,请参见JDK-8230305。

前提条件

已前往配额平台申请使用自定义镜像。

操作步骤

使用ack-image-builder创建Kubernetes集群自定义节点镜像的步骤如下。

阿里云容器服务ACK使用自定义镜像创建CGroup V2节点-云淘科技

  1. 安装Packer。

    1. 单击下载页面,选择操作系统对应的软件版本并安装Packer。关于安装Packer,请参见安装文档。

    2. 执行如下命令,查看Packer版本信息。

      packer version

      预期输出:

      Packer v1.*.*

      表示Packer已安装成功。

  2. 执行如下命令,下载CGroup V2的配置模板。

    git clone https://github.com/AliyunContainerService/ack-image-builder.git
    cd ack-image-builder
  3. 构建CGroup V2的节点自定义镜像。

    1. 执行如下命令,导入AccessKey信息用于创建构建镜像过程中的临时资源。

      export ALICLOUD_ACCESS_KEY=XXXXXX
      export ALICLOUD_SECRET_KEY=XXXXXX
    2. 执行如下命令,制作自定义镜像。

      packer build  -var cgroup_mode=CGROUP_MODE_V2 examples/ack-aliyunlinux3.json

      其中cgroup_mode的参数为镜像采用的CGroup模式,默认为CGROUP_MODE_V1。此处指定为CGROUP_MODE_V2,构建出的自定义镜像采用CGroup V2的CGroup模式。

      展开查看预期输出

      salicloud-ecs output will be in this color.
      
      ==> alicloud-ecs: Prevalidating source region and copied regions...
      ==> alicloud-ecs: Prevalidating image name...
          alicloud-ecs: Found image ID: aliyun_3_x64_20G_alibase_20221102.vhd
      ==> alicloud-ecs: Creating temporary keypair: xxxxxx
      ==> alicloud-ecs: Creating vpc...
          alicloud-ecs: Created vpc: xxxxxx
      ==> alicloud-ecs: Creating vswitch...
          alicloud-ecs: Created vswitch: xxxxxx
      ==> alicloud-ecs: Creating security group...
          alicloud-ecs: Created security group: xxxxxx
      ==> alicloud-ecs: Creating instance...
          alicloud-ecs: Created instance: xxxxxx
      ==> alicloud-ecs: Allocating eip...
          alicloud-ecs: Allocated eip: xxxxxx
          alicloud-ecs: Attach keypair xxxxxx to instance: xxxxxx
      ==> alicloud-ecs: Starting instance: xxxxxx
      ==> alicloud-ecs: Using ssh communicator to connect: xx.xx.xx.xx
      ==> alicloud-ecs: Waiting for SSH to become available...
      ==> alicloud-ecs: Connected to SSH!
      ......
      ==> alicloud-ecs: Provisioning with shell script: scripts/set-cgroupv2.sh
          alicloud-ecs: CGROUP_MODE_V2
          alicloud-ecs: set cgroup mode to CGROUP_MODE_V2
      ......
      ==> alicloud-ecs: Stopping instance: xxxxxx
      ==> alicloud-ecs: Waiting instance stopped: xxxxxx
      ==> alicloud-ecs: Creating image: test_image1564110199
          alicloud-ecs: Detach keypair xxxxxx from instance: xxxxxxx
      ==> alicloud-ecs: Cleaning up 'EIP'
      ==> alicloud-ecs: Cleaning up 'instance'
      ==> alicloud-ecs: Cleaning up 'security group'
      ==> alicloud-ecs: Cleaning up 'vSwitch'
      ==> alicloud-ecs: Cleaning up 'VPC'
      ==> alicloud-ecs: Deleting temporary keypair...
      Build 'alicloud-ecs' finished.
      
      ==> Builds finished. The artifacts of successful builds are:
      --> alicloud-ecs: Alicloud images were created:
      
      cn-hangzhou: m-xxxxxxxxxxxxxxxxx

      其中scripts/set-cgroupv2.sh为设置CGroup版本,m-xxxxxxxxxxxxxxxxx为自定义镜像ID。

  4. 采用CGroup V2镜像创建集群。

    下面以创建ACK Pro版集群为例进行说明。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 在集群列表页面中,单击右上角创建集群

    3. ACK托管版页签下,配置使用自定义镜像创建集群的参数。

      以下仅介绍重点参数的配置方法。其他参数的配置,请参见创建Kubernetes托管版集群。

      1. 完成集群配置后,单击下一步:节点池配置

      2. 节点池配置向导页面,单击显示高级选项。单击自定义镜像后面的选择

      3. 选择自定义镜像页面,选择目标镜像,然后单击使用

      4. 完成集群的其他配置。

    4. 配置完成后,单击创建集群

      待集群创建完成后,该集群就使用了自定义镜像,后续的节点池扩容等均会使用该镜像。

  5. 登录集群节点,执行如下命令查看CGroup类型。验证集群中的节点是否采用了CGroup V2。

    df -T /sys/fs/cgroup

    预期结果:

    Filesystem     Type    1K-blocks  Used Available Use% Mounted on
    cgroup2        cgroup2         0     0         0    - /sys/fs/cgroup

    表示集群中的节点采用了CGroup V2。

CGroup V2常用使用场景

使用CGroup V2限制容器IO速度

“CGroup V1″对异步的”blockio”统计不准确,导致容器的IO的统计和限制通常大大小于实际应用IO的量。

而在”CGroup V2″中会同时将这部分异步的IO统计到正确容器中,所以我们可以采用”CGroup V2″来限制容器的IO。

限制方式:

通过将对应的磁盘的io限制写入到容器的”CGroupV2″的”io.max”限制文件中达到限制容器IO的效果。

详细配置内容参考链接。

示例:

在容器启动时,我们对容器的”CGroupV2″做IO的限制,随后启动”dd”命令来验证限制后整体io被控制在限制的带宽值:

apiVersion: v1
kind: Pod
metadata:
  name: write-file-pod
spec:
  restartPolicy: Never
  containers:
    - name: dd-container
      image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
      command:
      - bash
      - -c
      - "yum install -y sysstat; \ 
         echo '253:0 wbps=10485760' > /sys/fs/cgroup$(cat /proc/1/cgroup | awk -F ':' '{print $3}')/io.max; \
         dd if=/dev/zero of=/writefile bs=100M count=10 & iostat -dh 1 30;"
      securityContext:
        privileged: true
# 其中 "echo '253:0 wbps=10485760' > /sys/fs/cgroup/.../io.max"为io限制配置
# "253:0" 为磁盘的设备id,可以根据实际环境中写入的磁盘设备调整
# "wbps"  是磁盘写入带宽限制, 10485760=10MB/s

将如上Pod部署到集群中后,查看Pod日志可以看到磁盘的IO被限制到配置的10MB/s。

# kubectl logs write-file-pod -f  
....
      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
    91.00         0.0k        10.8M       0.0k      10.8M vda

      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
    88.00         0.0k         9.6M       0.0k       9.6M vda

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/170960.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 腾讯云CVM服务器取消共享自定义镜像

    操作场景 本文档指导用户取消共享自定义镜像。用户可以随时终止共享给其他人镜像的共享状态,从而决定不再共享给某个其他用户。此操作不会影响其他用户已经使用这个共享镜像创建的实例,但其他用户无法再查看此镜像,也无法使用此镜像创建更多实例。 操作步骤 通过控制台取消共享通过 API 取消共享1. 登录云服务器控制台,选择左侧导航栏中的 镜像。2. 选择自定义镜像页签…

    2023年12月9日
  • 阿里云ECS云服务器删除自定义镜像-云淘科技

    如果您不再需要某个自定义镜像,可以将其删除。 注意事项 删除自定义镜像时,请您注意以下事项。 类型 注意事项 删除自定义镜像 以下几种情况不允许删除镜像: 该镜像正在导入。您可以在任务管理界面取消导入任务。更多信息,请参见导入自定义镜像。 该镜像正在导出。您可以在任务管理界面取消导出任务。更多信息,请参见导出自定义镜像。 镜像删除后: 不能再使用该镜像创建实…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云ECS云服务器安装virtio驱动-云淘科技

    自定义镜像的操作系统内核需支持virtio驱动,镜像才能被导入阿里云云平台,正常启动云服务器。制作或导入自定义镜像时,请确保自定义镜像已安装virtio驱动且已将virtio驱动添加到临时文件系统,否则请手动操作。 您可以按照以下步骤,检查当前操作系统内核是否支持virtio驱动,并执行相关操作。 检查服务器内核是否支持virtio驱动。 根据检查结果,选择…

    2023年12月9日
  • 阿里云ECS云服务器使用自定义镜像创建ECS实例-云淘科技

    本地镜像文件导入成功后,即成为ECS的自定义镜像。您可以使用该自定义镜像创建具有相同操作系统、应用程序和数据的ECS实例,以保障您云上业务的运维效率。 操作步骤 登录ECS管理控制台。 在左侧导航栏,选择实例与镜像 > 镜像。 在页面左侧顶部,选择目标资源所在的地域。 在镜像页面,选择自定义镜像页签。 找到已导入的自定义镜像,在操作列中,单击创建实例。…

    阿里云服务器 2023年12月9日
  • 阿里云ECS云服务器使用实例创建自定义镜像-云淘科技

    创建实例后,您可以根据业务需要自定义实例(如安装软件、部署应用环境等),并为更新后的实例创建自定义镜像。使用该镜像创建的新实例,会包含您已配置的自定义项,省去您重复自定义实例的时间。 前提条件 已创建ECS实例。具体操作,请参见自定义购买实例。 已删除实例中的敏感数据,避免数据安全隐患。 Linux实例创建自定义镜像前,请做下列检查: 检查实例的网络配置。如…

    阿里云服务器 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。