Kubesphere提供两个部署工具,KubeKey和ks-installer。其中,ks-installer部署Kubesphere,KubeKey安装Kubernetes和ks-installer。

代码框架


controller:shell-operator的两个脚本
deploy:部署ks-installer的yaml文件
docs:文档
env:变量
playbooks:各个playbook

  • alerting.yaml:部署报警模块
  • auditing:部署审计模块
  • common:部署通用模块,包括es、fluent-bit、minio、openldap、mysql等等
  • devops:部署devops模块
  • events:部署事件模块
  • harbor:部署镜像仓库模块
  • ks-config:
  • ks-core:部署ks核心组件,包括ks-apiserver、ks-controller-manager、ks-console等
  • logging:部署日志模块
  • metrics-server:部署metrics-server
  • monitor:部署监控模块
  • multicluster:部署多集群模块
  • openpitrix:部署openpitrix
  • preinstall:预安装,包括检查k8s版本、storageclass、helm版本转换等
  • result-info:统计部署结果,显示welcome信息
  • servicemesh:部署微服务模块
  • telemetry:获取一些集群信息,如k8s版本、ks版本、machineID等等,再向ClusterConfiguration写入- - clusterID(当前镜像有问题,生成clusterID失败,因为没有uuidgen命令)
    roles:各个role目录

scripts:ks-installer相关脚本

shell-operator

ks-installer本质是一个shell-operator,监控着ClusterConfiguration资源,当ClusterConfiguration资源变化时,则会触发ks-installer的部署流程。
不像fluentbit-operator这些,shell-operator并不是一种具体的operator实现,而是提供了一种框架。按照这种框架,可以编写出具体的operator。
shell-operator 与其他 Kubernetes 工作负载类似,部署在 Pod中。在 Pod 中有一个/hooks 的一个子目录,其中存储了可执行文件,它们可以用 Bash、Python、Ruby等编写的,我们称这些可执行文件为hooks。在这些可执行文件中,声明感兴趣的Kubernetes事件,订阅这些事件,并执行这些钩子。
shell-operator 如何知道何时执行钩子呢?事实上每个钩子都有两个阶段。在启动过程中,shell-operator 使用-config参数运行每个钩子。一旦配置阶段结束,钩子将以“正常”方式执行:响应附加给它们的事件。

shell-operator支持三种钩子响应类型:
1、OnStartup:启动后即运行;
2、schedule:crontab格式的定时任务;
3、kubernetes:监控Kubernetes资源,根据定义的事件类型来响应;

shell-operator也提供了prometheus metrics,支持自定义指标,默认端口是9115。

bash-5.1$ pwd
/hooks/kubesphere
bash-5.1$ ls
installRunner.py  schedule.sh

ks-installer的pod中,/hooks/kubesphere中包含两个文件。installRunner.py用于部署ks-installer,schedule.sh定期执行telemetry的playbook,检查状态、注册clusterid等。
installRunner.py:

ks_hook = '''
{"onKubernetesEvent": [{"name": "Monitor clusterconfiguration","kind": "ClusterConfiguration","event": [ "add", "update" ],"objectName": "ks-installer","namespaceSelector": {"matchNames": ["kubesphere-system"]},"jqFilter": ".spec","allowFailure": false}]
}
'''
def main():if not os.path.exists(privateDataDir):os.makedirs(privateDataDir)if len(sys.argv) > 1 and sys.argv[1] == "--config":print(ks_hook)else:config.load_incluster_config()api = client.CustomObjectsApi()updateConfigMap("unready")generate_new_cluster_configuration(api)generateConfig(api)# execute preInstall taskspreInstallTasks()resultState = getResultInfo()resultInfo(resultState, api)

schedule.sh:

if [[ $1 == "--config" ]] ; thencat <<EOF
{"configVersion":"v1","schedule": [{"allowFailure": true,"name": "every month","crontab": "0 0 1 * *"}]
}
EOF
elseansible-playbook /kubesphere/playbooks/telemetry.yaml -e @/kubesphere/config/ks-config.jsonif [[ $? -eq 0 ]]; then#statementsstr="successsful!"echo -e "$str"elseexitfi
fi

这两个脚本的入口处,都是通过-config参数,配置要监控的事件,另外一个分支,就是钩子需要处理的动作。
schedule.sh是一个定时执行的任务,每个月执行telemetry.yaml。
installRunner.py就是主要的部署脚本。

installRunner.py

def main():if not os.path.exists(privateDataDir):os.makedirs(privateDataDir)if len(sys.argv) > 1 and sys.argv[1] == "--config":print(ks_hook)else:# 加载k8s配置config.load_incluster_config()# k8s客户端api = client.CustomObjectsApi()# 生成新的ClusterConfiguration配置generate_new_cluster_configuration(api)# 持久化文件/kubesphere/config/ks-config.json和/kubesphere/config/ks-status.json# /kubesphere/config/ks-config.json即ClusterConfiguration的配置部分(json化)# /kubesphere/config/ks-status.json即CLusterConfiguration的状态部分generateConfig(api)# execute preInstall tasks# 执行preInstall、metrics-server、common、ks-corepreInstallTasks()# 实际安装,异步安装各组件resultState = getResultInfo()resultInfo(resultState, api)

部署

ks-installer容器启动(重启)后,或者感知到ClusterConfiguration变化后,都会触发ks-installer的部署流程。
每次触发部署流程,preInstall、metrics-server、common、ks-core等playbook都会再次执行。
而可插拔组件是否会执行部署,取决于ClusterConfiguration中,对应组件的status状态,当该模块不存在,或者status不为enalbed时,都会重新触发该模块的再次部署。如果要调试某个组件的重新部署,可以在status部分,删除对应组件的部分。

# kubectl get cc -n kubesphere-system   ks-installer -oyaml
status:clusterId: ""core:enabledTime: 2022-03-29T16:29:34CSTstatus: enabledes:enabledTime: 2022-03-29T16:28:39CSTstatus: enabledfluentbit:enabledTime: 2022-03-29T16:28:57CSTstatus: enabledlogging:enabledTime: 2022-03-29T16:31:06CSTstatus: enabledmetricsServer:enabledTime: 2022-03-29T16:26:37CSTstatus: enabledminio:enabledTime: 2022-03-29T16:28:30CSTstatus: enabledmonitoring:enabledTime: 2022-03-29T16:33:33CSTstatus: enabledservicemesh:enabledTime: 2022-03-29T16:31:28CSTstatus: enabled

参考文章:
https://github.com/flant/shell-operator
https://cloud.tencent.com/developer/article/1701733
https://blog.fleeto.us/post/shell-operator/

Kubesphere之ks-installer介绍相关推荐

  1. AUC的相关知识及K-S曲线和K-S值介绍

    1. AUC的直观解释 大家都知道AUC是ROC下方的面积,ROC是什么?ROC怎么画呢? 首先看一张图: TP.FN.FP.TN如图: 图中的TP FP FN TN 如何理解? 如何计算画ROC曲线 ...

  2. android .beats音效安装器,魔声音效安装器:Beats Audio Installer

    魔声音效安装器:Beats Audio Installer 介绍 魔声音效安装器:Beats Audio Installer 魔声音效安装器Beats Audio Installer可以将Beats ...

  3. 14.K8S+KubeSphere+DevOps

    文章目录 三个时代 传统时代 虚拟化时代 容器化时代(Docker) K8S简介 功能 调度 自动恢复 水平伸缩 架构 整体主从 主体结构 Master架构 kubectl Controller De ...

  4. 数学建模学习(2)—— 客户流失预警模型案例评估 ROC曲线与KS曲线(2022.7.19)

    昨天晚上做了个梦,梦到被老师臭骂了一顿,可以说当时把我直接吓醒了,醒过来后,惊叹一声,还好是个梦.在上个笔记中学习了逻辑回归的运用,这节课再来看一看对模型评估的方法. 文章目录 目录 文章目录 一.R ...

  5. 风控场景下的常用特征分箱介绍:BestKs分箱、卡方分箱、聚类分箱等

    介绍分箱方法之前,首先要了解为什么分箱? 分箱的好处: 1.分箱后的特征对异常数据有更强的鲁棒性.比如年龄中有一个异常值为300,分箱之后就可能划到>80这一箱中,而如果直接入模的话会对模型造成 ...

  6. 使用 KubeKey 安装部署 Kubernetes 与 Kube-OVN

    作者简介:林瑞超,锐捷网络开发工程师, KubeSphere 社区 contributor, 关注Kube-OVN, Cilium 等容器网络相关技术 背景 KubeKey 是 KubeSphere ...

  7. 禁止32位安装包运行在64位操作系统上

    Windows installer提供了一个"Msix64"属性帮我们检测当前系统是32位还是64位. The Msix64 property is defined only if ...

  8. 风云叱咤,尚硅谷云原生实战教程(下篇)发布

    摘要:企业级容器云实战,真正实现云上亿级流量永不宕机! 若逢新雪初霁,满月当空. 他带笑向我们走来, 月色与雪色间,他是第三种绝色. 他浑身上下都是宝, 上知天文,下晓地理,中通人和, 他就是我们的老 ...

  9. 什么是云原生架构和K8S?

    作者:duktig 博客:https://duktig.cn (文章首发) 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 本篇文章的思维导图参看语雀:https://www.yuque.com/doc ...

  10. OpenELB 在 CVTE 的最佳实践

    作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador. 公司介绍 广州视源电子科技股份有限公司(以下简称视源股份)成立于 ...

最新文章

  1. 武汉大学提出软模板SoftProto框架,大幅增强方面词抽取任务
  2. 拷贝文件不移动_在不使用 mv 命令的情况下移动文件
  3. 基于Xml 的IOC 容器-解析配置文件路径
  4. new关键字和newInstance()方法的区别?Class.forName()
  5. python定时下载FTP指定文件
  6. 【AI面试题】AlexNet、VGGNet、GoogLeNet,ResNet等网络之间的区别是什么
  7. 渗透测试专题二之msf(kali)的攻击教程将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统...
  8. 安装JAVA文件被删_Android 删除无用Java文件
  9. C++第五章课后习题-输入n个字符串,把其中以字母A打头的字符串输出
  10. atitit.atitit.hb many2one relate hibernate 多对一关联配置..
  11. HTML5 基础入门教程
  12. 2022.11.24
  13. SN74LS00N芯片逻辑输出电平
  14. C++实现多线程及其三种方法实现多线程同步
  15. Android 解压zip压缩包 (压缩包内有多级目录)
  16. oracle 字符集问题
  17. java车牌识别系统_基于jsp的车牌识别系统-JavaEE实现车牌识别系统 - java项目源码...
  18. 【陀螺财经】数字货币每日行情简报0212
  19. 以太大亨 以太坊上的区块链模拟经营类游戏
  20. FiF智慧教学平台登陆系统可能过滤特殊字符导致无法正常登录

热门文章

  1. 【分享】Gitee如何下载单个文件
  2. github gitee 仓库大小限制 单个文件大小限制
  3. 最新版校园招聘进大厂系列----------(2)美团篇 -----未完待续
  4. 纯HTML标签详解(摘自阿里西西)
  5. 华科计算机学院三好学生,2015-2016年度本科生国奖国励校三好奖学金评选细则(含加分项)...
  6. 爱国者p8880e java_口袋里的电脑 爱国者P8880E MID评测
  7. JavaScript 读写剪贴板之方式汇总
  8. 如何解决Adobe Flash Player已被屏蔽
  9. Google点击没有反应怎么办?Google卸载不了怎么办?Google安装不了怎么办?
  10. 如何高效开展测试用例评审?附用例评审检查清单及用例评审报告模板