乐趣区

关于云原生:基于容器服务-ACK-发行版打造-CNStack-社区版

简介:本文将介绍如何应用 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 社区版集群镜像构造如下。

基于 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 种部署规格,如下表格:


表格: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 解决方案,都离不开一个“合乎预期”、牢靠的云原生基础设施。


图:CNStack 产品能力

图中的容器服务 ACK 麻利版的能力之一,就是帮忙用户搭建牢靠的云原生基础设施。通过几年工夫有数客户的专有云的服务经验,容器服务 ACK 麻利版在搭建云原生基础设施方面,总结出了一系列要害教训,在 CNStack 社区版中在以下两个方面进行了着重落实:

  • 良好的交付体验
  • 适配用户 IaaS

良好的交付体验

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

适配用户 IaaS

思考到用户在 IT 设施上的投入周期和决策的复杂性,让 CNStack 社区版可能运行在支流环境上部署和晦涩运行是咱们谋求的指标。适配用户 IaaS 蕴含两方面含意:

  • 可能在用户存量 IaaS 上部署容器平台,让异构 IaaS 可能被形象为对立的资源对象
  • 维持用户正当的用云习惯,升高业务改变老本

如果将 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 麻利版提供了利用运维、集群运维、平台治理三个方面的能力赋能用户。受限于篇幅,咱们将简略介绍性能列表,将来会有专门的文章为您具体介绍这些性能。

  • 利用运维:

利用公布。反对通过多种形式将您的利用公布到集群中
制品仓库。反对对接您自有的制品仓库,也反对对接阿里云 ACR

  • 平台运维:

帮忙管理员定义多个组织和租户,使平台资源能够被更多用户应用的同时,提供足够的隔离性以保障平安

  • 集群运维:

帮忙您具体的理解集群和利用的运行现状,包含资源列表、监控大盘、各种服务日志等

下一篇文章咱们会具体介绍这些性能,敬请期待。

CNStack 社区版将来的倒退

通过云原生技术计划服务企业的数字化转型是 CNStack 的使命,目前 CNStack 社区版通过 sealer、ACK Distro 和容器服务 ACK 麻利版,可能帮忙用户搭建以云原生底座为外围的基础设施,并进行平台和利用的治理。但用户想享受更多云原生带来的便当,还须要更多的两头产品例如 EDAS(利用治理)、音讯队列、监控,以及更多的解决方案,如边缘、AI、大数据等。随着 CNStack 社区版的不断更新,咱们将陆续为用户带来更多的能力,不便用户接触到咱们的产品和服务。

原文链接
本文为阿里云原创内容,未经容许不得转载。

退出移动版