CNStack(云原生技术中台)是阿里云云原生最佳实践的输出载体。它可以在多云、混合云场景下集中纳管基础设施资源,统一编排和调度工作负载,帮助客户高效构建高性能、高可用、高可靠和安全合规的现代化应用,提升企业数字化转型的整体效能。
CNStack的目标是提供一个开放、共享、标准化的云原生生态系统,使企业能够更加轻松地构建和管理云原生应用,同时也促进了云原生技术的发展和普及。
CNStack从原先的容器平台产品升级成全栈的云原生技术中台产品。它创建了“云服务”,“云组件”的标准规范和支持这些标准规范的线上集成发布服务云原生交付平台ADP。“云服务”通过服务的形式提供能力扩展,使用CNStack提供的用户,租户,鉴权,审计,许可证,多集群部署,UI框架等基础能力,与既有能力或其他服务无缝的协作。目前,已发布的云服务包括:多集群管理,分布式应用管理、分布式存储、虚拟化服务、云边协同、服务网格等。更多的云服务会陆续发布。
CNStack社区版包括CNStack,多集群管理云服务,虚拟化云服务,云边协同云服务等。除了高可用部署模式外,CNStack 社区版提供了与商业版本一致的能力,包括“云服务”和“云组件”扩展。其他扩展平台能力的“云服务”也会有序放出。
环境要求:
更为详细的环境要求请参考 ACK Distro环境要求。
在master节点执行以下安装命令:
# 获取sealer工具
ARCH=amd64 # or arm64
wget http://sealerio.oss-cn-shanghai.aliyuncs.com/releases/sealer-v0.9.3-linux-${ARCH}.tar.gz -O sealer.tar.gz && tar -xvf sealer.tar.gz -C /usr/bin
# 获取配置文件
wget http://ack-a-aecp.oss-cn-hangzhou.aliyuncs.com/cnstack-ce/clusterfile/cnstack-ce-v2-1-0-ce-4-clusterfile.yaml -O ClusterFile.yaml
# 示例IP:192.168.0.1(master内部IP)136.67.0.1(master外部IP)
sealer run -f ClusterFile.yaml -m 192.168.0.1 -p $passwd -e gatewayExternalIP=136.67.0.1 -e ingressExternalIP=136.67.0.1
# 获取sealer工具
ARCH=amd64 # or arm64
wget http://sealerio.oss-cn-shanghai.aliyuncs.com/releases/sealer-v0.9.3-linux-${ARCH}.tar.gz -O sealer.tar.gz && tar -xvf sealer.tar.gz -C /usr/bin
# 获取配置文件
wget http://ack-a-aecp.oss-cn-hangzhou.aliyuncs.com/cnstack-ce/clusterfile/cnstack-ce-v2-1-0-ce-4-clusterfile.yaml -O ClusterFile.yaml
# 示例IP:192.168.0.1(master内部IP)136.67.0.1(master外部IP)192.168.0.2(worker1)192.168.0.3(worker2)192.168.0.4(worker3)
sealer run -f ClusterFile.yaml -m 192.168.0.1 -n 192.168.0.2,192.168.0.3,192.168.0.4 -p $passwd -e gatewayExternalIP=136.67.0.1 -e ingressExternalIP=136.67.0.1
# 查看App状态
kubectl get app -A
# 等待所有App的状态为Running
部署完成后,通过浏览器访问 https://$Master_IP_1:30383
即可以访问CNStack社区版的控制台(默认用户名:admin
默认密码:Ab123456
)。
注意,上述命令安装了CNStack和多集群管理云服务,但是CNStack在各个纳管集群内的日志和监控组件默认没有安装,所以相关的管理页面会显示后端服务未准备好等错误信息。可以在平台管理的能力中心页面运维CNStack,更改数据面配置安装日志和监控组件。此外,制品管理能力需要对接第三方的Harbor服务。在CNStack社区版没有包含Harbor服务。
默认情况下,CNStack使用csi-hostpath作为其默认存储类,如果想让CNStack更好地管理它使用的磁盘,请按需准备好裸的数据盘(无需分区及挂载):
准备好磁盘后,配置您的ClusterFile.yaml文件
apiVersion: sealer.cloud/v2
kind: Cluster
metadata:
name: my-cluster # 固定为my-cluster
spec:
...
env: # all env are NOT necessary,所有的env变量都是非必填项
# 需要自动安装的ACKDISTRO的组件,默认为空,支持ack-node-problem-detector,kube-prometheus-crds,paralb
- Addons=ack-node-problem-detector,kube-prometheus-crds
# 需要自动安装的CNStack组件,默认为空,支持logging,monitor
- ComponentToInstall=logging,monitor # 需要默认安装的组件
# 容器网络配置
- PodCIDR=172.45.0.0/16,5408:4003:10bb:6a01:83b9:6360:c66d:0000/112 # pod subnet, support ipv6 cidr, must be dual stack cidr
- SvcCIDR=10.96.0.0/16,6408:4003:10bb:6a01:83b9:6360:c66d:0000/112 # service subnet, support ipv6 cidr, must be dual stack cidr
# 存储盘配置
- EtcdDevice=/dev/vdb # EtcdDevice is device for etcd, default is "", which will use system disk
- StorageDevice=/dev/vdc # StorageDevice is device for kubelet and container daemon, default is "", which will use system disk
- YodaDevice=/dev/vdd # YodaDevice is device for open-local, if not specified, open local can't provision pv
- DockerRunDiskSize=100 # unit is GiB, capacity for /var/lib/docker, default is 100
- KubeletRunDiskSize=100 # unit is GiB, capacity for /var/lib/kubelet, default is 100
# CNStack平台对外暴露方式的配置
- gatewayExternalIP=${master0实例公网 EIP 或 Gateway SLB 对外IP,该地址要能够被您的浏览器访问到}
- ingressExternalIP=${master0实例公网 EIP 或 Ingress SLB 对外IP,该地址要能够被您的浏览器访问到}
- gatewayInternalIP=${master0内部ip 或者 Gateway SLB 内部IP}
- ingressInternalIP=${master0内部ip 或者 Ingress SLB 内部IP}
- gatewayExposeMode=ip_domain # 平台对外暴露模式,可配置为ip,ip_domain,domain,默认是ip_domain
- gatewayPort=30383 # 对外暴露的CNStack平台管控的端口
- ingressHttpPort=80 # 对外暴露的CNStack平台数据的端口(HTTP)
- ingressHttpsPort=443 # 对外暴露的CNStack平台数据的端口(HTTPS)
ssh:
passwd: "password"
#user: root # default is root
#port: "22" # default is 22
#pk: /root/.ssh/id_rsa
#pkPasswd: xxx
hosts:
- ips: # support ipv6
- 1.1.1.1
roles: [ master ] # add role field to specify the node role
env: # all env are NOT necessary, rewrite some nodes has different env config
- EtcdDevice=/dev/vdb
- StorageDevice=/dev/vde
# rewrite ssh config if some node has different passwd...
# ssh:
# user: root
# passwd: passwd
# port: "22"
- ips: # support ipv6
- 2.2.2.2
- 3.3.3.3
- 4.4.4.4
roles: [ node ]
配置完成ClusterFile.yaml后,执行sealer run
命令安装CNStack社区版
# 运行sealer run命令
sealer run -f ClusterFile.yaml
# 查看App状态
kubectl get app -A
# 等待所有App的状态为Running
CNStack集群中包含以下几种角色(role),每个节点扮演其中一至多种角色:
master/node的使用方式和社区版K8s一致,使用"sealer run/join -m"添加的就是master,"-n"就是node,或者在ClusterFile中的roles中指定了master/node的角色,指定为master的节点会被作为K8s管控节点添加,注意,CNStack社区版中只允许单Master。
通过"-e RemoveMasterTaint=true"可以在部署时自动去除Master的污点,也可以后续手动去除污点。
CNStack社区版默认会为所有节点打上cnstack-infra和proxy的role,并且不带污点。
如想了解更多的配置参数,请参考 ACK Distro进阶配置方式
# 执行sealer delete删除安装的管理集群
sealer delete -a --force
# 如果使用定制安装,启用了卷管理服务,删除平台创建的数据卷
vgremove open-local-pool-0 --force
如果部署环境没有互联网连接,请执行以下命令下载安装包
# 在有互联网连接的主机,使用sealer pull拉取集群镜像和配置文件
sealer pull ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/cnstack-ce:v2-1-0-ce-4
# 保存集群镜像为tar文件
sealer save ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/cnstack-ce:v2-1-0-ce-4 -o cnstack.tar
# 将sealer,集群镜像cnstack.tar和配置文件 ClusterFile.yaml传输到没有互联网连接的部署主机,在部署主机执行以下命令
sealer load -i cnstack.tar
然后,可以按照产品部署指南部署产品
使用钉钉扫描以下二维码,加入CNStack社区版客户支持群,获取产品支持,参与需求讨论。