4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
kubernetes之helm简介、安装、配置、使用指南_菲宇运维..._CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-25
1. Get the application URL by running these commands: export POD_NAME $(kubectl get pods --namespace default -l app eating-hound-mychart -o jsonpath {.items[0].metadata.name} ) echo Visit http://127.0.0.1:8080 to use your application kubectl port-forward $POD_NAME 8080:80

现在nginx已经部署到kubernetes集群上 本地执行提示中的命令在本地主机上访问到nginx实例。

export POD_NAME $(kubectl get pods --namespace default -l app eating-hound-mychart -o jsonpath {.items[0].metadata.name} )echo Visit http://127.0.0.1:8080 to use your application kubectl port-forward $POD_NAME 8080:80

在本地访问http://127.0.0.1:8080即可访问到nginx。

查看部署的relaese

$ helm listNAME REVISION UPDATED STATUS CHART NAMESPACEeating-hound 1 Wed Oct 25 14:58:15 2017 DEPLOYED mychart-0.1.0 default

删除部署的release

$ helm delete eating-houndrelease eating-hound deleted
打包分享

我们可以修改Chart.yaml中的helm chart配置信息 然后使用下列命令将chart打包成一个压缩文件。

helm package .

打包出mychart-0.1.0.tgz文件。

将应用发布到 Repository

虽然我们已经打包了 Chart 并发布到了 Helm 的本地目录中 但通过 helm search 命令查找 并不能找不到刚才生成的 mychart包。

$ helm search mychartNo results found

这是因为 Repository 目录中的 Chart 包还没有被 Helm 管理。通过 helm repo list 命令可以看到目前 Helm 中已配置的 Repository 的信息。

$ helm repo listNAME    URLstable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

注 新版本中执行 helm init 命令后默认会配置一个名为 local 的本地仓库。

我们可以在本地启动一个 Repository Server 并将其加入到 Helm Repo 列表中。Helm Repository 必须以 Web 服务的方式提供 这里我们就使用 helm serve 命令启动一个 Repository Server 该 Server 缺省使用 $HOME/.helm/repository/local 目录作为 Chart 存储 并在 8879 端口上提供服务。

$ helm serve Now serving you on 127.0.0.1:8879

默认情况下该服务只监听 127.0.0.1 如果你要绑定到其它网络接口 可使用以下命令

$ helm serve --address 192.168.100.211:8879 

如果你想使用指定目录来做为 Helm Repository 的存储目录 可以加上 --repo-path 参数

$ helm serve --address 192.168.100.211:8879 --repo-path /data/helm/repository/ --url http://192.168.100.211:8879/charts/

通过 helm repo index 命令将 Chart 的 Metadata 记录更新在 index.yaml 文件中:

# 更新 Helm Repository 的索引文件$ cd /home/k8s/.helm/repository/local$ helm repo index --url http://192.168.100.211:8879 .

完成启动本地 Helm Repository Server 后 就可以将本地 Repository 加入 Helm 的 Repo 列表。

$ helm repo add local http://127.0.0.1:8879 local has been added to your repositories

现在再次查找 mychart 包 就可以搜索到了。

$ helm repo update$ helm search mychartNAME          CHART VERSION APP VERSION DESCRIPTIONlocal/mychart 0.1.0         1.0         A Helm chart for Kubernetes

我们可以在requirement.yaml中定义应用所依赖的chart 例如定义对mariadb的依赖

dependencies:- name: mariadb version: 0.6.0 repository: https://kubernetes-charts.storage.googleapis.com

使用helm lint .命令可以检查依赖和模板配置是否正确。

helm升级和回退一个应用

从上面 helm list 输出的结果中我们可以看到有一个 Revision 更改历史 字段 该字段用于表示某一个 Release 被更新的次数 我们可以用该特性对已部署的 Release 进行回滚。

修改 Chart.yaml 文件

将版本号从 0.1.0 修改为 0.2.0, 然后使用 helm package 命令打包并发布到本地仓库。

$ cat mychart/Chart.yamlapiVersion: v1appVersion: 1.0 description: A Helm chart for Kubernetesname: mychartversion: 0.2.0$ helm package mychartSuccessfully packaged chart and saved it to: /home/k8s/mychart-0.2.0.tgz

查询本地仓库中的 Chart 信息

我们可以看到在本地仓库中 mychart 有两个版本。

$ helm search mychart -lNAME          CHART VERSION APP VERSION DESCRIPTIONlocal/mychart 0.2.0         1.0         A Helm chart for Kuberneteslocal/mychart 0.1.0         1.0         A Helm chart for Kubernetes
升级一个应用

现在用 helm upgrade 命令将已部署的 mike-test 升级到新版本。你可以通过 --version 参数指定需要升级的版本号 如果没有指定版本号 则缺省使用最新版本。

$ helm upgrade mike-test local/mychartRelease mike-test has been upgraded. Happy Helming!LAST DEPLOYED: Mon Jul 23 10:50:25 2018NAMESPACE: defaultSTATUS: DEPLOYEDRESOURCES: v1/Pod(related)NAME                                READY  STATUS   RESTARTS  AGEmike-test-mychart-6d56f8c8c9-d685v  1/1    Running  0         9m v1/ServiceNAME               TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)  AGEmike-test-mychart  ClusterIP  10.254.120.177   none       80/TCP   9m v1beta2/DeploymentNAME               DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGEmike-test-mychart  1        1        1           1          9mNOTES:1. Get the application URL by running these commands:export POD_NAME $(kubectl get pods --namespace default -l app mychart,release mike-test -o jsonpath {.items[0].metadata.name} )echo Visit http://127.0.0.1:8080 to use your application kubectl port-forward $POD_NAME 8080:80

完成后 可以看到已部署的 mike-test 被升级到 0.2.0 版本。

$ helm listNAME      REVISION  UPDATED                   STATUS    CHART         NAMESPACEmike-test 2         Mon Jul 23 10:50:25 2018  DEPLOYED  mychart-0.2.0 default
回退一个应用

如果更新后的程序由于某些原因运行有问题 需要回退到旧版本的应用。首先我们可以使用 helm history 命令查看一个 Release 的所有变更记录。

$ helm history mike-testREVISION  UPDATED                   STATUS      CHART         DESCRIPTION1         Mon Jul 23 10:41:20 2018  SUPERSEDED  mychart-0.1.0 Install complete2         Mon Jul 23 10:50:25 2018  DEPLOYED    mychart-0.2.0 Upgrade complete

其次 我们可以使用下面的命令对指定的应用进行回退。

$ helm rollback mike-test 1Rollback was a success! Happy Helming!

注 其中的参数 1 是 helm history 查看到 Release 的历史记录中 REVISION 对应的值。

最后 我们使用 helm list 和 helm history 命令都可以看到 mychart 的版本已经回退到 0.1.0 版本。

$ helm listNAME      REVISION  UPDATED                   STATUS    CHART         NAMESPACEmike-test 3         Mon Jul 23 10:53:42 2018  DEPLOYED  mychart-0.1.0 default$ helm history mike-testREVISION  UPDATED                   STATUS      CHART         DESCRIPTION1         Mon Jul 23 10:41:20 2018  SUPERSEDED  mychart-0.1.0 Install complete2         Mon Jul 23 10:50:25 2018  SUPERSEDED  mychart-0.2.0 Upgrade complete3         Mon Jul 23 10:53:42 2018  DEPLOYED    mychart-0.1.0 Rollback to 1
删除一个应用

如果需要删除一个已部署的 Release 可以利用 helm delete 命令来完成删除。

$ helm delete mike-testrelease mike-test deleted

确认应用是否删除 该应用已被标记为 DELETED 状态。

$ helm ls -a mike-testNAME      REVISION  UPDATED                   STATUS  CHART         NAMESPACEmike-test 3         Mon Jul 23 10:53:42 2018  DELETED mychart-0.1.0 default

也可以使用 --deleted 参数来列出已经删除的 Release

$ helm ls --deletedNAME      REVISION  UPDATED                   STATUS  CHART         NAMESPACEmike-test 3         Mon Jul 23 10:53:42 2018  DELETED mychart-0.1.0 default

从上面的结果也可以看出 默认情况下已经删除的 Release 只是将状态标识为 DELETED 了 但该 Release 的历史信息还是继续被保存的。

$ helm hist mike-testREVISION  UPDATED                   STATUS      CHART         DESCRIPTION1         Mon Jul 23 10:41:20 2018  SUPERSEDED  mychart-0.1.0 Install complete2         Mon Jul 23 10:50:25 2018  SUPERSEDED  mychart-0.2.0 Upgrade complete3         Mon Jul 23 10:53:42 2018  DELETED     mychart-0.1.0 Deletion complete

如果要移除指定 Release 所有相关的 Kubernetes 资源和 Release 的历史记录 可以用如下命令

$ helm delete --purge mike-testrelease mike-test deleted

再次查看已删除的 Release 已经无法找到相关信息。

$ helm hist mike-testError: release: mike-test not found# helm ls 命令也已均无查询记录。$ helm ls --deleted$ helm ls -a mike-test
使用Helm 部署 Wordpress应用实例

以Wordpress 为例 包括 MySQL、PHP 和 Apache。

由于测试环境没有可用的 PersistentVolume 持久卷 简称 PV 这里暂时将其关闭。

$ helm install --name wordpress-test --set persistence.enabled false,mariadb.persistence.enabled false,serviceType NodePort  stable/wordpressNAMESPACE: defaultSTATUS: DEPLOYEDRESOURCES: v1beta1/DeploymentNAME                      DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGEwordpress-test-mariadb    1        1        1           1          26mwordpress-test-wordpress  1        1        1           1          26m v1/Pod(related)NAME                                       READY  STATUS   RESTARTS  AGEwordpress-test-mariadb-84b866bf95-n26ff    1/1    Running  1         26mwordpress-test-wordpress-5ff8c64b6c-sgtvv  1/1    Running  6         26m v1/SecretNAME                      TYPE    DATA  AGEwordpress-test-mariadb    Opaque  2     26mwordpress-test-wordpress  Opaque  2     26m v1/ConfigMapNAME                          DATA  AGEwordpress-test-mariadb        1     26mwordpress-test-mariadb-tests  1     26m v1/ServiceNAME                      TYPE       CLUSTER-IP     EXTERNAL-IP  PORT(S)                   AGEwordpress-test-mariadb    ClusterIP  10.254.99.67   none       3306/TCP                  26mwordpress-test-wordpress  NodePort   10.254.175.16   none       80:8563/TCP,443:8839/TCP  26mNOTES:1. Get the WordPress URL:Or running:export NODE_PORT $(kubectl get --namespace default -o jsonpath {.spec.ports[0].nodePort} services wordpress-test-wordpress)export NODE_IP $(kubectl get nodes --namespace default -o jsonpath {.items[0].status.addresses[0].address} )echo http://$NODE_IP:$NODE_PORT/admin2. Login with the following credentials to see your blogecho Username: userecho Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath {.data.wordpress-password} | base64 --decode)

访问 Wordpress

部署完成后 我们可以通过上面的提示信息生成相应的访问地址和用户名、密码等相关信息。

# 生成 Wordpress 管理后台地址$ export NODE_PORT $(kubectl get --namespace default -o jsonpath {.spec.ports[0].nodePort} services wordpress-test-wordpress)$ export NODE_IP $(kubectl get nodes --namespace default -o jsonpath {.items[0].status.addresses[0].address} )$ echo http://$NODE_IP:$NODE_PORT/adminhttp://192.168.100.211:8433/admin# 生成 Wordpress 管理帐号和密码$ echo Username: userUsername: user$ echo Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath {.data.wordpress-password} | base64 --decode)Password: 9jEXJgnVAY

给一张访问效果图吧

\"\"

Helm 其它使用技巧

如何设置 helm 命令自动补全

为了方便 helm 命令的使用 Helm 提供了自动补全功能 如果使用 ZSH 请执行

$ source (helm completion zsh)

如果使用 BASH 请执行

$ source (helm completion bash)

如何使用第三方的 Chart 存储库

随着 Helm 越来越普及 除了使用预置官方存储库 三方仓库也越来越多了 前提是网络是可达的 。你可以使用如下命令格式添加三方 Chart 存储库。

$ helm repo add 存储库名 存储库URL$ helm repo update

一些三方存储库资源:

# Prometheus Operatorhttps://github.com/coreos/prometheus-operator/tree/master/helm# Bitnami Library for Kuberneteshttps://github.com/bitnami/charts# Openstack-Helmhttps://github.com/att-comdev/openstack-helmhttps://github.com/sapcc/openstack-helm# Tick-Chartshttps://github.com/jackzampolin/tick-charts

Helm 如何结合 CI/CD

采用 Helm 可以把零散的 Kubernetes 应用配置文件作为一个 Chart 管理 Chart 源码可以和源代码一起放到 Git 库中管理。通过把 Chart 参数化 可以在测试环境和生产环境采用不同的 Chart 参数配置。

下图是采用了 Helm 的一个 CI/CD 流程

\"\"

Helm 如何管理多环境下 (Test、Staging、Production) 的业务配置

Chart 是支持参数替换的 可以把业务配置相关的参数设置为模板变量。使用 helm install 命令部署的时候指定一个参数值文件 这样就可以把业务参数从 Chart 中剥离了。例如 helm install --values values-production.yaml wordpress。

Helm 如何解决服务依赖

在 Chart 里可以通过 requirements.yaml 声明对其它 Chart 的依赖关系。如下面声明表明 Chart 依赖 Apache 和 MySQL 这两个第三方 Chart。

dependencies:- name: mariadbversion: 2.1.1repository: https://kubernetes-charts.storage.googleapis.com/condition: mariadb.enabledtags:- wordpress-database- name: apacheversion: 1.4.0repository: https://kubernetes-charts.storage.googleapis.com/

如何让 Helm 连接到指定 Kubernetes 集群

Helm 默认使用和 kubectl 命令相同的配置访问 Kubernetes 集群 其配置默认在 ~/.kube/config 中。

如何在部署时指定命名空间

helm install 默认情况下是部署在 default 这个命名空间的。如果想部署到指定的命令空间 可以加上 --namespace 参数 比如

$ helm install local/mychart --name mike-test --namespace mynamespace

如何查看已部署应用的详细信息

$ helm get wordpress-test

默认情况下会显示最新的版本的相关信息 如果想要查看指定发布版本的信息可加上 --revision 参数。

$ helm get  --revision 1  wordpress-test

参考

https://docs.helm.sh/using_helm/#installing-helm

https://mp.weixin.qq.com/s?__biz MzI3MTI2NzkxMA mid 2247486154 idx 1 sn becd5dd0fadfe0b6072f5dfdc6fdf786 chksm eac52be3ddb2a2f555b8b1028db97aa3e92d0a4880b56f361e4b11cd252771147c44c08c8913 mpshare 1 scene 24 srcid 0927K11i8Vke44AuSuNdFclU#rd

https://jimmysong.io/kubernetes-handbook/practice/helm.html

https://imkira.com/a14.html

https://zhaohuabing.com/2018/04/16/using-helm-to-deploy-to-kubernetes/#undefined

 

https://help.aliyun.com/document_detail/58587.html?spm a2c4e.11153940.blogcont159601.20.6703174aRHyZc9

本文链接: http://helm.immuno-online.com/view-765533.html

发布于 : 2021-03-25 阅读(0)
公司介绍
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616