本文共 9318 字,大约阅读时间需要 31 分钟。
helm使用
应用程序是代码和配置的复杂集合,这些集合对其安装方式有很大的影响。 像所有开源软件一样,它们可以从源代码安装,但是大多数时候用户希望简单,一致地安装某些东西。 这就是为什么软件包管理器几乎存在于管理安装过程的每个操作系统中的原因。
同样,Kubernetes依靠软件包管理来简化安装过程。 在本文中,我们将使用Helm软件包管理器及其稳定图表的概念来创建一个小型应用程序。
是用于部署到Kubernetes并在Kubernetes上运行的应用程序的程序包管理器。 它由 (CNCF) 与使用Kubernetes的最大公司合作维护。 Helm可以用作命令行实用程序,在此 。
对于Linux和macOS,安装Helm既快捷又容易。 有两种方法可以执行此操作,您可以转到发布 ,下载首选版本,解压缩文件,然后将Helm可执行文件移动到 / usr / local / bin 或您的 / usr / bin, 无论您使用的是哪个。
另外,您可以使用操作系统软件包管理( dnf , snap , brew或其他方式)进行安装。 在 上有关于如何在每个操作系统上安装的说明 。
我们希望能够重复安装应用程序,而且还可以根据我们的环境对其进行自定义。 那就是Helm Charts发挥作用的地方。 Helm使用称为图表的标准化模板来协调应用程序的部署。 图表用于定义,安装和升级各种级别的应用程序。
图表是头盔包。 它包含在Kubernetes集群中运行应用程序,工具或服务所需的所有资源定义。 可以将其视为类似于Homebrew公式,Apt dpkg或Yum RPM文件的Kubernetes。
图表可以快速创建,我发现它们易于维护。 如果您有一个可以从公共版本控制站点访问的文件,则可以将其发布到 以使其更具可见性。 为了使图表稳定添加,它必须满足许多 。 最后,如果Helm维护人员认为它已正确维护,则可以将其发布到 。
由于我们要使用社区管理的稳定图表,因此我们将通过添加快捷方式来使其更容易:
$ helm repo add stable https: // kubernetes-charts.storage.googleapis.com "stable" has been added to your repositories
由于我已经在 介绍了Helm的基本用法, 在 ,我将重点介绍如何编辑和使用图表。 要继续进行下去,您需要安装Helm并访问一些Kubernetes环境,例如minikube(您可以在 或 遍历 )。
首先,我将选择一张图表 。 通常,在我的文章中,我以詹金斯为例,如果图表不是很复杂,我会很乐意这样做。 这次,我将使用基本图表,并使用 创建一个小型Wiki 。
那我怎么得到这张图呢? 头盔让那么容易的一 拉 的 。
默认情况下,图表压缩为.tgz文件,但是我们可以使用--untar标志解压缩该文件以自定义Wiki。
$ helm pull stable / mediawiki --untar $ ls mediawiki / $ cd mediawiki / $ ls Chart.yaml README.md requirements.lock templates / OWNERS charts / requirements.yaml values.yaml
现在我们有了这个,我们可以开始定制图表了。
解压缩文件后,会出现大量文件。 尽管确实令人恐惧,但实际上我们只应该使用一个文件,那就是 values.yaml 文件。
解压缩的所有内容都是模板文件的列表,其中包含基本应用程序配置的所有信息。 实际上,所有模板文件都取决于values.yaml文件中配置的内容。 这些模板和图表文件中的大多数实际上是用于在集群中创建服务帐户的,而如果要在常规服务器上构建此应用程序,则通常会将这些必需的应用程序配置的各种集合放在一起。
但是转到values.yaml文件以及我们应该在其中进行的更改。 在您喜欢的文本编辑器或IDE中打开它。 我们看到具有大量配置的文件。 如果仅放大容器映像文件,则会看到其存储库,注册表和标签以及其他详细信息。
## Bitnami DokuWiki image version ## ref: https://hub.docker.com/r/bitnami/mediawiki/tags/ ## image : registry : docker.io repository : bitnami/mediawiki tag : 1.34.0-debian-10-r31 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy : IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName
正如您在文件中看到的那样,这些值的每个配置都是定义明确的。 我们的提取策略设置为 IfNotPresent 。 这意味着,如果运行helm pull命令,它将不会覆盖现有版本。 如果将其设置为 always ,则每次拉动图像都会默认为图像的最新版本。 在这种情况下,我将使用默认值,因为在过去,如果我在不希望它达到最新版本的情况下遇到了图像损坏的情况(请记住,版本控制您的软件,伙计们)。
因此,让我们使用一些基本更改来配置此值文件,并使其成为我们自己的。 我将更改一些命名约定,Wiki用户名和mediawiki网站名称。 注意:这是values.yaml的另一个代码段。 所有这些自定义都在一个文件中进行。
## User of the application ## ref: https://github.com/bitnami/bitnami-docker-mediawiki#environment-variables ## mediawikiUser : cherrybomb ## Application password ## Defaults to a random 10-character alphanumeric string if not set ## ref: https://github.com/bitnami/bitnami-docker-mediawiki#environment-variables ## # mediawikiPassword: ## Admin email ## ref: https://github.com/bitnami/bitnami-docker-mediawiki#environment-variables ## mediawikiEmail : root@example.com ## Name for the wiki ## ref: https://github.com/bitnami/bitnami-docker-mediawiki#environment-variables ## mediawikiName : Jess's Home of Helm
之后,我将对我们的数据库名称和用户帐户进行一些小的修改。 我将默认设置更改为“ jess”,以便您可以看到更改的位置。
externalDatabase : ## Database host host : ## Database port port : 3306 ## Database user user : jess_mediawiki ## Database password password : ## Database name database : jess_mediawiki ## ## MariaDB chart configuration ## ## https://github.com/helm/charts/blob/master/stable/mariadb/values.yaml ## mariadb : ## Whether to deploy a mariadb server to satisfy the applications database requirements. To use an external database set this to false and configure the externalDatabase parameters enabled : true ## Disable MariaDB replication replication : enabled : false ## Create a database and a database user ## ref: https://github.com/bitnami/bitnami-docker-mariadb/blob/master/README.md#creating-a-database-user-on-first-run ## db : name : jess_mediawiki user : jess_mediawiki
最后,我将在负载均衡器中添加一些端口,以允许来自本地主机的流量。 我在minikube上运行,发现LoadBalancer选项运行良好。
service : ## Kubernetes svc type ## For minikube, set this to NodePort, elsewhere use LoadBalancer ## type : LoadBalancer ## Use serviceLoadBalancerIP to request a specific static IP, ## otherwise leave blank ## # loadBalancerIP: # HTTP Port port : 80 # HTTPS Port ## Set this to any value (recommended: 443) to enable the https service port # httpsPort: 443 ## Use nodePorts to requets some specific ports when usin NodePort ## nodePorts: ## http:## https: ## # nodePorts: # http: "30000" # https: "30001" ## Enable client source IP preservation ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip ## externalTrafficPolicy : Cluster
现在,我们已经进行了配置以允许流量并创建数据库,我们知道可以继续并部署图表了。
现在我们有了Wiki的自定义版本,是时候创建部署了。 在开始讨论之前,让我们首先确认Helm没有安装任何其他工具,以确保我的集群具有可用资源来运行我们的Wiki。
$ helm ls NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
目前没有通过Helm进行的其他部署,因此让我们继续进行。
$ helm install jesswiki -f values.yaml stable / mediawiki NAME: jesswiki LAST DEPLOYED: Thu Mar 5 12 : 35 : 31 2020 NAMESPACE: default STATUS: deployed REVISION: 2 NOTES: 1 . Get the MediaWiki URL by running: NOTE: It may take a few minutes for the LoadBalancer IP to be available. Watch the status with: 'kubectl get svc --namespace default -w jesswiki-mediawiki' export SERVICE_IP =$ ( kubectl get svc --namespace default jesswiki-mediawiki --template "{ { range (index .status.loadBalancer.ingress 0) }}{ {.}}{ { end }}" ) echo "Mediawiki URL: http:// $SERVICE_IP /" 2 . Get your MediaWiki login credentials by running: echo Username: user echo Password: $ ( kubectl get secret --namespace default jesswiki-mediawiki -o jsonpath = "{.data.mediawiki-password}" | base64 --decode ) $
完善! 现在,我们将导航至维基,该维基可在群集IP地址上访问。 要确认该地址:
kubectl get svc --namespace default -w jesswiki-mediawiki NAME TYPE CLUSTER-IP EXTERNAL-IP PORT ( S ) AGE jesswiki-mediawiki LoadBalancer 10.103.180.70 < pending > 80 : 30220 / TCP 17s
现在我们有了IP,我们继续检查它是否可用:
现在,我们已经启动并运行了新的Wiki,并且可以通过个人编辑来欣赏我们的新应用程序。 使用上面输出中的命令来获取密码并开始填写您的Wiki。
Helm是一个功能强大的软件包管理器,它使在Kubernetes上安装和卸载应用程序变得非常简单。 图表通过为我们提供经过精心设计和测试的模板来安装我们独特的自定义应用程序,从而增加了体验。 继续探索Helm和Charts提供的内容,并在评论中让我知道您对它们的处理方式。
翻译自:
helm使用
转载地址:http://wvdzd.baihongyu.com/