Open main menu
首页
专栏
课程
分类
归档
Chat
Sci-Hub
谷歌学术
Libgen
GitHub镜像
登录/注册
搜索
关闭
Previous
Previous
Next
Next
什么是Helm? Kubernetes 初学者快速入门教程
sockstack
/
232
/
2023-11-14 11:51:10
<p><span style="color: red; font-size: 18px">ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。</span><br><a href="https://ckai.xyz/?sockstack§ion=detail" target="__blank">https://ckai.xyz</a><br><br></p> <article class="_2rhmJa"><h1>什么是Helm? Kubernetes 初学者快速入门教程</h1> <p><article style="max-width: 100%;"></p> <p>在本教程中通过实践学习 Helm。了解 Helm 是什么以及如何使用 Helm 图表打包应用程序。管理 Kubernetes 中的升级和回滚</p> <p>如今,Kubernetes 已成为 DevOps 从业者编排容器的必备工具。有了应用程序的 Docker 映像后,您必须编写 YAML 清单来定义 Kubernetes 工作负载。接下来,使用<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fkubernetes.io%2Fdocs%2Freference%2Fkubectl%2F%3Fref%3Dgetbetterdevops" target="_blank">kubectl</a>命令部署它们。</p> <p>这种部署方式适用于只有一个应用程序的情况。当您开始拥有许多应用程序和多个环境时,它就会变得不堪重负。通常您会在 90% 的时间内定义相同的 YAML 文件。</p> <p>在这里,我们将重点介绍如何使用 Helm 智能地管理应用程序。</p> <hr> <h2>什么是Helm?</h2> <p><a href="https://links.jianshu.com/go?to=https%3A%2F%2Fgetbetterdevops.io%2Fcontent%2Fimages%2F2022%2F09%2Fimage-70.png" target="_blank">[图片上传失败...(image-8fa3af-1684742728274)]</a></p> <p><figcaption style="max-width: 100%; font-size: 0.75em; line-height: 1.5em; margin-top: 1em; width: 520px;"><a href="https://links.jianshu.com/go?to=https%3A%2F%2Fhelm.sh%2F%3Fref%3Dgetbetterdevops" target="_blank">来自https://helm.sh/</a>的 Helm 标志<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fhelm.sh%2F%3Fref%3Dgetbetterdevops" target="_blank"></a></figcaption></p> <p><a href="https://links.jianshu.com/go?to=https%3A%2F%2Fhelm.sh%2F%3Fref%3Dgetbetterdevops" target="_blank">Helm</a>是 Kubernetes 的包管理器。Helm 是一个开源项目,最初由<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fdeislabs.io%2F%3Fref%3Dgetbetterdevops" target="_blank">DeisLabs</a>创建并捐赠给<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fwww.cncf.io%2F%3Fref%3Dgetbetterdevops" target="_blank">Cloud Native Foundation</a> ( <em>CNCF</em> )。CNCF 现在维护并毕业了该项目。这意味着它已经成熟,而不仅仅是一种时尚。</p> <p>包管理在软件行业中并不是一个新概念。<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fwww.redhat.com%2Fsysadmin%2Fhow-manage-packages%3Fref%3Dgetbetterdevops" target="_blank">在 Linux 发行版上,您可以使用YUM/RPM</a>或<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fubuntu.com%2Fserver%2Fdocs%2Fpackage-management%3Fref%3Dgetbetterdevops" target="_blank">APT</a>等包管理器来管理软件安装和删除。在 Windows 上,您可以在 Mac 上使用<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fchocolatey.org%2F%3Fref%3Dgetbetterdevops" target="_blank">Chocolatey</a>或<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fbrew.sh%2F%3Fref%3Dgetbetterdevops" target="_blank">Homebrew</a>。</p> <p>Helm 让您可以在 Kubernetes 中打包和部署完整的应用程序。包称为“<em>图表”</em>。Helm 使用基于<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fpkg.go.dev%2Fhtml%2Ftemplate%3Fref%3Dgetbetterdevops" target="_blank">Go 模板的</a>模板系统从图表中呈现 Kubernetes 清单。图表是分隔模板和值的一致结构。</p> <p>作为一个包,图表还可以管理与其他图表的依赖关系。例如,如果您的应用程序需要 MySQL 数据库才能工作,您可以将图表作为依赖项包含在内。当 Helm 在 chart 目录的顶层运行时,它会安装整个依赖项。您只需一个命令即可将您的应用程序呈现并发布到 Kubernetes。</p> <p>Helm 图表使用版本来跟踪清单中的更改——因此您可以为特定的基础设施配置安装特定的图表版本。Helm 在专用工作区中保留所有已部署图表的发布历史记录。如果发生错误,这使得应用程序更新和回滚更加容易。</p> <p>Helm 允许您压缩图表。其结果是一个可与 Docker 镜像相媲美的工件。然后,您可以将其发送到远程存储库以实现可重用性和共享。</p> <hr> <h2>使用 Helm 有什么好处?</h2> <ul> <li>Helm 使您能够使用单个命令安装应用程序。图表可以包含其他图表作为依赖项。因此,您可以使用 Helm 部署整个堆栈。<a href="https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.docker.com%2Fcompose%2F%3Fref%3Dgetbetterdevops" target="_blank">您可以像docker-compose</a>一样使用 Helm ,但用于 Kubernetes。</li> <li>图表包括各种 Kubernetes 资源的模板,以形成一个完整的应用程序。这降低了微服务的复杂性并简化了它们在 Kubernetes 中的管理。</li> <li>可以压缩图表并将其发送到远程存储库。这为 Kubernetes 创建了一个应用程序工件。您还可以从存储库中获取和部署现有的 Helm 图表。这是可重用性和共享性的强项。</li> <li>Helm 在 Helm 工作区中维护已部署发布版本的历史记录。当出现问题时,回滚到以前的版本很简单——Helm 促进了金丝雀发布以实现零停机部署。</li> <li>Helm 使部署高度可配置。应用程序可以在部署期间即时定制。通过更改参数,您可以将同一个图表用于多个环境,例如开发、暂存和生产。</li> <li>简化 CI/CD 管道——转发 GitOps 最佳实践。</li> </ul> <hr> <h2>快速查看 Helm 解决的问题</h2> <p>Kubernetes 的基本做法是手动编写 YAML 清单。我们将创建最小的 YAML 文件以在 Kubernetes 中部署 NGINX。</p> <p>这是将创建 Pod 的 Deployment:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-cpp"><code class=" language-cpp">apiVersion<span class="token operator">:</span> apps<span class="token operator">/</span>v1 kind<span class="token operator">:</span> Deployment metadata<span class="token operator">:</span> name<span class="token operator">:</span> nginx spec<span class="token operator">:</span> selector<span class="token operator">:</span> matchLabels<span class="token operator">:</span> app<span class="token operator">:</span> nginx replicas<span class="token operator">:</span> <span class="token number">1</span> <span class="token keyword">template</span><span class="token operator">:</span> metadata<span class="token operator">:</span> labels<span class="token operator">:</span> app<span class="token operator">:</span> nginx spec<span class="token operator">:</span> containers<span class="token operator">:</span> <span class="token operator">-</span> name<span class="token operator">:</span> nginx image<span class="token operator">:</span> nginx<span class="token operator">:</span><span class="token number">1.21</span><span class="token number">.6</span> ports<span class="token operator">:</span> <span class="token operator">-</span> containerPort<span class="token operator">:</span> <span class="token number">80</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p><figcaption style="max-width: 100%; font-size: 0.75em; line-height: 1.5em; margin-top: 1em; width: 520px;">部署.yaml</figcaption></p> <p>该服务将 NGINX 暴露给外部。与 pod 的链接是通过选择器完成的:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-swift"><code class=" language-swift">apiVersion<span class="token punctuation">:</span> v1 kind<span class="token punctuation">:</span> <span class="token builtin">Service</span> metadata<span class="token punctuation">:</span> name<span class="token punctuation">:</span> nginx spec<span class="token punctuation">:</span> selector<span class="token punctuation">:</span> app<span class="token punctuation">:</span> nginx ports<span class="token punctuation">:</span> <span class="token operator">-</span> <span class="token keyword">protocol</span><span class="token punctuation">:</span> <span class="token constant">TCP</span> port<span class="token punctuation">:</span> <span class="token number">80</span> targetPort<span class="token punctuation">:</span> <span class="token number">8080</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p><figcaption style="max-width: 100%; font-size: 0.75em; line-height: 1.5em; margin-top: 1em; width: 520px;">用于 NGINX 的 Kubernetes 服务:service.yaml</figcaption></p> <p>现在我们必须使用 kubectl 命令创建以前的资源:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ kubectl create <span class="token operator">-</span>f deployment<span class="token punctuation">.</span>yaml $ kubectl create <span class="token operator">-</span>f service<span class="token punctuation">.</span>yaml <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>我们检查所有资源都已启动并正在运行:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-swift"><code class=" language-swift">$ kubectl <span class="token keyword">get</span> deployment <span class="token operator">-</span>l app<span class="token operator">=</span>nginx <span class="token constant">NAME</span> <span class="token constant">READY</span> <span class="token constant">UP</span><span class="token operator">-</span><span class="token constant">TO</span><span class="token operator">-</span><span class="token constant">DATE</span> <span class="token constant">AVAILABLE</span> <span class="token constant">AGE</span> nginx <span class="token number">1</span><span class="token operator">/</span><span class="token number">1</span> <span class="token number">1</span> <span class="token number">1</span> 8m29s $ kubectl <span class="token keyword">get</span> pods <span class="token operator">-</span>l app<span class="token operator">=</span>nginx <span class="token constant">NAME</span> <span class="token constant">READY</span> <span class="token constant">STATUS</span> <span class="token constant">RESTARTS</span> <span class="token constant">AGE</span> nginx<span class="token operator">-</span>65b89996ff<span class="token operator">-</span>dcfs9 <span class="token number">1</span><span class="token operator">/</span><span class="token number">1</span> <span class="token builtin">Running</span> <span class="token number">0</span> 2m26s $ kubectl <span class="token keyword">get</span> svc <span class="token operator">-</span>l app<span class="token operator">=</span>nginx <span class="token constant">NAME</span> <span class="token constant">TYPE</span> <span class="token constant">CLUSTER</span><span class="token operator">-</span><span class="token constant">IP</span> <span class="token constant">EXTERNAL</span><span class="token operator">-</span><span class="token constant">IP</span> <span class="token function">PORT</span><span class="token punctuation">(</span>S<span class="token punctuation">)</span> <span class="token constant">AGE</span> nginx <span class="token builtin">ClusterIP</span> <span class="token number">10.106</span><span class="token punctuation">.</span><span class="token number">79.171</span> <span class="token operator"><</span><span class="token keyword">none</span><span class="token operator">></span> <span class="token number">80</span><span class="token operator">/</span><span class="token constant">TCP</span> 4m58s <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <ul> <li>YAML 清单中的特定值是硬编码的,不可重复使用。</li> <li>要指定的冗余信息(例如标签和选择器)会导致潜在的错误。</li> <li>Kubectl 不会在执行后处理潜在的错误。您必须一个接一个地部署每个文件。</li> <li>没有变化的可追溯性。</li> </ul> <hr> <h2>从头开始创建 Helm Chart</h2> <p>Helm 可以在单个命令行中创建图表结构:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm create nginx <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <h3>了解 Helm 图表结构</h3> <p><a href="https://links.jianshu.com/go?to=https%3A%2F%2Fgetbetterdevops.io%2Fcontent%2Fimages%2F2022%2F09%2Fimage.png" target="_blank">[图片上传失败...(image-26dcb4-1684742728274)]</a></p> <p><figcaption style="max-width: 100%; font-size: 0.75em; line-height: 1.5em; margin-top: 1em; width: 520px;">Helm 图表的树结构</figcaption></p> <ul> <li> <code>Chart.yaml</code>:包含有关图表信息的 YAML 文件。</li> <li> <code>charts</code>:包含此图表所依赖的任何图表的目录。</li> <li> <code>templates</code>:这是 Helm 为您的服务、部署和其他 Kubernetes 对象找到 YAML 定义的地方。您可以为自己添加或替换生成的 YAML 文件。</li> <li> <code>templates/NOTES.txt</code>:这是一个模板化的纯文本文件,在成功部署图表后打印出来。这是一个有用的地方,可以简要描述使用图表的后续步骤。</li> <li> <code>templates/_helpers.tpl</code>:该文件是模板部分的默认位置。假定名称以下划线开头的文件内部<em>没有</em>清单。这些文件不会呈现给 Kubernetes 对象定义,但在其他图表模板中随处可用以供使用。</li> <li> <code>templates/tests</code>:验证图表在安装时是否按预期工作的测试</li> <li> <code>values.yaml</code>:此图表的默认配置值</li> </ul> <h3>自定义模板</h3> <p><code>values.yaml</code>部署图表时默认自动加载。这里我们将图片标签设置为<code>1.21.5</code>:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-bash"><code class=" language-bash"># Default values for nginx. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: nginx pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "1.21.5" imagePullSecrets: [] nameOverride: "" fullnameOverride: "" serviceAccount: # Specifies whether a service account should be created create: true # Annotations to add to the service account annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template name: "" podAnnotations: {} podSecurityContext: {} # fsGroup: 2000 securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 service: type: ClusterIP port: 80 ingress: enabled: false className: "" annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" hosts: - host: chart-example.local paths: - path: / pathType: ImplementationSpecific tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.local resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128Mi autoscaling: enabled: false minReplicas: 1 maxReplicas: 100 targetCPUUtilizationPercentage: 80 # targetMemoryUtilizationPercentage: 80 nodeSelector: {} tolerations: [] affinity: {} <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p><figcaption style="max-width: 100%; font-size: 0.75em; line-height: 1.5em; margin-top: 1em; width: 520px;">值.yaml</figcaption></p> <p>您可以指定一个特定的<code>values.yaml</code>文件来为特定于环境的设置自定义部署</p> <hr> <h2>安装 Helm Chart</h2> <p>部署 Helm chart 之前的好建议是,如果您进行了更新,请运行 linter:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">$ helm lint nginx <span class="token operator">==</span><span class="token operator">></span> <span class="token class-name">Linting</span> nginx <span class="token punctuation">[</span><span class="token class-name">INFO</span><span class="token punctuation">]</span> Chart<span class="token punctuation">.</span>yaml<span class="token punctuation">:</span> icon <span class="token keyword">is</span> recommended <span class="token number">1</span> <span class="token function">chart</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span> linted<span class="token punctuation">,</span> <span class="token number">0</span> <span class="token function">chart</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span> failed <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>运行 Helm 以试运行和调试模式安装图表以确保一切正常:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm install <span class="token operator">--</span>debug <span class="token operator">--</span>dry<span class="token operator">-</span>run nginx nginx <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>在调试模式下使用 helm linter 和试运行安装将为您节省宝贵的开发时间。</p> <p>要安装图表,请删除<code>--dry-run</code>标志:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-tsx"><code class=" language-tsx">$ helm install nginx nginx <span class="token constant">NAME</span><span class="token punctuation">:</span> nginx <span class="token constant">LAST</span> <span class="token constant">DEPLOYED</span><span class="token punctuation">:</span> Mon Mar <span class="token number">14</span> <span class="token number">12</span><span class="token punctuation">:</span><span class="token number">01</span><span class="token punctuation">:</span><span class="token number">46</span> <span class="token number">2022</span> <span class="token constant">NAMESPACE</span><span class="token punctuation">:</span> <span class="token keyword">default</span> <span class="token constant">STATUS</span><span class="token punctuation">:</span> deployed <span class="token constant">REVISION</span><span class="token punctuation">:</span> <span class="token number">1</span> <span class="token constant">NOTES</span><span class="token punctuation">:</span> <span class="token number">1</span>\<span class="token punctuation">.</span> Get the application <span class="token constant">URL</span> by running these commands<span class="token punctuation">:</span> <span class="token keyword">export</span> <span class="token constant">POD_NAME</span><span class="token operator">=</span><span class="token function">$</span><span class="token punctuation">(</span>kubectl <span class="token keyword">get</span> pods <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> <span class="token operator">-</span>l <span class="token string">"app.kubernetes.io/name=nginx,app.kubernetes.io/instance=nginx"</span> <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">"{.items[0].metadata.name}"</span><span class="token punctuation">)</span> <span class="token keyword">export</span> <span class="token constant">CONTAINER_PORT</span><span class="token operator">=</span><span class="token function">$</span><span class="token punctuation">(</span>kubectl <span class="token keyword">get</span> pod <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> $<span class="token constant">POD_NAME</span> <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">"{.spec.containers[0].ports[0].containerPort}"</span><span class="token punctuation">)</span> echo <span class="token string">"Visit http://127.0.0.1:8080 to use your application"</span> kubectl <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> port<span class="token operator">-</span>forward $<span class="token constant">POD_NAME</span> <span class="token number">8080</span><span class="token punctuation">:</span>$<span class="token constant">CONTAINER_PORT</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p><code>NOTES.txt</code>您可以看到说明如何连接到应用程序的模板化内容。</p> <p>现在,您可以在 Helm 工作区中检索发布:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-cpp"><code class=" language-cpp">$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nginx <span class="token keyword">default</span> <span class="token number">1</span> <span class="token number">2022</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">14</span> <span class="token number">12</span><span class="token operator">:</span><span class="token number">01</span><span class="token operator">:</span><span class="token number">46.926038</span> <span class="token operator">+</span><span class="token number">0100</span> CET deployed nginx<span class="token operator">-</span><span class="token number">0.1</span><span class="token number">.0</span> <span class="token number">1.0</span><span class="token number">.0</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre> </div> <hr> <h2>升级 Helm 版本</h2> <p>假设您想将容器映像升级到<code>1.21.6</code>以进行测试。</p> <p><code>values.yaml</code>我们将从命令行更改设置,而不是创建新的。</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-tsx"><code class=" language-tsx">$ helm upgrade nginx nginx <span class="token operator">--</span><span class="token keyword">set</span> image<span class="token punctuation">.</span>tag<span class="token operator">=</span><span class="token number">1.21</span><span class="token number">.6</span> Release <span class="token string">"nginx"</span> has been upgraded<span class="token punctuation">.</span> Happy Helming<span class="token operator">!</span> <span class="token constant">NAME</span><span class="token punctuation">:</span> nginx <span class="token constant">LAST</span> <span class="token constant">DEPLOYED</span><span class="token punctuation">:</span> Mon Mar <span class="token number">14</span> <span class="token number">12</span><span class="token punctuation">:</span><span class="token number">04</span><span class="token punctuation">:</span><span class="token number">40</span> <span class="token number">2022</span> <span class="token constant">NAMESPACE</span><span class="token punctuation">:</span> <span class="token keyword">default</span> <span class="token constant">STATUS</span><span class="token punctuation">:</span> deployed <span class="token constant">REVISION</span><span class="token punctuation">:</span> <span class="token number">2</span> <span class="token constant">NOTES</span><span class="token punctuation">:</span> <span class="token number">1</span>\<span class="token punctuation">.</span> Get the application <span class="token constant">URL</span> by running these commands<span class="token punctuation">:</span> <span class="token keyword">export</span> <span class="token constant">POD_NAME</span><span class="token operator">=</span><span class="token function">$</span><span class="token punctuation">(</span>kubectl <span class="token keyword">get</span> pods <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> <span class="token operator">-</span>l <span class="token string">"app.kubernetes.io/name=nginx,app.kubernetes.io/instance=nginx"</span> <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">"{.items[0].metadata.name}"</span><span class="token punctuation">)</span> <span class="token keyword">export</span> <span class="token constant">CONTAINER_PORT</span><span class="token operator">=</span><span class="token function">$</span><span class="token punctuation">(</span>kubectl <span class="token keyword">get</span> pod <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> $<span class="token constant">POD_NAME</span> <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">"{.spec.containers[0].ports[0].containerPort}"</span><span class="token punctuation">)</span> echo <span class="token string">"Visit http://127.0.0.1:8080 to use your application"</span> kubectl <span class="token operator">--</span><span class="token keyword">namespace</span> <span class="token keyword">default</span> port<span class="token operator">-</span>forward $<span class="token constant">POD_NAME</span> <span class="token number">8080</span><span class="token punctuation">:</span>$<span class="token constant">CONTAINER_PORT</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>Pod 也在使用新的容器镜像:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">$ kubectl <span class="token keyword">get</span> pod <span class="token operator">-</span>l app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>name<span class="token operator">=</span>nginx <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">'{.items[0].spec.containers[0].image}'</span> nginx<span class="token punctuation">:</span><span class="token number">1.21</span><span class="token number">.6</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>升级在图表历史记录中可见:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-bash"><code class=" language-bash">$ helm history nginx REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Mon Mar 14 12:07:33 2022 superseded nginx-0.1.0 1.0.0 Install complete 2 Mon Mar 14 12:08:25 2022 deployed nginx-0.1.0 1.0.0 Upgrade complete <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>可以通过以下方式检查更改<code>helm diff</code>:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">$ helm diff revision nginx <span class="token number">1</span> <span class="token number">2</span> <span class="token keyword">default</span><span class="token punctuation">,</span> nginx<span class="token punctuation">,</span> Deployment <span class="token punctuation">(</span>apps<span class="token punctuation">)</span> has changed<span class="token punctuation">:</span> <span class="token preprocessor property"># Source: nginx/templates/deployment.yaml</span> apiVersion<span class="token punctuation">:</span> apps<span class="token operator">/</span>v1 kind<span class="token punctuation">:</span> <span class="token class-name">Deployment</span> metadata<span class="token punctuation">:</span> name<span class="token punctuation">:</span> nginx labels<span class="token punctuation">:</span> helm<span class="token punctuation">.</span>sh<span class="token operator">/</span>chart<span class="token punctuation">:</span> nginx<span class="token operator">-</span><span class="token number">0.1</span><span class="token number">.0</span> app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>name<span class="token punctuation">:</span> nginx app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>instance<span class="token punctuation">:</span> nginx app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>version<span class="token punctuation">:</span> <span class="token string">"1.0.0"</span> app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>managed<span class="token operator">-</span>by<span class="token punctuation">:</span> <span class="token class-name">Helm</span> spec<span class="token punctuation">:</span> replicas<span class="token punctuation">:</span> <span class="token number">1</span> selector<span class="token punctuation">:</span> matchLabels<span class="token punctuation">:</span> app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>name<span class="token punctuation">:</span> nginx app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>instance<span class="token punctuation">:</span> nginx template<span class="token punctuation">:</span> metadata<span class="token punctuation">:</span> labels<span class="token punctuation">:</span> app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>name<span class="token punctuation">:</span> nginx app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>instance<span class="token punctuation">:</span> nginx spec<span class="token punctuation">:</span> serviceAccountName<span class="token punctuation">:</span> nginx securityContext<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> containers<span class="token punctuation">:</span> <span class="token operator">-</span> name<span class="token punctuation">:</span> nginx securityContext<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token operator">-</span> image<span class="token punctuation">:</span> <span class="token string">"nginx:1.21.5"</span> <span class="token operator">+</span> image<span class="token punctuation">:</span> <span class="token string">"nginx:1.21.6"</span> imagePullPolicy<span class="token punctuation">:</span> <span class="token class-name">IfNotPresent</span> ports<span class="token punctuation">:</span> <span class="token operator">-</span> name<span class="token punctuation">:</span> http containerPort<span class="token punctuation">:</span> <span class="token number">80</span> protocol<span class="token punctuation">:</span> <span class="token class-name">TCP</span> livenessProbe<span class="token punctuation">:</span> httpGet<span class="token punctuation">:</span> path<span class="token punctuation">:</span> <span class="token operator">/</span> port<span class="token punctuation">:</span> http readinessProbe<span class="token punctuation">:</span> httpGet<span class="token punctuation">:</span> path<span class="token punctuation">:</span> <span class="token operator">/</span> port<span class="token punctuation">:</span> http resources<span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <hr> <h2>回滚 Helm 版本</h2> <p>升级不是决定性的,你想回去。由于 Helm 保留了所有更改,因此回滚非常简单:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm rollback nginx <span class="token number">1</span> <span class="token constant">Rollback</span> was a success<span class="token operator">!</span> <span class="token constant">Happy</span> <span class="token constant">Helming!</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>pod 现在回到<code>1.21.5</code>容器镜像:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">$ kubectl <span class="token keyword">get</span> pod <span class="token operator">-</span>l app<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io<span class="token operator">/</span>name<span class="token operator">=</span>nginx <span class="token operator">-</span>o jsonpath<span class="token operator">=</span><span class="token string">'{.items[0].spec.containers[0].image}'</span> nginx<span class="token punctuation">:</span><span class="token number">1.21</span><span class="token number">.5</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <hr> <h2>卸载 Helm Chart</h2> <p>卸载 Helm chart 与安装一样简单:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm uninstall nginx <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <hr> <h2>重用现有的 Helm 图表</h2> <p>许多著名的项目都提供了 Helm 图表,使集成更加用户友好。他们通过存储库提供图表。您只需将其添加到您身边:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">$ helm repo <span class="token keyword">add</span> bitnami https<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>charts<span class="token punctuation">.</span>bitnami<span class="token punctuation">.</span>com<span class="token operator">/</span>bitnami <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>添加后,更新本地缓存以与远程存储库同步信息:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm repo update <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>您现在可以在 Kubernetes 集群上安装图表:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm install nginx bitnami<span class="token operator">/</span>nginx <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>图表使用默认值部署。您可以启发并指定自定义<code>values.yaml</code>以满足您的需求!</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">$ helm install my<span class="token operator">-</span>release bitnami<span class="token operator">/</span>nginx <span class="token operator">-</span>f values<span class="token punctuation">.</span>yaml <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <hr> <hr> <p></article></p> </article>
什么是Helm? Kubernetes 初学者快速入门教程
作者
sockstack
许可协议
CC BY 4.0
发布于
2023-11-14
修改于
2025-02-22
上一篇:软件:常用 Linux 软件汇总,值得收藏
下一篇:Arch Linux 个人笔记
尚未登录
登录 / 注册
文章分类
博客重构之路
5
Spring Boot简单入门
4
k8s 入门教程
0
MySQL 知识
1
NSQ 消息队列
0
ThinkPHP5 源码分析
5
使用 Docker 从零开始搭建私人代码仓库
3
日常开发汇总
4
标签列表
springboot
hyperf
swoole
webman
php
多线程
数据结构
docker
k8s
thinkphp
mysql
tailwindcss
flowbite
css
前端