基于容器服务 ACK 发行版打造 CNStack 社区版

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 本文将介绍如何使用 ACK Distro 作为基础镜像打造 CNStack 社区版以及CNStack 社区版中的容器服务 ACK 敏捷版产品如何帮助用户更好的使用容器平台能力。

作者:临石


CNStack 社区版(CNStack Community Edition, CNStack CE)是阿里云云原生 Stack(CNStack)产品家族中的一员。CNStack 社区版可以免费下载使用,支持在有限的资源上进行部署和运行。CNStack 社区版使用 sealer 进行打包和交付,采用容器服务 ACK 发行版(ACK Distro)作为 Kubernetes 基础。


本文将介绍:(1)如何使用 ACK Distro 作为基础镜像打造 CNStack 社区版。您可以将这个过程看做是以 ACK Distro 为基础镜像,利用 sealer 打包和交付应用的一个例子(2)CNStack 社区版中的容器服务 ACK 敏捷版产品如何帮助用户更好的使用容器平台能力


容器服务 ACK 敏捷版是第一个集成到 CNStack 社区版的阿里云云原生产品


基于 ACK Distro 构建 CNStack 社区版


当前 CNStack 社区版发布的内容包括了“容器服务 ACK 敏捷版”部分,使用 sealer 的集群镜像技术对产品进行打包和交付。ACK Distro 和容器服务 ACK 敏捷版组成的 CNStack 社区版集群镜像结构如下。


1.png


基于 ACK Distro 制作 CNStack 社区版集群镜像


CNStack 社区版采用 ACK Distro 作为 Kubernetes 基础镜像,通过 sealer 打包新的集群镜像。


关于集群镜像概念,请参考文末 sealer 官网


社区版集群通过集群镜像文件 Kubefile 完成了以下工作:

  • 在部署 ACK Distro 前对环境进行必要的配置(如创建 CNStack 社区版应用所需的本地目录)
  • 声明和部署 CNStack 社区版的组件和配置
  • 对部署完成的 ACK Distro 集群进行配置


Kubefile 内容如下:


# 采用ack-distro:v1.20.4-ack-2作为基础镜像
FROM ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/ackdistro:v1.20.4-ack-2
COPY imageList manifests
COPY kubeadm-cluster-config.yaml.tmpl etc
# 部署/清理阶段的prehook和posthook
COPY plugin_localpv.yaml plugin
COPY plugin_iptables.yaml plugin
COPY plugin_clean.yaml plugin
# 组件的chart和配置文件
COPY ../component/charts/localpv charts
COPY ../component/charts/aecp-installer-operator charts
COPY ../component/charts/aecp charts
COPY ../component/charts/cluster-addon-configuration charts
COPY ../component/clusterconfig.yaml manifests
# 部署组件
CMD helm install localpv charts/localpv
CMD helm install aecp-installer-operator charts/aecp-installer-operator
CMD helm install aecp charts/aecp
# 基于ACK-Distro部署的集群,针对ACK敏捷版进行配置
CMD kubectl create ns cluster-local
CMD kubectl -n kube-system scale deploy hybridnet-webhook --replicas=1
CMD kubectl -n kube-system scale deploy hybridnet-manager --replicas=1
CMD kubectl taint nodes $(hostname | tr A-Z a-z) node-role.kubernetes.io/master=:NoSchedule-
CMD kubectl label nodes $(hostname | tr A-Z a-z) lb=nginx
CMD kubectl label nodes $(hostname | tr A-Z a-z) addon-local-repo=true
# 等待组件ready。视机器性能不同,等待时间有差别,在我们的测试场景中,约3min左右结束
CMD for i in `seq 0 1 2000`;do if kubectl get addonconfiguration 2> /dev/null;then helm install cluster-addon-configuration charts/cluster-addon-configuration && break;fi; echo "wait CRD ready ... $i out of 2000 tries" && sleep 1; done
CMD kubectl apply -f manifests/clusterconfig.yaml
# 基础功能需要适配无数据盘的场景,因此没有使用本地存储池功能 opne-local。在后面的Clusterfile部署方式中,可以再次开启
CMD helm uninstall -n kube-system open-local


这里介绍一下 CNStack 社区版在基于 ACK Distro 构建集群镜像时使用的几个主要功能:

  • plugin 插件
  • 通过 helm 部署组件
  • 对集群进行配置,例如 label node 等操作


集群部署开始前、部署结束后、清理后执行的 hook 可以通过 plugin 插件实现。以 plugin_localpv.yaml 为例,通过.spec.action: PreInit 声明上述动作是在集群部署开始前执行,动作内容描述在 data 中。data 描述中所创建的目录是为 CNStack 社区版不使用额外数据盘场景下使用的,供应用容器挂载 hostpath 的 volume 使用。注意这些目录仅会在用户没有使用 open-local 组件时使用,如果使用 open-local ,CNStack 社区版的组件将使用 open-local 提供的动态存储资源池中的本地存储(后续章节会介绍如何使用)。plugin_localpv.yaml 内容如下:


apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
  name: prepare_local_dir # Specify this plugin name,will dump in $rootfs/plugin dir.
spec:
  type: SHELL
  action: PreInit # PreInit PreInstall PostInstall
  data: |
    rm -rf /var/lib/cnstackce
    rm -rf /opt/aecp
    vgremove open-local-pool-0 --force || echo "No vg: open-local-pool-0 found. OK"
    mkdir -p /var/lib/cnstackce/data/storage-loki-0
    mkdir -p /var/lib/cnstackce/data/addon-package-standard-pv
    mkdir -p /var/lib/cnstackce/data/caas-api-pv
    mkdir -p /var/lib/cnstackce/data/caas-core-pv
    mkdir -p /var/lib/cnstackce/data/caas-db-caas-db-0
    mkdir -p /var/lib/cnstackce/data/grafana-pv
    mkdir -p /var/lib/cnstackce/data/prometheus-k8s-db-prometheus-k8s-0
    touch /var/lib/cnstackce/data/checker


容器服务 ACK 敏捷版的所有组件都是以 helm 形式部署的,在 Kubefile 中仅需要体现为(1)将 helm chart 拷贝到 charts 目录;(2)在部署时执行 helm install。由 ecp-installer 根据 manifests/clusterconfig.yaml 中声明的参数自动部署其它容器服务 ACK 敏捷版组件。


最后,在 Kubefile 中通过 CMD 声明在集群部署完成后对集群进行一些配置,例如节点打标(帮助容器服务 ACK 敏捷版选择 LB 节点和 ingress 入口)、去掉污点等操作。


CNStack 社区版的 build 工程目录如下,整个目录可在文末获取。


[root@cnstackcebuilder]~# tree charts -L 3
charts
├── build-cnstack-ce
│   ├── build.sh
│   ├── imageList
│   ├── kubeadm-cluster-config.yaml.tmpl
│   ├── Kubefile
│   ├── plugin_clean.yaml
│   ├── plugin_iptables.yaml
│   ├── plugin_localpv.yaml
│   └── readme.md
└── component
    ├── charts
    │   ├── aecp
    │   ├── aecp-installer-operator
    │   ├── cluster-addon-configuration
    │   └── localpv
    └── clusterconfig.yaml


charts/build-cnstack-ce 下直接运行 bash build.sh test001(test001是 tag 名称),sealer 工具将自动被下载和打包集群镜像,可以通过 sealer images 查询构建结果。


通过 Clusterfile 进行灵活的配置


前一个章节介绍生成的集群镜像,可以在单机版环境上直接一键部署:


# 获取sealer工具
wget -c "http://sealer.oss-cn-beijing.aliyuncs.com/sealers/sealer-v0.5.2-linux-amd64.tar.gz" && tar -xvf sealer-v0.5.2-linux-amd64.tar.gz -C /usr/bin
sealer run registry.cn-qingdao.aliyuncs.com/sealer-apps/cnstack-ce:1.1.0 -m `hostname -i` -p $passwd


上述集群镜像直接部署得到的集群,包括 CNStack 社区版的基础功能集。专有云产品的用户,根据自身需求不同,可能对产品使用体验有着不同的要求:


  • 有的用户打算先行体验最基础的功能,查看功能列表、管理界面风格等。这些用户期望的是部署十分简单,最好一键就能完成,并且快速看到结果。
  • 有的用户希望在提供必要资源的条件下,体验尽可能多的功能,例如进行 PoC
  • 有的用户希望通过细致的配置和资源规划将容器平台服务与自己的生产环境适配。


回到我们刚刚制作的集群镜像,基础功能集仅需要用户准备一个 8C12G 的虚拟机,无需额外的数据盘,即可完成部署。(基础功能集不包括监控、日志、弹性等高级功能。)ACK Distro 强大的地方在于,可以通过 sealer 配置 Clusterfile,开启 ACK Distro 中 open-local 动态存储池管理的能力,并在修改集群镜像中默认的容器服务 ACK 敏捷版配置,部署出具备监控、日志、弹性等高级能力的全功能集版本。


当前 CNStack 社区版提供了 3 种部署规格,如下表格:


2.png

表格:CNStack 社区版当前的部署规模。


下面我们介绍如何通过修改 Clusterfile 开启全功能集。


首先为开启 open-local,需要在各个节点上配置 vg 资源。


apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
  name: prepare_vg # Specify this plugin name,will dump in $rootfs/plugin dir.
spec:
  type: SHELL
  action: PreInit # PreInit PreInstall PostInstall
  # init data disk for open-local-lvm
  # VG_DEV must be set as an available data disk name (lsblk -p), e.g. VG_DEV=/dev/vdb
  data: |
    VG_DEV=#DataDiskDeviceName#
    yum install lvm2 -y
    vgremove open-local-pool-0 --force || echo "no open-local-pool-0 found, volume group Cleaning OK..."
    echo "start vgcreate. device name: $VG_DEV"
    vgcreate open-local-pool-0 $VG_DEV
    if [ $? -ne 0 ];then echo "vgcreate failed" && exit 1;fi
    echo "vg preparation done with success."


在 CNStack 集群镜像中我们关闭了 open-local 并将 StorageClass 配置为 manual,所以需要在 Clusterfile 通过 PostInstall Plugin 重新部署 open-local,以及配置新的 StorageClass。


apiVersion: sealer.aliyun.com/v1alpha1
kind: Plugin
metadata:
  name: install-open-local # Specify this plugin name,will dump in $rootfs/plugin dir.
spec:
  type: SHELL
  action: PostInstall # PreInit PreInstall PostInstall
  'on': $MASTER_IP_1
  # install open-local
  data: |
    helm uninstall localpv
    helm install -n kube-system open-local charts/open-local


容器服务 ACK 敏捷版的组件部署开关和参数配置可以通过 Config 对象 overwrite 集群镜像中的对应配置,以将容器服务 ACK 敏捷版组件的 SC 修改为 open-local 为例:


apiVersion: sealer.aliyun.com/v1alpha1
kind: Config
metadata:
  name: cluster-addon-sc
spec:
  path: charts/cluster-addon-configuration/values.yaml
  data: |
      dataStorageClass: open-local-lvm


从上面的例子可以看出,部署规格的灵活性并不是简单的子功能增加和删减 —— 不负责任的组合会导致无穷的交付和运维风险。CNStack 社区版提供的规格是经过设计验证,并且在部署流程、资源规划方面都进行了优化的方案,您放心使用。


得益于 sealer、ACK Distro、以及上层组件的灵活性,CNStack 社区版还有更多可以定制的维度,比如更加灵活的产品功能组合,适配不同规模业务的产品配置等,会在未来陆续发布。


基于 ACK Distro 使用 CNStack 社区版的优势


可以帮助用户搭建云原生基础设施


容器平台是用户应用与 IaaS 交互的新界面,对上负责应用的发布和维护,对下负责基础设施的资源管理,将用户数据中心中的异构基础设施抽象为更有利于云原生最佳实践落地的基础设施。业内种种最佳实践:观测、容灾、成本优化、微服务管理、AI 等很多先进的 IT 解决方案,都离不开一个“符合预期”、可靠的云原生基础设施。


3.png

图:CNStack 产品能力


图中的容器服务 ACK 敏捷版的能力之一,就是帮助用户搭建可靠的云原生基础设施。经过几年时间无数客户的专有云的服务经历,容器服务 ACK 敏捷版在搭建云原生基础设施方面,总结出了一系列关键经验,在 CNStack 社区版中在以下两个方面进行了着重落实:


  1. 良好的交付体验
  2. 适配用户 IaaS


良好的交付体验


售卖时天花乱坠,交付时一周起步,是专有云里面困扰用户的头等问题之一。繁琐的操作流程,复杂到只有资深工程师才可能搞清楚的功能依赖,文本很长却没有任何信息量的错误提示,以及没有明确的验收标准,是我们在专有云交付场景中遇到的主要问题。CNStack 社区版中,我们以 sealer 作为打包和交付工具 ,借助 ACK Distro 适配多种 IaaS 的能力,明确各阶段部署任务的边界,做到了最小功能集版本一键部署,高阶特性通过 Clusterfile 一个文件描述&快一键部署。


4.png


适配用户 IaaS


考虑到用户在 IT 设备上的投入周期和决策的复杂性,让 CNStack 社区版能够运行在主流环境上部署和流畅运行是我们追求的目标。适配用户 IaaS 包含两方面含义:

  1. 能够在用户存量 IaaS 上部署容器平台,让异构 IaaS 能够被抽象为统一的资源对象
  2. 维持用户合理的用云习惯,降低业务改动成本


如果将 ACK Distro 以及其中的存储、网路组件比作我们提供的工具,在不同的能工巧匠手中可以独立发挥作用,那么 CNStack 社区版中的容器服务 ACK 敏捷版就是一个精心打造的工具箱,为用户提供开箱即用的、能够适配用户 IaaS 的容器平台服务。我们从经典的计算、存储、网络三个维度,来描述容器服务 ACK 敏捷版在适配 IaaS 方面的工作以为帮助用户维持用云习惯的努力:


  • 计算
  • 容器服务 ACK 敏捷版使用与公有云 ACK 相同的 Kubernetes 组件镜像,因此在社区合规、安全、版本兼容方面,能够做到最佳适配


  • 存储(open-local)
  • 部分用户没有可靠的商业存储解决方案,我们可以将用户用于部署 Kubernetes 的节点存储以资源池的形式管理起来
  • 为 etcd、docker、kubelet 预留部分资源的前提下,进行交付,并保证运行时的稳定性


  • 网络(hybridnet)
  • 通过提供 overlay/underlay 容器网络平滑共存/转化的能力,以 overlay 容器网络屏蔽底层基础设施,以 underlay 容器网络对接底层基础设施,一定程度上可以做到,在屏蔽底层网络基础设施的同时,提供高性能的、可对外直通的网络能力
  • 提供网络控制的统一模型和平面,统一管理 overlay/underlay 网络,提供了丰富的地址策略分配、网络资源管理能力


与公有云基础设施有完善、稳定的 API 不同,用户 IaaS 因为 IaaS 供应商、版本、合规要求、运维习惯等,有着不同基础设施调用 API 和不同的配置要求。容器服务 ACK 敏捷版截止到目标适配了阿里云、华为云、电信云、易捷行云 EasyStack、VMWare、ZStack 等(注:社区版中目前仅在 ECS/物理机的 CentOS 上经历了充分测试,更多适配将在后续版本引入)


可以帮助用户同时管理基础设施和应用


CNStack 社区版帮助用户管理基础设施以及发布和运维运行在基础设施上的应用。容器服务 ACK 敏捷版提供了应用运维、集群运维、平台管理三个方面的能力赋能用户。受限于篇幅,我们将简单介绍功能列表,未来会有专门的文章为您详细介绍这些功能。


5.png

image.gif

  • 应用运维:
  • 应用发布。支持通过多种方式将您的应用发布到集群中
  • 制品仓库。支持对接您自有的制品仓库,也支持对接阿里云 ACR


  • 平台运维:
  • 帮助管理员定义多个组织和租户,使平台资源可以被更多用户使用的同时,提供足够的隔离性以保障安全


  • 集群运维:
  • 帮助您详细的了解集群和应用的运行现状,包括资源列表、监控大盘、各种服务日志等


下一篇文章我们会详细介绍这些功能,敬请期待。


CNStack 社区版未来的发展


通过云原生技术方案服务企业的数字化转型是 CNStack 的使命,目前 CNStack 社区版通过 sealer、ACK Distro 和容器服务 ACK 敏捷版,能够帮助用户搭建以云原生底座为核心的基础设施,并进行平台和应用的管理。但用户想享受更多云原生带来的便利,还需要更多的中间产品例如 EDAS(应用管理)、消息队列、监控,以及更多的解决方案,如边缘、AI、大数据等。随着 CNStack 社区版的不断更新,我们将陆续为用户带来更多的能力,方便用户接触到我们的产品和服务。


期待您加入我们的社区进行讨论,欢迎提出更多意见和期望。


相关链接


[1]ACK Distro 官网

https://www.aliyun.com/product/aliware/ackdistro


[2]ACK Distro 官方 GitHub

https://github.com/AliyunContainerService/ackdistro


[3]让创新触手可及,阿里云容器服务 ACK 发行版开放免费下载

https://mp.weixin.qq.com/s/Lc2afj91sykHMDLUKA_0bw


[4]集群部署工具 sealer

https://github.com/alibaba/sealer


[5]网络插件 hybridnet

https://github.com/alibaba/hybridnet


[6]本地存储插件 open-local

https://github.com/alibaba/open-local


[7]阿里云 CNStack

https://cn.aliyun.com/activity/middleware/cnstack


[8]CNStack 社区版官方 Github

https://github.com/alibaba/CNStackCommunityEdition


[9]阿里云容器服务 ACK 敏捷版产品介绍

https://help.aliyun.com/document_detail/397597.html

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
1月前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
2月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版