Anthos Config Management 产品设计分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
0. Anthos Config Mangement是什么?
Hello World Demo
大家可以看Arctiq公司搞的修改node数量Demo:https://www.arctiq.ca/our-blog/2019/4/9/gke-on-prem-and-anthos-config-management/
简单说,当你修改某个git管理下的yaml配置文件,里面描述了某个GKE私有集群某个cluster的node数量,然后Anthos Config Management会帮你自动的发命令并让节点数量变成你想要的那个
Anthos是啥?
是google发布的混合云多云平台
GKE:Anthos 的命令和控制核心。用户通过 GKE 的控制平面来对分散在 Google 云、私有数据中心一级其它云平台上的基础设施进行管理。
GKE On-Prem:Google 推出了一个基于 Kubernetes 的和 GKE 一致的软件平台。用户能够在任何的兼容硬件上部署这一产品,而 Google 将会对其进行管理。从升级 Kubernetes 版本到应用最新补丁,Google 都视其为 GKE 的逻辑扩展。尤其需要注意的是 GKE On-Prem 运行在 VMWare vSphere 6.5 的虚拟化基础上,Hyper-V 和 KVM 等其它虚拟化技术的支持还在开发之中。
Istio:这一技术让跨平台的联邦网络管理成为可能。Anthos 需要为部署在不同数据中心、GCP 以及其它云上的多种应用程序的组件建立服务网格,Istio 自然是首选。它会和 VMWare NSX、Cisco ACI 以及 Google 自己的 Andromeda 等 SDN 进行无缝集成。已经在网络设施上(例如 F5) 进行投资的客户,可以将 Istio 和负载均衡及防火墙集成起来。
Velostrata:Google 在 2018 年收购了这一云迁移技术,来增强 Kubernetes 的竞争力。Velostrata 的主要功能——在 GCE 实例中复制物理机/虚拟机,并把现有虚拟机转换为 Kubernetes 应用(Pod)。这是业界首个物理机到 Kubernetes 的迁移工具,由 Google 提供。这一技术以 Anthos Migrate 的面目出现,目前是 Beta 阶段。
Anthos 配置管理:Kubernetes 是一个可扩展的策略驱动的平台。Anthos 的客户必须面对运行在不同环境中的多个 Kubernetes,因此 Google 尝试利用 Anthos 来简化配置管理工作。从发布工件、配置项目、网络策略、密文和密码等类型的配置,Anthos 配置管理都能够进行管理并将配置应用到一或多个集群之中。
Stackdriver:Stackdriver 为 Anthos 基础设施和应用提供了可观察性的支持。客户能够使用这一组件跟踪运行在 Anthos集群状态,以及部署在各个托管集群上的应用的健康情况。该组件负责集中地提供监控、日志、跟踪以及观察的支持。
GCP Cloud Interconnect:在企业数据中心以及云基础设施之间的高速互联,是混合云平台的必要条件。Cloud Interconnect 能够在数据中心和云间交付高达 100Gbps 的高速网络。客户也可以使用 Equinix、NTT Communications、Softbanck 等电信厂商的网络将其数据中心延伸到 GCP
GCP Marketplace:Google 为能够在 Kubernetes 上运行的(来自 ISV 和开源的)软件列表。用户能够在 Anthos 中一键部署 Cassandra 数据库或者 GitLab 等软件。最终 Google 可能还会为内部 IT 提供一个私有的 Catalog 服务。
大家可以看到,在这8大组件里面,大概只有4和5是最近推出的,其他的早就投入生产并有不少企业在用了,这些组件到底是什么关系?我们把这些组件放到一张图上,就排着这个样子(原谅我忽略了可怜的StackDriver和Marktplace,我假定读者对这2个东西很熟悉)
也就是说,Anthos Config Management是一瓶胶水,把混合云里面应用的配置工作给自动化了。
且慢,什么叫做配置自动化?
你是否碰到过,一个典型的Web应用,在测试环境有一份配置文件(我们假定这个配置文件是一个k8s的deployment的yaml),在准生产环境有一份配置文件,在公有云有一份配置文件,在私有云也有一份配置文件?每次你都复制黏贴并修改一些参数,并指望这些环境能够混合起来给终端用户提供合理的服务,但手工修改往往会造成差错
你是否碰到过,配置文件存在多个k8s集群里面,每次都要手忙脚乱的用kubectl挨个修改,但没法看到这些配置的历史版本?你可以回滚应用的docker镜像,但你没法回滚配置。如果你是一个资深k8s玩家,你当然知道在etcd的某个角落里面存有所有yaml的历史版本,通过某种黑魔法般的命令行操作你还是可以找回历史的,但肯定没有git那么爽快
是的,Anthos Config Management就是用来解决这些问题的,并且,是按照Infrasturce as code的理念来做这个事情的
继续问另外一个问题,为什么配置这么重要?
众所周知,在传统的Unix/Linux环境下,在/etc下有不少配置文件,大部分苦逼的运维工程师每天的工作就是修改这些文件,并且通过重启进程或者给进程发信号让这些配置生效,并且要修改上百台机器;过去几年有了ansible或者salt这类批处理工具,把登陆几百台机器的工作量给省了;而k8s除了解决集群的批量问题,还引入了一个新的理念,就是声明式配置,运维工程师不需要苦逼的重启进程,这些“进程”会自动按照你的配置达到期望的状态(当然,由于这是在一个集群内,所以需要一定的时间),也就是说
声明式配置 = 面向终态
所以,你写的配置和传统的配置文件,那种静态的文本配置已经完全不一样了,最后这些配置会变成生产系统的某个状态,并且,如果使用了合理的工具链,这一系列工作都是自动化的。
那么现在这些“配置文件”还是配置吗?运维工程师的工作流程就变成了
git pull
read, think, modify
git push // all things done automaticlly
是的,你会发现运维工程师的工作流程就和开发工程师一样了!
这些配置,无论是什么语言写的,本质上变成了源代码,只是没有通过编译工具链而是通过运维工具链达到了鲁棒性,这样就把传统运维的重复劳动工作从大部分人手中拿出来交给少部分的运维工具链专家去维护。
1. 内部设计
关于这点,Google并没有放出这个东西的源代码,但是有一张图
是的,这张图在组件上画的非常清晰,Anthos Config Mangement,在运行形态上是一个k8s的operator,部署在多个集群里面,并且应该可以从同一个远程git repo里面读取配置,从这个demo库里面,我们可以看到这个operator读取git库的配置
apiVersion: addons.sigs.k8s.io/v1alpha1 kind: ConfigManagement Metadata: name: config-management spec: git: syncRepo: git@github.com:GoogleCloudplatform/csp-config-management.git syncBranch: "0.1.0" syncWait: 5 secretType: ssh policyDir: foo-corp
这里几个参数清晰的标明,Anthos Config Mangement会去每5秒钟读取一次git repo的0.1.0分支,并按照这个分支上的配置来进行后续的操作。那么,这些操作具体能干啥,怎么干呢?官方文档实在是太可怜了,就几句话就想打发我们,不过,从Demo里面我们可以试图寻找这些功能和配置的对应关系。读者可以把demo库 git clone下来,比对着看。
官方的功能描述是:
这是demo的树形目录结构
. ├── cluster │ ├── namespace-reader-clusterrole.yaml │ ├── namespace-reader-clusterrolebinding.yaml │ ├── pod-creator-clusterrole.yaml │ └── pod-security-policy.yaml ├── namespaces │ ├── audit │ │ └── namespace.yaml │ ├── online │ │ └── shipping-app-backend │ │ ├── pod-creator-rolebinding.yaml │ │ ├── quota.yaml │ │ ├── shipping-dev │ │ │ ├── job-creator-role.yaml │ │ │ ├── job-creator-rolebinding.yaml │ │ │ ├── namespace.yaml │ │ │ └── quota.yaml │ │ ├── shipping-prod │ │ │ └── namespace.yaml │ │ └── shipping-staging │ │ └── namespace.yaml │ ├── sre-rolebinding.yaml │ ├── sre-supported-selector.yaml │ └── viewers-rolebinding.yaml └── system ├── config-management.yaml └── resourcequota-hierarchy.yaml
我相信应该是anthos的工作流应该是读取cluster里面的一些安全配置,并且在所有集群上都创建这里的namespace目录所描述的命名空间。
在一些demo视频里面我们还看到了clusterregistry目录,应该是用来修改集群的一些属性,达到动态修改节点数量的目的。
但如何让一个应用在多个集群的多个namespace流转,当前还没能看到痕迹,从namespace的嵌套目录来看,应用WorkLoad会经过这些目录的层级,然后动态的修改自己的一些配置。这些细节还有待研究。
2. 结语
核心洞察
Anthos是在多k8s集群的场景下,想到了这两点
既然k8s把所有东西的状态变为静态的yaml文本描述,那么这些配置存在etcd里面并用kubectl去修改就是低效的,完全可以用git存起来
这些配置之间是有冗余的,完全可以通过模板化的方式去自动搞定单个应用多集群的配置
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程之家行业资讯频道,感谢您对编程之家的支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。