helm使用

应用程序是代码和配置的复杂集合,这些集合对其安装方式有很大的影响。 像所有开源软件一样,它们可以从源代码安装,但是大多数时候用户希望简单,一致地安装某些东西。 这就是为什么软件包管理器几乎存在于管理安装过程的每个操作系统中的原因。

同样,Kubernetes依靠软件包管理来简化安装过程。 在本文中,我们将使用Helm软件包管理器及其稳定图表的概念来创建一个小型应用程序。

什么是Helm软件包管理器?

Helm 是用于部署到Kubernetes并在Kubernetes上运行的应用程序的程序包管理器。 它由 Cloud Native Computing Foundation (CNCF) 与使用Kubernetes的最大公司合作维护。 Helm可以用作命令行实用程序,在此 介绍如何使用 。

安装头盔

页面 ,下载首选版本,解压缩文件,然后将Helm可执行文件移动到   / usr / local / bin 或您的 / usr / bin, 无论您使用的是哪个。

另外,您可以使用操作系统软件包管理( dnf , snap , brew或其他方式)进行安装。 在 GitHub页面 上有关于如何在每个操作系统上安装的说明 。

什么是舵图?

我们希望能够重复安装应用程序,而且还可以根据我们的环境对其进行自定义。 那就是Helm Charts发挥作用的地方。 Helm使用称为图表的标准化模板来协调应用程序的部署。 图表用于定义,安装和升级各种级别的应用程序。

图表是头盔包。 它包含在Kubernetes集群中运行应用程序,工具或服务所需的所有资源定义。 可以将其视为类似于Homebrew公式,Apt dpkg或Yum RPM文件的Kubernetes。

使用头盔

稳定的存储库中, 以使其更具可见性。 为了使图表稳定添加,它必须满足许多技术要求 。 最后,如果Helm维护人员认为它已正确维护,则可以将其发布到 Helm Hub 。

由于我们要使用社区管理的稳定图表,因此我们将通过添加快捷方式来使其更容易:

$ helm repo add stable https: 
     
     // kubernetes-charts.storage.googleapis.com
     
     
"stable" has been added to your repositories

运行我们的第一个 头盔图

由于我已经在 本文中 介绍了Helm的基本用法, 因此 在 本文中 ,我将重点介绍如何编辑和使用图表。 要继续进行下去,您需要安装Helm并访问一些Kubernetes环境,例如minikube(您可以在 此处 或 此处进行 遍历 )。

mediawiki及其图表

拉 的 。

默认情况下,图表压缩为.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中打开它。 我们看到具有大量配置的YAML文件。 如果仅放大容器映像文件,则会看到其存储库,注册表和标签以及其他详细信息。

## 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: <to set explicitly, choose port between 30000-32767> 
     
     

  
     
     ##   https: <to set explicitly, choose port between 30000-32767> 
     
     

  
     
     ## 
     
     

  
     
     # 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,我们继续检查它是否可用:

helm 修改镜像地址_数据库

现在,我们已经启动并运行了新的Wiki,并且可以通过个人编辑来欣赏我们的新应用程序。 使用上面输出中的命令来获取密码并开始填写您的Wiki。

结论

Helm是一个功能强大的软件包管理器,它使在Kubernetes上安装和卸载应用程序变得非常简单。 图表通过为我们提供经过精心设计和测试的模板来安装我们独特的自定义应用程序,从而增加了体验。 继续探索Helm和Charts提供的内容,并在评论中让我知道您对它们的处理方式。

翻译自: https://opensource.com/article/20/3/helm-kubernetes-charts

helm使用