K8S集群管理平台Rancher(1):基础入门

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: K8S集群管理平台Rancher(1):基础入门

一、Rancher概述

1.1 什么是Rancher

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


当然 Rancher 2.x 已经完全转向了 Kubernetes。Rancher 2.x 可以部署和管理在任何地方运行的 Kubernetes 集群。


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


Rancher 通过支持集群的身份验证和基于角色的访问控制(RBAC),使系统管理员能够从一个位置控制全部集群的访问。Rancher 可以对集群及其资源进行详细的监控和并在需要时发送告警,也可以将容器日志发送给外部日志系统,并通过应用商店与 Helm 集成。


若具有外部 CI/CD 流水线系统,则可以将其与 Rancher 对接,如果没有,Rancher 也提供了简单易用的流水线实现自动部署和升级工作负载。除此之外,Rancher 还有很多开箱即用的功能用于更好的管理集群和业务应用,例如多集群应用,全局 DNS,服务网格,安全扫描,集群模版和基于 OPA 的策略管理等功能。


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


61.png

1.2 Rancher Server功能

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


授权和角色权限控制

用户管理: Rancher API server 除了管理用户在公司内部的使用的认证信息之外,还管理用户访问外部服务所需的认证信息,如登录活动目录或 GitHub 所需的账号密码。

授权: Rancher API server 负责管理权限控制策略 和 安全策略。

基于Rancher使用 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 组件、软件部署的状态和进度。可以设置 集群监控 或 项目监控。

告警信息: 需要随时知道集群和项目的计划和非计划事件,才可以提高公司的运行效率。可以设置集群告警 或 项目告警。


1.3 Rancher架构设计

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


63.png


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


首先,用户通过 Rancher UI(即 Rancher 控制台)、Rancher API 接口、Rancher 命令行工具(Rancher CLI)输入指令;

用户通过 Rancher 的代理认证后,指令会进一步下发到 Rancher Server;

与此同时,Rancher Server 也会执行容灾备份,将数据备份到 etcd 节点;

然后 Rancher Server 把指令传递给集群控制器。集群控制器把指令传递到下游集群的 Agent,最终通过 Agent 把指令下发到指定的集群中。

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


提示:考虑到性能和安全因素,通常建议使用两个 Kubernetes 集群,分开用于部署 Rancher Server 和生产环境。部署 Rancher Server 后,可以创建或导入集群,然后使用Rancher Server创建用于生产的 Kubernetes 集群。


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


1.4 Rancher和下游集群交互

如下图示例,通过两个用户 Bob 和 Alice,理解 Rancher 启动和管理下游集群的具体过程,以及每个 Rancher 组件的作用。


该示例涉及集群控制器、集群 Agent 和 Node Agent等组件。


64.png


认证代理

如上视图中 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 不可用,集群控制器可以连接到Node Agent,通过Node Agent 实现用户和集群之间的通信。


集群 Agent,也叫做“cattle-cluster-agent”,是在下游集群中运行的组件,它具有以下功能:


连接使用 Rancher 部署的 Kubernetes 集群(RKE 集群)中的 Kubernetes API;

管理集群内的工作负载,pod 创建和部署;

根据每个集群的设置,配置 Role 和 RoleBindings;

实现集群和 Rancher Server 之间的消息传输,包括事件,指标,健康状况和节点信息等。

节点 Agents

如果集群 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 这个文件中含有 kubectl 和 helm 的认证信息。


如果 Rancher 出现问题,无法连接,需要使用 kubeconfig 中的 context 帮助访问集群。因此,建议导出一份 kubeconfig 文件副本,保存到本地,以备不时之需。


1.5 Rancher相关文件

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 集群的配置文件。


1.6 Rancher创建的Kubernetes类型

Rancher通常可以创建如下几种类型的下游 Kubernetes 集群:


Rancher自动创建节点并部署Kubernetes集群:Rancher 可以动态创建位于云上的节点(Node),如 Amazon EC2、Azure 和 vSphere等,然后在节点上安装 Kubernetes。Rancher 使用 RKE 和 docker-machine创建这种集群。

Rancher通过已有的节点并部署Kubernetes集群:配置这种集群时,Rancher 可以在已有的虚拟机、物理机或云主机上安装 Kubernetes。这种集群叫自定义集群。Rancher 使用RKE创建这种集群。

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

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


二、优点和不足

2.1 优点

1、采用图形化方式:易用的Web管理界面,在Docker易用性的基础上,再一次降低了使用容器技术部署容器应用的难度。


2、支持多种调度器:通过环境模板,很容易地创建和部署Cattle、Swarm、K8S、Mesos容器集群管理调度平台。


3、管理主机集群:管理对象是多台主机的集群,而不仅仅是单台容器主机,创建和管理几台、几十台应用服务器集群,只需要Ctrl+C、Ctrl+V,复制粘贴就解决了。


4、内置应用商店:使用其中的WordPress模板,创建一个WordPress博客系统,只需点点鼠标,部署难度不高于申请一个免费的电子邮箱!


5、资源弹性分配:内置应用负载均衡器,“服务”最小只需1个容器实例,当负载不够/或过剩时,只需点点鼠标,增加/减少“服务”中容器的实例数,即可解决问题,应用系统具有天生的弹性扩容能力。



2.2 不足

1、K8S部署的问题:由于国内网络和国外网络访问的问题,在国内部署K8S集群,有点不方便;


2、应用商店的问题:默认的Rancher官方认证和社区贡献的应用商店内容有限,应用还不够丰富,基本上都是网络和存储等基础的应用;个别应用部署后,无法通过相同的操作,再部署同样的另一套应用,比如Rancher NFS;


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
22 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
83 5
|
7天前
|
存储 运维 Kubernetes
Kubernetes集群管理:从基础到进阶
Kubernetes集群管理:从基础到进阶
|
17天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
17天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
51 3
|
20天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
30 3
|
18天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
7天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
|
7天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
17 0
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!