全栈式k8s编排产品Rancher(一)
Rancher入门
Rancher简介
Rancher 是一个全栈式的 Kubernetes 容器管理平台,也是一个可以在任何地方都能成功运行 Kubernetes 的工具。
Rancher 通过支持集群的身份验证和基于角色的访问控制(RBAC),使系统管理员能够从一个位置控制全部集群的访问。Rancher 可以对集群及其资源进行详细的监控和并在需要时发送告警,也可以将容器日志发送给外部日志系统,并通过应用商店与 Helm 集成。如果您具有外部 CI/CD 流水线系统,则可以将其与 Rancher 对接,如果没有,Rancher 也提供了简单易用的流水线来帮助您自动部署和升级工作负载。
官方文档:https://docs.rancher.cn/docs/rancher2.5/overview/_index/
Rancher架构
图描述的是用户通过 Rancher Server 管控 Rancher 部署的 Kubernetes 集群(RKE 集群)和托管的 Kubernetes 集群的(EKS)集群的流程。
以用户下发指令为例,指令的流动路径如下:
- 首先,用户通过 Rancher UI(即 Rancher 控制台) Rancher 命令行工具(Rancher CLI)输入指令;直接调用 Rancher API 接口也可以达到相同的效果。
- 用户通过 Rancher 的代理认证后,指令会进一步下发到 Rancher Server 。
- 与此同时,Rancher Server 也会执行容灾备份,将数据备份到 etcd 节点。
- 然后 Rancher Server 把指令传递给集群控制器。集群控制器把指令传递到下游集群的 Agent,最终通过 Agent 把指令下发到指定的集群中。
与下游集群交互
通过两个用户 Bob 和 Alice 的案例,了解 Rancher 启动和管理下游集群的具体过程,和每个 Rancher 组件的作用。
1. 认证代理
图左上角一个叫做 Bob 的用户希望查看下游集群“User Cluster 1”里面正在运行的 pod。Bob 发起的请求会首先经过认证代理,通过认证之后,Rancher 的 认证代理才会把 API 调用命令转发到下游集群。
默认状态下,Rancher 生成一个包含认证信息的kubeconfig文件,为 Rancher Server 和下游集群的 Kubernetes API Server 之间的通信提供认证。该文件包含了访问集群的所有权限。
2. 集群控制器和集群agent
每一个下游集群都有一个集群 Agent 保持下游集群的集群控制器与 Rancher Server 之间的信息畅通。
集群控制器具有以下功能:
- 检测下游集群的资源变化,如内存使用率、CPU 使用率等
- 把下游集群从“当前”状态变更到“目标”状态
- 配置集群和项目的访问控制策略
- 通过调用 Docker Machine 和 Kubernetes Engine,如 RKE 和 GKE,创建集群。
默认状态下,集群控制器连接 Agent,Rancher 才可以与下游集群通信。如果集群 Agent 不可用,集群控制器可以连接到节点 Agent,通过节点 Agent 实现用户和集群之间的通信。
集群 Agent,也叫做“cattle-cluster-agent”,是在下游集群中运行的组件,它具有以下功能:
- 连接使用 Rancher 部署的 Kubernetes 集群(RKE 集群)中的 Kubernetes API。
- 管理集群内的工作负载,pod 创建和部署。
- 根据每个集群的设置,配置 Role 和 RoleBindings
- 实现集群和 Rancher Server 之间的消息传输,包括事件,指标,健康状况和节点信息等。
3. 节点agents
如果集群 Agent 不可用,下游集群中的其中一个节点 Agent 会创建一个通信管道,由节点 Agent 连接到集群控制器,实现下游集群和 Rancher 之间的通信。使用DaemonSet部署节点 Agent ,这种方式可以确保下游集群内每个节点都成功运行节点 Agent。执行集群操作时,可以使用这种方式将指令下发到下游集群。集群操作包括:升级 Kubernetes 版本、创建 etcd 节点备份和恢复 etcd 节点
4. 授权集群端点
Rancher Server 和下游集群之间有明显的延迟,或 Rancher Server 不可用时,用户可以通过授权集群端点连接下游集群,实现 Rancher Server 和集群之间的通信,降低网络延迟。只有 Rancher 部署的 Kubernetes 集群(RKE 集群)可以使用授权集群端点这个功能。导入的集群、托管的集群等,并不能够使用此功能。
kube-api-auth
微服务向授权集群端点提供了用户认证功能。使用 kubectl
访问下游集群时,集群的 Kubernetes API Server 通过 kube-api-auth
对用户进行认证。kube-api-auth
认证功能同样只在 Rancher 部署的 Kubernetes 集群(RKE 集群)中有效。
重要文件
rancher-cluster.yml
:RKE 集群配置文件。kube_config_cluster.yml
:集群的 kubeconfig 文件,它包含了访问集群的全部权限。如果 Rancher 出现故障,无法运行,您可以使用这个文件连接通过 Rancher 部署的 Kubernetes 集群(RKE 集群)。rancher-cluster.rkestate
:Kubernetes 集群状态文件,该文件含有访问集群的所有权限。只有使用 RKE 0.2.0 或以上版本时,才会创建该文件。
注意:后两个文件名的“rancher-cluster”部分取决于您如何命名 RKE 集群的配置文件。