现在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 提供了自动补全功能 如果使用 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