Day 18 - Rancher Catalog(v2.0~v2.4) 介绍

本文将於赛後同步刊登於笔者部落格

有兴趣学习更多 Kubernetes/DevOps/Linux 相关的资源的读者,欢迎前往阅读

更多相关科技的技术分享,欢迎追踪 矽谷牛的耕田笔记

对於 Kubernetes 与 Linux Network 有兴趣的可以参阅笔者的线上课程

Rancher Application

Rancher v2.5 是一个非常重要的里程碑,有很多功能於这个版本进入了 v2 下一个里程碑,本章节要探讨的应用程序部署实际上也有这个转变。

Rancher Catalog 是 Rancher v2.0 ~ v2.4 版本最主要的部署方式,而 v2.5 则改成 Cluster Explorer 内的 App&Marketplace 的方式。
也可以将这个差异说成由 Cluster Manager 转换成 Cluster Explorer。

那为什麽这个已经要被废除的功能还需要来介绍?
主要是我自己针对 v2.5 的使用经验来看,我认为部署应用程序用 Cluster Manager 看起来还是比较简洁有力,相反的 Cluster Explorer 内的机制没有好到会让人觉得替换过去有加分效果。

所以接下来就针对这两个机制分享一下使用方式。

Rancher Catalog

Rancher Catalog 的核心概念分成两个

  1. 如何取得 Kubernetes 应用程序,这部分的资讯状态就称为 Catalog
  2. 将 Catalog 中描述的应用程序给实体化安装到 Kubernetes 中

Catalog 的核心精神就是要去哪边取得 Kubernetes 应用程序,Catalog 支援两种格式

  1. Git 专案,底层概念就是能够透过 git clone 执行的专案都可以
  2. Helm Server,说到底 Helm Server 就是一个 HTTP Server,这部分可以自行实作或是使用 chartmuseum 等专案来实作。

由於 Helm 本身还有版本差别, Helm v2 或是 Helm v3,因此使用上需要标注到底使用哪版本。

Catalog 也支援 Private Server,不过这边只支援使用帐号密码的方式去存取。使用权限方面 Catalog 也分成全 Rancher 系统或是每个 Kubernetes 丛集独立设定。

首先如下图,切换到 Global 这个范围,接者可以於 Tools 中找到 Catalog 这个选项。

或是如下图,切换到 ithome-dev 这个丛集中,也可以看到 Tools 中有 Catalog 的范围。

这边我们使用 Kubernetes Dashboard 这个专案作为一个示范,该专案的 Helm Chart 可以经由 https://kubernetes.github.io/dashboard 这个 Helm Server 去存取。

这类型的服务器预设都没有 index.html,所以存取会得到 404 是正常的,想要存取相关内容可以使用下列方式去存取 https://kubernetes.github.io/dashboard/index.yaml,这也是 helm 指令去抓取相关资源的办法,可以知道该 Server 上会有多少 Helm Charts 以及对应的版本有哪些。

点选右上方的 Add Catalog 就可以看到如下的设定视窗

该画面中我们填入上述资讯,如果是 Git 专案的位置还可以输入 branch,但是因为我们是 Helm Server,所以 Branch 的资讯就没有设定的意义。
最後顺便设定该 Helm Server 是基於 Helm v3 来使用的。

创建完毕後就意味 Rancher 已经可以透过这个 Catalog 去得到远方当前有哪些 应用程序以及拥有哪些版本,但是这并不代表 Rancher 已经知道。
一种做法就是等 Rancher 预设的同步机制慢慢等或是直接点选 Refresh 让 Rancher 直接同步该 Catalog 的资讯。

一种常见的情境就是你的 CI/CD 流程更新了 Helm Chart,推进一个版本,结果 Rancher 还不知道,这时候就可以 refresh 强制更新。

创建 Catalog 完毕後,下一件事情就是要从 Catalog 中找到一个可以用的应用程序,并且选择该应用程序的版本,如果是 Helm 描述的应用程序还可以透过 values.yaml 的概念去客制化应用程序。

应用程序的安装是属於最底层架构的,因此是跟 Project 绑定,从左上方切换到之前创立的 myApplication project,并且切换到到画面上方的 app 页面中。

该页面的右上方有两个按钮,其中 Manage Catalog 会切回到该专案专属的 Catalog 页面,因此 Catalog 本身实际上有三种权限,(Global, Cluster, Project).
右边的 Launch 意味者要创立一个应用程序。
点进去後会看到如下方的图

图中最上方显示的就是前述创立的 Catalog,该 Helm Server 中只有一个应用程序名为 kubernetes-dashboard

下面则是一些系统预设的 catalog,譬如 helm3-library,该 helm server 中则有非常多不同的应用程序。
其中这些预设提供的 helm chart 还会被标上 partner 的字样。

点选 kubernetes-dashboard 後就会进入到设定该应用程序的画面。

画面上会先根据 Helm Chart 本身的描述设定去介绍该 Helm Charts 的使用方式

接下来就要针对该应用程序去设定,该设定包含了

  1. 该应用程序安装的名称
  2. 该 Helm Chart 要用什麽版本,范例中选择了 4.5.0
  3. 该服务要安装到哪个 Kubernetes namespace 中
  4. 最下面称为 Answer 的概念其实就是 Helm Chart values,这边可以透过 key/value 的方式一个一个输入,或是使用 Edit as YAML 直接输入都可以

预设情况下我们不进行任何调整,然後直接安装即可。

安装完毕後就可以於外面的 App 页面看到应用程序的样子,其包含了

  1. 应用程序的名称
  2. 当前使用版本,如果有新版则会提示可以更新
  3. 状态是否正常
  4. 有多少运行的 Pod
  5. 是否有透过 service 需要被外部存取的服务

点选该名称可以切换到更详细的列表去看看到底该应用程序包含的 Kubernetes 资源状态,譬如 Deployment, Service, Configmap 等

如果该资源有透过 Service 提供存取的话, Rancher 会自动的帮该物件创建一个 Endpoint,就如同 Grafana/Monitoring 那样,可以使用 API Server 的转发来往内部存取。
譬如途中可以看到有产生一个 Endpoint,该位置就是基於 Rancher 的位置後面补上 cluster/namespace/service 等相关资讯来进行处理。

这类型的资讯也会於最外层的 App 介面中直接呈现,所以如果直接点选的话就可以很顺利地打该 Kubernetes Dashboard 这个应用程序。


最後也可以透过 Kubectl 等工具观察一下目标 namespace 是否有相关的资源,可以看到有 deployment/service 等资源

透过 Rancher Catalog 的机制就可以使用 Rancher 的介面来管理与存取这些服务,使用上会稍微简单一些。既然都可以透过 UI 点选那就有很大的机会可以透过 Terraform 来实现上述的操作。

接下来示范如何透过 Terraform 来完成上述的所有操作,整个操作会分成几个步骤

  1. 先透过 data 资料取得已经创立的 Project ID
  2. 创立 Catalog
  3. 创立 Namespace
  4. 创立 App
data "rancher2_project" "system" {
    cluster_id = "c-z8j6q"
    name = "myApplication"
}
resource "rancher2_catalog" "dashboard-global" {
  name = "dashboard-terraform"
  url = "https://kubernetes.github.io/dashboard/"
  version = "helm_v3"
}
resource "rancher2_namespace" "dashboard" {
  name = "dashboard-terraform"
  project_id = data.rancher2_project.system.id
}
resource "rancher2_app" "dashboard" {
  catalog_name = "dashboard-terraform"
  name = "dashboard-terraform"
  project_id = data.rancher2_project.system.id
  template_name = "kubernetes-dashboard"
  template_version = "4.5.0"
  target_namespace = rancher2_namespace.dashboard.id
  depends_on       = [rancher2_namespace.dashboard, ncher2_catalog.dashboard-global]
}

上述做的事情基本上跟 UI 是完全一样,创造一个 Catalog,输入对应的 URL 并且指名为 Helm v3 的版本。
然後接者创立 Namespace,因为使用 namespace,所以要先利用前述的 data 取得目标 project 的 ID,这样就可以把这个 namespace 挂到特定的 project 底下。

最後透过 catalog 名称, Template 的名称与版本来创造 App。
准备完毕後透过 Terraform Apply 就可以於网页看到 App 被创造完毕了。

透过 Terraform 的整合,其实可以更有效率的用 CI/CD 系统来管理 Rancher 上的应用程序,如果应用程序本身需要透过 Helm 来进行客制化,这部分也都可以透过 Terraform 内的参数来达成,所以可以更容易的来管理 K8s 内的应用程序,有任何需求想要离开时,就修改 Terraform 上的设定,然後部署即可。


<<:  Lifecycle

>>:  [Day4]区块链如何运作?

Day13 HTML三

今天的影片内容为介绍一些常用的元素,像是插入超连结与图片,以及表格的建立等~ 一起来看看让网页变得更...

Day30 - 总结

终於来到本次铁人赛的第30天,回顾当时报名的初衷,主要原因是以前在查技术问题时,过往许多系列文帮助我...

Day 23 - Either Monad

到目前为止,我们介绍 Maybe Monad 其是专门处理无值情境以及 IO Monad 则是处理同...

第十二天:初探 Gradle 任务

任务(Task)是 Gradle 运行时的基本单位,基本上所有我们输入的 Gradle 指令都是对应...

Day_07 : 让 Vite 来开启你的Vue 之 Vite 核心 esbuild

Hi Dai Gei Ho~ 我是Winnie~ 今天终於来到我的第七天,按照七天养成一个好习惯的说...