使用helm部署release到kubernetes

原创
2018/11/08 16:25
阅读数 4.9K

使用helm部署release到kubernetes

Helm使得对软件进行版本化,打包,发布,以及对部署,删除,升级甚至回滚都非常容易。

chart是helm打包软件的包的格式,charts中包含了kubernetes所需的配置好的资源信息。

Tiler是Helm的服务端,运行在kubernetes中,它用来响应helm客户端的请求,完成一系列charts操作。

构建helm chart

helm create ${chart_name},本例中${chart_name}为course。

chart的文件结构

chart包的文件结构如下:

.
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml

Chart.yaml描述了chart的信息,包括名字,版本,描述信息等等。 values.yaml存储变量,给templates文件中定义的资源使用。 templates文件夹中使用go语言的模版语法,定义了各类kubernetes资源,结合values.yaml中的变量值,声称实际的资源声明文件。 NOTES.txt:在执行helm instll安装此Chart之后会被输出到屏幕的一些自定义信息

可选的文件结构:

LICENSE: chart的license信息 README.md: 友好的chart介绍文档 requirements.yaml: charts的依赖说明

编辑values.yaml

# Default values for course.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

# 镜像的定义,包括镜像仓库,镜像版本和拉取策略
image:
  repository: core.harbor.domain/example/message-service
  tag: latest
  pullPolicy: IfNotPresent

nameOverride: "message-services-of-course"
fullnameOverride: "message-service-of-course"

# 对service的定义
service:
  type: ClusterIP
  port: 9090

# 对ingress的定义
ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - message-service.local
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

# chart使用资源的限制
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

# chart部署节点的选择
nodeSelector: {}

# chart kubernetes容忍情况描述
tolerations: []

# chart亲和性描述
affinity: {}

chart打包

helm lint ${chart_name} 校验chart 配置是否正常 helm package ${chart_name} 打包chart,可以使用--debug输出调试信息

例如:

[root@kuber24 charts]# helm lint course
==> Linting course
Lint OK

1 chart(s) linted, no failures
[root@kuber24 charts]# helm package course --debug
Successfully packaged chart and saved it to: /root/Downloads/charts/course-0.1.0.tgz
[debug] Successfully saved /root/Downloads/charts/course-0.1.0.tgz to /root/.helm/repository/local

chart下线,升级和降级

使用打包好的chart部署到kubernetes环境中。

[root@kuber24 charts]# helm install course-0.1.0.tgz --namespace test -n course
NAME:   course
LAST DEPLOYED: Thu Nov  8 15:03:19 2018
NAMESPACE: test
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                       AGE
message-service-of-course  1s

==> v1beta2/Deployment
message-service-of-course  1s

==> v1/Pod(related)

NAME                                       READY  STATUS   RESTARTS  AGE
message-service-of-course-b545dfc84-fthg9  0/1    Pending  0         1s


NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace test -l "app.kubernetes.io/name=message-services-of-course,app.kubernetes.io/instance=course" -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

例如一种场景,我们部署可一个版本的程序,但是由于出现了错误,需要下线或者回滚到之前的版本,待问题修改好后,再升级到最新的版本。

下线部署

查看部署的现状:

[root@kuber24 charts]# helm ls
NAME         	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
course       	3       	Thu Nov  8 15:09:29 2018	DEPLOYED	course-0.1.0       	1.0        	test
harbor       	1       	Mon Nov  5 19:26:41 2018	DEPLOYED	harbor-dev         	dev        	default
ingress-nginx	1       	Mon Oct 29 18:41:45 2018	DEPLOYED	nginx-ingress-0.9.5	0.10.2     	kube-system
[root@kuber24 charts]# kubectl get deployments -n test
NAME                        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
message-service-of-course   1         1         1            0           18m

使用helm delete course下线部署。

操作过程:

[root@kuber24 charts]# helm ls
NAME         	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
harbor       	1       	Mon Nov  5 19:26:41 2018	DEPLOYED	harbor-dev         	dev        	default
ingress-nginx	1       	Mon Oct 29 18:41:45 2018	DEPLOYED	nginx-ingress-0.9.5	0.10.2     	kube-system
[root@kuber24 charts]# kubectl get deployments -n test
No resources found.

重新部署

如果我们错误的下线了部署,可以使用chart仓库重新部署。helm的重新部署可能对kubernetes的资源造成影响,可以查看github isusseshelm3种可能会有所变化。

[root@kuber24 charts]# helm upgrade --install --force course ./course-0.1.0.tgz --namespace test
Release "course" has been upgraded. Happy Helming!
LAST DEPLOYED: Thu Nov  8 15:42:52 2018
NAMESPACE: test
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                       AGE
message-service-of-course  0s

==> v1beta2/Deployment
message-service-of-course  0s

==> v1/Pod(related)

NAME                                       READY  STATUS   RESTARTS  AGE
message-service-of-course-b44999495-kv4q4  0/1    Pending  0         0s


NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace test -l "app.kubernetes.io/name=message-services-of-course,app.kubernetes.io/instance=course" -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

更新部署

经常会出现这样的场景,需要修改部署的参数,我们可以使用 helm upgrade 来更新部署

使用helm upgrade --set "key=value" ${chart_name} ${char_repo/name}来更新已经部署了的chart,包括chart的版本或者chart部署的参数。

在更新chart后,编辑course/Chart.yaml种的version信息。例如我更新version为version: 0.1.1。然后重新打包helm package course

更新安装:

[root@kuber24 charts]# helm upgrade course ./course-0.1.1.tgz
helm Release "course" has been upgraded. Happy Helming!
LAST DEPLOYED: Thu Nov  8 15:52:17 2018
NAMESPACE: test
STATUS: DEPLOYED

RESOURCES:
==> v1/Service
NAME                       AGE
message-service-of-course  9m

==> v1beta2/Deployment
message-service-of-course  9m

==> v1/Pod(related)

NAME                                       READY  STATUS            RESTARTS  AGE
message-service-of-course-b44999495-kv4q4  0/1    CrashLoopBackOff  6         9m


NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace test -l "app.kubernetes.io/name=message-services-of-course,app.kubernetes.io/instance=course" -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

查看当前部署的版本信息:

[root@kuber24 charts]# helm ls
NAME         	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
course       	7       	Thu Nov  8 15:52:17 2018	DEPLOYED	course-0.1.1       	1.0        	test
harbor       	1       	Mon Nov  5 19:26:41 2018	DEPLOYED	harbor-dev         	dev        	default
ingress-nginx	1       	Mon Oct 29 18:41:45 2018	DEPLOYED	nginx-ingress-0.9.5	0.10.2     	kube-system

回滚部署

经常由于各种原因,导致部署出现了问题,需要及时的回滚到上一个可靠的状态保证业务运行。

使用helm rollback course 1回滚一个版本。

[root@kuber24 charts]# helm ls
NAME         	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
course       	7       	Thu Nov  8 15:52:17 2018	DEPLOYED	course-0.1.1       	1.0        	test
harbor       	1       	Mon Nov  5 19:26:41 2018	DEPLOYED	harbor-dev         	dev        	default
ingress-nginx	1       	Mon Oct 29 18:41:45 2018	DEPLOYED	nginx-ingress-0.9.5	0.10.2     	kube-system
[root@kuber24 charts]# helm rollback course 1
Rollback was a success! Happy Helming!
[root@kuber24 charts]# helm ls
NAME         	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
course       	8       	Thu Nov  8 16:08:34 2018	DEPLOYED	course-0.1.0       	1.0        	test
harbor       	1       	Mon Nov  5 19:26:41 2018	DEPLOYED	harbor-dev         	dev        	default
ingress-nginx	1       	Mon Oct 29 18:41:45 2018	DEPLOYED	nginx-ingress-0.9.5	0.10.2     	kube-system

最后

感谢大家的阅读,如果有什么问题️,请您留言。

欢迎大家来我的github,查看更多关于kubernetes的个人经验,共同进步。

欢迎转载,转载请注明出处!谢谢!

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部