热卖商品
新闻详情
Helm 入门:安装部署与使用 - DockOne.io
来自 : dockone.io/article/9...
发布时间:2021-03-25
【编者的话】本文将用示例展示 Helm 的基本概念、如何修改 chart 满足你的需求。
在 Kubernetes 上部署应用程序可能需要许多相关的部署组件或规范文件:Deployment、Service、PVC、ConfigMap、ServiceAccount……
管理这些资源并将它们与已部署的应用程序关联起来是一项挑战,尤其是跟踪已部署的应用程序(实际状态)及其原始来源(授权或期望状态)的更改和更新时。该应用程序的版本被锁定在 Kubernetes 平台中,使它们完全脱离了规范本身的版本(通常会在外部源代码管理库中进行跟踪)。
此外,静态规范通常不能在给定域、环境或云提供商之外重复使用,但需要花费大量时间进行创作和调试。工具可用于基于正则表达式提供的字符串进行替换,但这种自动化还需要编写或自定义以执行我们需要的任务,有些时候,这种方式会出现错误。
Helm 通过将相关的 Kubernetes 规范打包成一个简单的部署组件(称为 chart)来解决这些问题,这些组件可以参数化以获得最大的灵活性。同时,Helm 也能使用户在运行时中自定义应用程序包。如果你熟悉 apt 包或 yum 等 OS 包管理器以及 deb 或 rpm 等软件包,那么 Helm 以及 Helm chart 的概念你应该很熟悉。如果你想和更多Helm技术专家交流,可以加我微信liyingjiese,备注『加群』。群里每周都有全球各大公司的最佳实践以及行业最新动态。
先决条件首先,你需要一个正在运行的 Kubernetes 集群,一个本地 Docker 客户端,以及一个预配置的 kubectl 客户端和 Kubernetes 集群配置。Helm 将使用 kubectl 在已配置的集群上部署 Kubernetes 资源。
注:Helm 的默认安装是不安全的!安装 HelmHelm 有两个部分:Helm 客户端(Helm)和 Helm 服务器(Tiller)。首先,你需要通过 Helm 客户端在 Kubernetes 集群上安装 Tiller。这里需要注意,用 Helm 客户端来部署 Tiller 服务器不是必须的,但现在这样做很方便。
Helm 客户端可以从源代码或预构建的二进制版本安装,通过 Linux 上的 Snap、macOS 上的 Homebrew 或 Windows 上的 Chocolatey 安装。但 Helm GitHub repo 还拥有一个安装程序 shell 脚本,该脚本将自动获取最新版本的 Helm 客户端并在本地安装。
下面是 Ubuntu 16.04 的演示示例,其中 Kubernetes 使用 kubeadm 在本地安装。



默认情况下,Helm 客户端使用 socat 设置端口转发到 Tiller 窗口。但在我们的例子中,由于 socat 已经安装为使用 kubeadm 进行 Kubernetes 集群初步设置的一部分,所以你并不需要执行这一步。
下面是安装时的一个例子:

此时我们应该在集群上部署 Tiller。
TillerTiller 通常在你部署的 Kubernetes 集群上运行。对于开发,它也可以在本地运行并配置为与远程 Kubernetes 集群通信的方式(这很方便)!
将 Tiller 安装到集群中的最简单方法就是运行 helm init。然后 Helm 将验证 Helm 本地环境是否已正确设置(或在必要时进行设置),使用 kubeconfig 的 current-context 连接到与 kubectl 相同的集群并安装 Tiller Pod。
init 有一堆选项来影响它的行为:
--canary-image:安装 Tiller 的 canary 版本(测试最新功能);--client-only:本地配置,但不安装 Tiller;--kube-context:使用命名 context 来替代 ~/.kube/config 文件中的 current-context;--node-selectors:指定安排 Tiller Pod 所需的节点标签;--override:操纵最终 Tiller 清单的指定属性;
* 接受 Tiller 部署清单中任何有效属性的有效值--output:跳过 Tiller 部署清单的安装,只需将部署清单以 JSON 或 YAML 格式输出到 stdout 中;--tiller-image:使用除最新版本之外的特定 Tiller 版本;--upgrade:将 Tiller 升级到最新版本。
你也可以通过这个文档了解更多:https://docs.helm.sh/helm/#helm-init。
让我们 init 通过使用 --output 标志来看一下将要部署的内容并通知它 output yaml(或者如果你愿意,可以使用 json):

请注意两个环境变量:TILLER_NAMESPACE 和 TILLER_HISTORY_MAX 。--tiller-namespace 会影响的命名空间;TILLER_HISTORY_MAX 用于限制每个版本保存的最大修订数(0 表示没有限制),具有无限数量的修订会对性能产生影响,因此你需要在实践中使用 --history-max 标志将其设置为合理值。
Tiller 和 RBAC限制 Tiller 将资源安装到某些命名空间是个好主意。使用 RBAC 时,我们可以通过为 Kubernetes API 提供身份(Kubernetes 服务帐户)并使用 Kubernetes 角色和绑定为其分配范围权限来限制任何应用程序对 Kubernetes API 进行访问。
这次超时我们可以将配置保持在最低限度,为 Tiller 分配集群管理集群角色,以便它可以部署到任何命名空间。
如果你的集群不是本地集群或测试集群,请不要在家中执行此操作!
首先,创建服务帐户:



请注意,默认情况下,Tiller 会使用不安全的 “允许未经身份验证的用户” 策略进行部署。为了防止这种情况,请 helm init 使用-tiller-tls-verify 标志运行。有关保护安装的更多信息,请参阅:https://docs.helm.sh/using_helm/#securing-your-helm-installation。
注:默认的 Tiller 是不安全的!我们可以像在任何其他 Kubernetes 资源上一样在我们的集群上找到 Tiller:


探索 chart众所周知,chart 是一组 spec 文件,它们定义了一组 Kubernetes 资源(如服务、部署等),通常包含将应用程序部署为模板所需的所有资源。chart 资源模板使用户能够通过为模板中定义的某些(或所有)变量提供值来自定义,在安装时部署呈现资源的方式。
chart 还包括所有已定义变量的默认值,只需要很少(或不需要)自定义就能轻松部署 chart。与其他软件包管理器一样,我们希望使用 update 命令从我们配置的 repos 中获取 chart 的最新列表和更新:

列出你的 Helm repos 以显示已配置的内容:

该 helm search 命令将向我们显示官方存储库中的所有可用 chart(因为它是唯一配置和更新的 repo):

另外,请注意 CHART VERSION 和 APP VERSION 列。前者是 Helm chart 版本,必须按照 Helm 项目的规则,遵循 SemVer 2 格式。后者是实际软件的版本,在 Helm 中以自由形式存在,但与软件的发布规则相关。
helm search 可以显示所有可用的 chart。你可以通过使用过滤器进行搜索来缩小搜索结果范围:


部署 chart稍后我们将探索 chart 的结构,但为了说明部署 chart 是多么容易,我们可以使用 repo 中的 chart。要安装 chart,请使用 helm install 命令,该命令仅需要一个参数:chart 的名称。你可以使用官方 helm repo 提供的容器化 Docker 注册表。
部署注册表:

Helm 通过为所有变量注入默认值来呈现 Kubernetes 资源模板,然后通过将它们作为静态规范文件提交到 Kubernetes API 来部署 Kubernetes 集群上的资源。
安装 chart 后会创建一个新的 Helm 发布对象,上面的这个版本被命名为“kissable-clownfish”(如果你想使用你自己的版本名称,只需使用带有 install 命令标志的 --name)。
Helm Release 是一组基于 chart 的已部署资源。每次安装 chart 时,它都会使用自己的版本名称部署一整套 Kubernetes 资源。独特的命名有助于我们跟踪 Kubernetes 资源的相关性,并允许我们使用不同的自定义方式多次部署 chart。
在安装过程中,Helm 将打印有关创建资源的有用信息,在我们的示例中,就是 ConfigMap、Deployment、Secret 和 Service。要再次查看它,你可以使用 helm status 版本名称。我们需要使用我们新的注册表服务器,NOTES 输出的部分提供了一些使用它的线索:




这很简单,但我们只使用此 chart 的默认配置选项。你可能希望在部署之前自定义 chart。要查看给定 chart 可配置的选项,请使用 helm inspect values。
使用 Ctrl + C(^C)杀死你的进程端口,然后检查 chart 值:

但这些值来自哪里?
chart 剖析chart 是以 chart 命名目录中的文件集合。到目前为止,我们只从远程仓库部署了一个 chart ,你可以通过查看 GitHub 上 docker-registry chart 的链接看到这些文件。
安装 chart 时,Helm 将目录的内容作为存档下载,并将其本地缓存在 Helm 客户端的工作空间目录中。默认位置是 ~/.helm :


使用 fetch 命令和 --untar 会在我们的本地系统上生成一个 unpacked chart:


先决条件:启用 Beta API 的 Kubernetes 1.4+ —— 底层基础架构中的 PV 配置器支持。
更新发布如果要更改发行版的配置,你可以使用 helm upgrade 命令。Helm 会更新自上次发布以来发生过变化的内容。Upgrade 与 install 使用相同的覆盖标志,因此你可以在初始安装或稍后的某个时候自定义 chart 。
我们最初的 Docker Registry Service 是 ClusterIP 类型,这就是我们需要端口转发的原因:


在更新期间或初始安装期间,有两种方法可以传递配置数据:
--values(或 -f):指定带有覆盖的 YAML 文件--set:在命令行上指定覆盖
基本:--set name=value==name: value(键值对以逗号分隔)* 集支持多个复杂值,--set servers.port=80 变为:



我们知道这个 type 是一个服务,所以我们可以设置它的值为 --set service.type=:

我们可以用 helm get values 来查看新设置是否生效。

让我们看看它是否有效:

默认情况下,Docker 只信任 localhost 上的安全远程注册表或不安全注册表。由于 Kubernetes 在容器中运行我们的注册表,即使 Docker 守护程序和 docker-registry 在同一主机上运行,注册表也被视为“远程”。我们的 port-forward 使用了 localhost,因此 Docker 允许我们推送,但这次不会让我们这样通过:

在 Kubernetes 主机上执行下一步很可能会破坏部署 kubeadm 的集群,因为它需要重新启动 Docker 并且所有 Kubernetes 服务都在容器中运行。因此,请使用 Kubernetes 主机外部的 Docker 安装 。
通过在下面创建一个配置文件来配置我们的 Docker 守护程序 /etc/docker (将示例 IP 替换为你之前存储在 NODE_IP 中的节点的 IP):




原文链接:https://mp.weixin.qq.com/s/BTlkX9fRlxV1qo8eNs0qAQ
本文链接: http://helm.immuno-online.com/view-765531.html
发布于 : 2021-03-25
阅读(0)
最新动态
2017-03-27
2021-03-25
2021-03-25
2021-03-24
2021-03-25
2021-03-25
2021-03-25
2021-03-25
2021-03-25
2021-03-24
2014-11-21
2021-03-25
联络我们