再战 k8s(十七):Rancher

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再战 k8s(十七):Rancher相关的知识,希望对你有一定的参考价值。

文章目录

产品简介

概述

Rancher 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。

Rancher 1.x 最初是为了支持多种容器编排引擎而构建的,其中包括 Rancher 自己的容器编排引擎 Cattle。但随着 Kubernetes 在市场上的兴起,Rancher 2.x 已经完全转向了 Kubernetes。Rancher 2.x 可以部署和管理在任何地方运行的 Kubernetes 集群。

**说明:**下文中所有的“Rancher”代指的都是 Rancher 2.x。

Rancher 可以创建来自 Kubernetes 托管服务提供商的集群,自动创建节点并安装 Kubernetes 集群,或者导入任何已经存在的 Kubernetes 集群。

Rancher 通过支持集群的身份验证和基于角色的访问控制(RBAC),使系统管理员能够从一个位置控制全部集群的访问。Rancher 可以对集群及其资源进行详细的监控和并在需要时发送告警,也可以将容器日志发送给外部日志系统,并通过应用商店与 Helm 集成。如果您具有外部 CI/CD 流水线系统,则可以将其与 Rancher 对接,如果没有,Rancher 也提供了简单易用的流水线来帮助您自动部署和升级工作负载。除此之外,Rancher 还有很多开箱即用的功能来帮助您更好的管理集群和业务应用,例如多集群应用,全局 DNS,服务网格,安全扫描,集群模版和基于 OPA 的策略管理等功能。

总而言之,Rancher 是一个全栈式的 Kubernetes 容器管理平台,也是一个可以在任何地方都能成功运行 Kubernetes 的工具。

Run Kubernetes Everywhere

Kubernetes 已经成为了容器管理的标准。大多数云服务和虚拟服务的提供商现在将 Kubernetes 作为标准的基础设施。用户可以使用 Rancher Kubernetes Engine(简称 RKE),或其他云服务提供商的容器服务,如 GKE、AKS、 EKS 等,创建 Kubernetes 集群。用户也可以将已有集群导入 Rancher,集中管理。

满足 IT 需求规范

Rancher 支持集中化认证、权限控制、监控和管理所有 Kubernetes 集群。您可以使用 Rancher 完成以下操作:

  • 使用活动目录(Active Directory)的认证信息访问云端 Kubernetes 集群,如 GKE、AKS、EKS 等。
  • 设置用户、用户组、项目组、集群、云服务的权限控制策略和安全策略。
  • 一站式监控您名下所有集群的健康状态。

赋能 DevOps 开发团队

Rancher 提供了一个简单直接的用户界面给 DevOps 工程师管理他们的应用程序。用户不需要对 Kubernetes 有深入的了解,即可使用 Rancher。

Rancher 应用商店包含了一套内置的 DevOps 开发工具。Rancher 通过了一些云原生的生态系统认证,包括安全工具、监控系统、容器镜像、存储和网络驱动等。

以下的示意图讲述了 Rancher 在 IT 管理团队和 DevOps 开发团队之间扮演的角色。DevOps 团队把他们的应用部署在他们选择的云上面,可以是公有云,也可以是私有云。IT 管理员负责管理用户、集群、多云之间的权限。

Rancher API Server 的功能

Rancher API Server 是基于嵌入式 Kubernetes API Server 和 ETCD 数据库建立的,它提供了以下功能:

授权和角色权限控制

使用 Kubernetes 的功能

  • 运行 Kubernetes 集群: Rancher API server 可以在已有节点上运行 Kubernetes 集群 ,或对 Kubernetes 进行版本升级
  • 应用商店管理: Rancher 可以使用Helm Charts 应用商店重复部署应用。
  • 项目管理: 项目,是 Rancher 中的一个概念,Kubernetes 中并没有这个概念。项目由一个集群内的多个命名空间和多个访问控制策略组成,允许用户以组为单位,一次管理多个命名空间,对其进行 Kubernetes 相关操作。Rancher 用户界面提供了 项目管理项目内应用管理 两个功能。
  • 流水线: 流水线 可以帮助开发者快速高效地上线新软件。Rancher 支持给每一个项目单独配置流水线。
  • Istio: Rancher 与 Istio 集成,管理员或集群所有者可以将 Istio 交给开发者,然后开发者使用 Istio 执行安全策略,排查问题,或为快速发布、灰度发布和 A/B 测试进行流量控制。

配置云端基础信息

  • 同步节点信息: Rancher API server 可以同步集群内所有节点的信息。
  • 配置云端基础信息: 当 Rancher 与云服务提供商配置完了之后,可以在云端动态配置新节点持久化存储

查看集群信息

  • 日志: Rancher 可以跟多种主流日志工具集成,您可以设置 集群日志项目日志
  • 监控: 使用 Rancher,您可以通过 Prometheus 监控集群节点、Kubernetes 组件、软件部署的状态和进度。您可以设置 集群监控项目监控
  • 告警信息: 您需要随时知道集群和项目的计划和非计划事件,才可以提高公司的运行效率。您可以设置集群告警项目告警

编辑下游集群

对于已有集群而言,启动集群的方法决定了可编辑的选项和设置。例如,只有通过 RKE 启动的集群才有可编辑的集群选项。使用 Rancher 创建集群后,集群管理员可以管理集群会员,开启 Pod 域安全策略,管理节点池,以及进行 其他操作。下表总结了每一种类型的集群和对应的可编辑的选项和设置:

功能Rancher 启动的 Kubernetes 集群 (RKE 集群)托管的 Kubernetes 集群导入的 Kubernetes 集群
使用 kubectl 和 kubeconfig 文件访问集群
添加集群成员
编辑集群*
管理节点
管理持久卷和存储类
管理项目和命名空间
使用应用商店
使用配置工具(告警、通知、日志、监控和 Istio)
克隆集群
证书轮换的能力
备份您的 Kubernetes 集群的能力
恢复和还原 etcd 的能力
当集群不再能从 Rancher 访问时,清理 Kubernetes 组件
配置 Pod 安全策略
运行安全扫描

*:除了 K3s 集群外,Rancher 不支持为其他类型的导入集群配置集群选项。


Rancher Server 架构

Rancher Server 由认证代理(Authentication Proxy)、Rancher API Server、集群控制器(Cluster Controller)、etcd 节点和集群 Agent(Cluster Agent) 组成。除了集群 Agent 以外,其他组件都部署在 Rancher Server 中。

下图描述的是用户通过 Rancher Server 管控 Rancher 部署的 Kubernetes 集群(RKE 集群)和托管的 Kubernetes 集群的(EKS)集群的流程。以用户下发指令为例,指令的流动路径如下:

  1. 首先,用户通过 Rancher UI(即 Rancher 控制台) Rancher 命令行工具(Rancher CLI)输入指令;直接调用 Rancher API 接口也可以达到相同的效果。
  2. 用户通过 Rancher 的代理认证后,指令会进一步下发到 Rancher Server 。
  3. 与此同时,Rancher Server 也会执行容灾备份,将数据备份到 etcd 节点。
  4. 然后 Rancher Server 把指令传递给集群控制器。集群控制器把指令传递到下游集群的 Agent,最终通过 Agent 把指令下发到指定的集群中。

如果 Rancher Server 出现问题,我们也提供了备用方案,您可以通过授权集群端点管理集群。

考虑到性能表现和安全因素,我们建议您使用两个 Kubernetes 集群,分开部署 Rancher Server 和工作负载。部署 Rancher Server 后,您可以创建或导入集群,然后在这些集群上运行您的工作负载。

通过Rancher认证代理管理 Kubernetes 集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZw5Ja0l-1647051744075)(https://docs.rancher.cn/assets/images/rancher-architecture-rancher-api-server-2743dae746c64cd2ad66711908be4108.svg)]

您可以在单个节点或高可用的 Kubernetes 集群上安装 Rancher。由于单节点安装只适用于开发和测试环境,而且单节点和高可用集群之间无法进行数据迁移,所以我们建议您从一开始就使用高可用的 Kubernetes 集群来部署 Rancher Server,而且您需要分开部署运行 Rancher Server 的集群和运行自己业务的下游集群。

与下游集群交互

本小节通过两个用户 Bob 和 Alice 的案例,讲解 Rancher 启动和管理下游集群的具体过程,和每个 Rancher 组件的作用。

下图演示了集群控制器、集群 Agent 和 Node Agent 是如何允许 Rancher 控制下游集群的。

与下游集群通信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpXRBjSF-1647051744076)(https://docs.rancher.cn/assets/images/rancher-architecture-cluster-controller-39be909f05f9b9a0e356df60dd00ea5e.svg)]

图中的数字和对应的描述如下:

  1. 认证代理
  2. 集群控制器和集群 Agent
  3. 节点 Agents
  4. 授权集群端点

认证代理

图左上角一个叫做 Bob 的用户希望查看下游集群“User Cluster 1”里面正在运行的 pod。Bob 发起的请求会首先经过认证代理,通过认证之后,Rancher 的 认证代理才会把 API 调用命令转发到下游集群。

认证代理集成了多种认证方式,如本地认证、活动目录认证、GitHub 认证等。在发起每一个 Kubernetes API 调用请求的时候,认证代理会去确认请求方的身份,在转发调用命令前,请设置正确的 Kubernetes impersonation 的消息头。

Rancher 使用 Service Account (Service Accout 提供了一种方便的认证机制)和 Kubernetes 进行交互。

默认状态下,Rancher 生成一个包含认证信息的kubeconfig文件,为 Rancher Server 和下游集群的 Kubernetes API Server 之间的通信提供认证。该文件包含了访问集群的所有权限。

集群控制器和集群 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 之间的消息传输,包括事件,指标,健康状况和节点信息等。

节点 Agent

如果集群 Agent 不可用,下游集群中的其中一个节点 Agent 会创建一个通信管道,由节点 Agent 连接到集群控制器,实现下游集群和 Rancher 之间的通信。

部署节点 Agent 的方式有很多,我们建议您使用DaemonSet部署节点 Agent ,这种方式可以确保下游集群内每个节点都成功运行节点 Agent。执行集群操作时,可以使用这种方式将指令下发到下游集群。集群操作包括:升级 Kubernetes 版本、创建 etcd 节点备份和恢复 etcd 节点。

授权集群端点

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 Server 位于美国,用户“Alice”和她管理的下游集群“User Cluster 1”位于澳大利亚。虽然 Alice 可以使用 Rancher 控制台管理 User Cluster 1 中的资源,但是她发出的请求要从澳大利亚发送到美国的 Server 端,然后再由 Server 代理回澳大利亚的集群端,澳大利亚集群端处理完请求后,再返回给美国的 Server 端,最后才能返回给澳大利亚的“Alice”。因为美澳之间的距离非常遥远,所以发送的请求和返回的请求结果都会存在显著的延迟。Alice 可以使用授权集群端点,降低延迟,更好地掌控她的下游集群。

为下游集群开启授权集群端点后,Rancher 会在“kubeconfig”文件中额外生成一段 Kubernetes context,来允许用户直接连接到集群。kubeconfig 这个文件中含有 kubectlhelm 的认证信息。

如果 Rancher 出现问题,无法连接,您需要使用 kubeconfig 中的 context 帮助您访问集群。因此,我们建议您导出一份 kubeconfig 文件副本,保存到本地,以备不时之需。更多详细信息请参考 kubectl 和 kubeconfig 文件

重要文件

下列文件在运维、排查问题和升级集群的场景中都会用到:

  • rancher-cluster.yml :RKE 集群配置文件。
  • kube_config_rancher-cluster.yml :集群的 kubeconfig 文件,它包含了访问集群的全部权限。如果 Rancher 出现故障,无法运行,您可以使用这个文件连接通过 Rancher 部署的 Kubernetes 集群(RKE 集群)。
  • rancher-cluster.rkestate :Kubernetes 集群状态文件,该文件含有访问集群的所有权限。只有使用 RKE 0.2.0 或以上版本时,才会创建该文件。

注意: 后两个文件名的“rancher-cluster”部分取决于您如何命名 RKE 集群的配置文件。

更多详细信息请参考kubeconfig 文件

启动 Kubernetes 集群所需工具

下游 Kubernetes 集群的类型决定了启动集群需要的工具。集群类型主要分为以下几种:

Rancher 通过云供应商自动创建节点部署 Kubernetes 集群

Rancher 可以动态启动位于云上的节点,如 Amazon EC2、DigitalOcean、Azure 和 vSphere,然后在节点上安装 Kubernetes。Rancher 使用 RKEdocker-machine启动这种集群。

Rancher 通过自定义主机部署的 Kubernetes 集群

配置这种集群时,Rancher 可以在已有的虚拟机、物理机或云主机上安装 Kubernetes。这种集群叫自定义集群。Rancher 使用RKE启动这种集群。

云服务供应商提供的托管的 Kubernetes 集群

配置这种集群时,Kubernetes 由云服务供应商安装,如 GKE、ECS 和 AKS。Rancher 使用kontainer-engine来调用云厂商的 API 来启动集群。

导入的 Kubernetes 集群

这种情况下,Rancher 只需要连接到已经配置好 Kubernetes 的集群。因此,Rancher 只设置 Rancher Agent 与集群通信,不直接启动集群。

Rancher Server 组件和源代码

下图说明了 Rancher Server 都有哪些组件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUXraHn8-1647051744078)(https://docs.rancher.cn/assets/images/rancher-architecture-rancher-components-64200c35eda5939f425c67f5a498f96f.svg)]

Rancher 的 GitHub 源代码仓库如下:

上面只列举了 Rancher 最重要的组件。请查看参与 Rancher 开源贡献,获取详细信息。请查看 rancher/rancher 代码库中的 go.mod 文件,获取 Rancher 使用的所有库和项目。


查看更多

https://docs.rancher.cn/rancher2/ Rancher 2.0.x - 2.4.x 中文文档

https://docs.rancher.cn/rancher2.5/ Rancher 2.5 中文文档

以上是关于再战 k8s(十七):Rancher的主要内容,如果未能解决你的问题,请参考以下文章

再战 k8s:deployment

在k8s集群中去部署nginx服务以及配置图片,mp4播放(通过rancher操作)

再战 k8s(13):Pod 的扩缩容

再战 k8s:kebuctl

再战 k8s(10):job

再战 k8s:ConfigMap