作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家,51CTO明日之星
擅长领域:全栈工程师、爬虫、ACM算法
Crane平台介绍与实践总结
⛳⛳⛳
Crane是一个开源的容器编排工具 ,Crane提供了一种简单而灵活的方式来管理容器应用程序的生命周期,包括构建、部署、运行和维护。它支持多个容器编排引擎,如Docker Compose、Kubernetes和Mesos等。
容器编排:
Crane支持使用多种容器编排引擎来管理容器应用程序的生命周期,包括Docker Compose、Kubernetes和Mesos等。
容器构建和发布:
Crane提供了简单而灵活的方式来构建和发布容器镜像,支持使用模板和插件来自定义构建流程。
应用程序部署和管理:
Crane支持将多个容器组合成一个完整的应用程序,并提供了灵活的网络和存储选项,以便更好地管理和扩展应用程序。
配置管理:
Crane使用简洁明了的配置文件格式来管理容器应用程序的配置,同时还支持使用环境变量和参数来动态配置应用程序。
监控和日志记录:
Crane提供了集成的监控和日志记录功能,可以帮助开发者及时发现和解决应用程序的问题。
负载感知的调度器
动态调度器根据实际的节点利用率构建了一个简单但高效的模型,并过滤掉那些负载高的节点来平衡集群。
拓扑感知的调度器
Crane Scheduler与Crane Agent配合工作,支持更为精细化的资源拓扑感知调度和多种绑核策略,可解决复杂场景下“吵闹的邻居问题",使得资源得到更合理高效的利用。
基于 QOS 的混部
QOS相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。具有多维指标条件下的干扰检测和主动回避能力,支持精确操作和自定义指标接入;具有预测算法增强的弹性资源超卖能力,复用和限制集群内的空闲资源;具备增强的旁路cpuset管理能力,在绑核的同时提升资源利用效率。
Crane 的整体架构如下:
Craned
Craned 是 Crane 的最核心组件,它管理了 CRDs 的生命周期以及API。Craned 通过 Deployment 方式部署且由两个容器组成:
Craned: 运行了 Operators 用来管理 CRDs,向 Dashboard 提供了 WebApi,Predictors 提供了 TimeSeries API
Dashboard: 基于 TDesign’s Starter 脚手架研发的前端项目,提供了易于上手的产品功能
Fadvisor
Fadvisor 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统,比如 Prometheus。Fadvisor 通过 Cloud Provider 支持了多云计费的 API。
Metric Adapter
Metric Adapter 实现了一个 Custom Metric Apiserver. Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。
随着云原生技术的发展,越来越多的公司正在选择将应用运行在云上或者自建的 Kubernetes 集群上,但是许多机构的调研发现,绝大多数的用户集群资源利用率并不高,使用Crane帮你快速提升资源利用率。
快速搭建一个基于Kubernetes+Crane的环境优化你的集群和应用。
实验涉及技术总结:
安装 kubectl
curl.exe -LO "https://dl.k8s.io/release/v1.27.1/bin/windows/amd64/kubectl.exe" (WINDOWS环境)
其它系统参考对应的文档安装 kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/
安装 Helm
choco install kubernetes-helm (windows环境)
其它系统参考对应的文档安装 Helm:https://helm.sh/zh/docs/intro/install/
安装 kind
choco install kind (windows环境)
其它系统参考对应的文档安装 kind:https://kind.sigs.k8s.io/docs/user/quick-start/#installation
安装 Docker
安装kind的过程中会直接安装docker,如果没有安装在官网下载安装:https://docs.docker.com/get-docker/
注意windows上需要开始硬件虚拟化支持和数据保护机制。
安装本地的 Kind 集群和 Crane 组件:以下命令将安装 Crane 以及其依赖 (Prometheus/Grafana).
在线安装和本地安装二选一
1.在线安装
curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -
2.本地安装(安装包为固定格式的,如公司使用,需要自行配置)
需要用的安装包都在这了:点击下载
# 必须在 installation 的上级目录例如:我们预设好的 training 跟目录中执行
# Mac/Linux
bash installation/local-env-setup.sh
# Windows(git bash中打开)
./installation/local-env-setup.sh
确保所有 Pod 都正常运行:
$ export KUBECONFIG=${HOME}/.kube/config_crane
$ kubectl get pod -n crane-system
NAME READY STATUS RESTARTS AGE
craned-6dcc5c569f-vnfsf 2/2 Running 0 4m41s
fadvisor-5b685f4cd6-xpxzq 1/1 Running 0 4m37s
grafana-64656f6d54-6l24j 1/1 Running 0 4m46s
metric-adapter-967c6d57f-swhfv 1/1 Running 0 4m41s
prometheus-kube-state-metrics-7f9d78cffc-p8l7c 1/1 Running 0 4m46s
prometheus-server-fb944f4b7-4qqlv 2/2 Running 0 4m46s
提示:Pod 的启动需要一定的时间,等几分钟后输入命令查看后集群状态是否都 Running
访问 Crane Dashboard
kubectl -n crane-system port-forward service/craned 9090:9090
后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上(不然会出现8080端口被拒绝的提示)
export KUBECONFIG=${HOME}/.kube/config_crane
点击 这里 访问 Crane Dashboard
添加本地集群:
安装Metrics Server
用以下命令安装 Metrics Server:
kubectl apply -f installation/components.yaml
kubectl get pod -n kube-system
创建测试应用
用以下命令启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后将其暴露为一个 服务(Service):
kubectl apply -f installation/php-apache.yaml
kubectl apply -f installation/nginx-deployment.yaml
创建 EffectiveHPA
kubectl apply -f installation/effective-hpa.yaml
运行以下命令查看 EffectiveHPA 的当前状态:
kubectl get ehpa
输出类似于:
NAME STRATEGY MINPODS MAXPODS SPECIFICPODS REPLICAS AGE
php-apache Auto 1 10 0 3m39s
增加负载
在单独的终端中运行它
如果你是新创建请配置环境变量
export KUBECONFIG=${HOME}/.kube/config_crane
$env:KUBECONFIG="${HOME}/.kube/config_crane" (whindows使用这个)
# 以便负载生成继续,你可以继续执行其余步骤
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
现在执行:
#准备好后按 Ctrl+C 结束观察
#如果你是新创建请配置环境变量
export KUBECONFIG=${HOME}/.kube/config_crane
kubectl get hpa ehpa-php-apache --watch
登陆 Grafana 的方式可以通过以下命令建立一个 port-mapping:
# 如果你是新创建请配置环境变量
export KUBECONFIG=${HOME}/.kube/config_crane
kubectl -n crane-system port-forward service/grafana 8082:8082
访问本地 Grafana(账号密码:admin/admin): http://127.0.0.1:8082/grafana/login
创建 RecommendationRule 配置后,RecommendationRule 控制器会根据配置定期运行推荐任务,给出优化建议生成 Recommendation 对象,然后我们可以根据优化建议 Recommendation 调整资源配置。
比如我们这里集群中已经生成了多个优化建议 Recommendation 对象。
kubectl get recommendations -A
NAME TYPE TARGETKIND TARGETNAMESPACE TARGETNAME STRATEGY PERIODSECONDS ADOPTIONTYPE AGE
workloads-rule-resource-8whzs Resource StatefulSet default nacos Once StatusAndAnnotation 34m
workloads-rule-resource-hx4cp Resource StatefulSet default redis-replicas Once StatusAndAnnotation 34m
在 dashboard 的资源推荐页面也能查看到优化建议列表。
优化应用配置
在 dashboard 中开箱后就可以看到相关的成本数据,是因为在添加集群的时候我们安装了推荐的规则。
推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。
动手实践完成后,可以将本地的集群清理删除:
kind delete cluster --name=crane
以上是关于Crane的介绍与应用实践,具体的使用详情可移步官方仓库了解:https://github.com/gocrane/crane
通过动手实践收获:
通过本次实践,熟悉Crane的基本概念和使用方法,使用多个容器编排引擎来管理容器应用程序,通过使用crane与Grafana以及Prometheus联合使用,充分体现出Crane不仅简单易用,可视化操作。
Crane是一个灵活性高、易于使用的容器编排工具,可以帮助开发者更加高效地构建、部署和管理容器化应用程序。
DevOps:Crane可以用于DevOps自动化流程中,帮助开发团队更加高效地构建、测试和部署应用程序。
云原生应用程序:Crane可以用于构建和管理云原生应用程序,这些应用程序通常是分布式的、可扩展的和高可用的。
容器化微服务:Crane可以用于管理容器化的微服务,帮助开发者更加容易地部署、升级和管理微服务架构。
大规模集群:Crane可以用于大规模集群的部署和管理,例如使用Kubernetes等容器编排引擎管理的集群。