[DAY18]Helm棒~~

Helm 常用command

以下指令应该是常常会操作到

  • helm create : 建立chart
  • helm intall : 安装chart
  • helm uninstall : 反安装chart
  • helm lint : 检查chart的yaml有没有写错
  • helm list : 列出helm install的chart
  • helm rollback : 降版
  • helm upgrade : 升阪

helm create

建立新的chart,chart里面的folder呈现就在上一篇有提到。
因为还有没有部署到k8s上面,所以如果想删除就直接移除资料夹就好

helm create mytest1        
Creating mytest1

helm install

透过helm install把chart里面的yaml部署到k8s上面,
可以使用helm install --help看更多参数

  • name : 自定义名称,同个namespace只能有一个唯一的名称
  • chart : 本机chart的路径
  • flags : 可以参考 helm_install options,最常使用的应该是-f
#helm install [NAME] [CHART] [flags]

#部署名称:mytest1 到 namespace:default 上面,values部份载入/mytest底下的global与dev二个yaml档资料
helm install -n default mytest1 ./mytest1 -f ./mytest/global.yaml -f ./mytest/dev.yaml

-dry-run :没有安装到k8s的安装 /images/emoticon/emoticon01.gif

执行flag使用dry-run会把渲染後的yaml都印出来,如果有错的话,执行时就会喷错,可以顺便检查有没有写正确

helm install --dry-run --debug test2  ./mytest1
install.go:172: [debug] Original chart version: ""
install.go:189: [debug] CHART PATH: /Users/howard_huang/test_yaml/mytest1
NAME: test2
LAST DEPLOYED: Fri Sep 24 13:53:51 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
affinity: {}
autoscaling:
  enabled: false
  maxReplicas: 100
  minReplicas: 1
  targetCPUUtilizationPercentage: 80
fullnameOverride: ""
image:
  pullPolicy: IfNotPresent
  repository: nginx
  tag: ""
以下省略

安装成功

helm install test2 ./mytest1                   
NAME: test2
LAST DEPLOYED: Fri Sep 24 14:04:39 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mytest1,app.kubernetes.io/instance=test2" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

helm ls

如果没有指定namespace时,一样是预设default

helm ls #使用default namespace 
helm ls -n default #指定namespace
helm ls -A 全部namespace的helm chart

helm ls -A
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
test1   default         1               2021-09-23 14:20:30.791658 +0800 CST    deployed        mytest-1.0.1    1.16.0     
test2   default         1               2021-09-24 14:04:39.915229 +0800 CST    deployed        mytest1-0.1.0   1.16.0     

helm uninstall

把安装好的helm chart release移除掉

helm uninstall -n default test2 #把刚刚install的test2移掉
release "test2" uninstalled

helm ls -A                     
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
test1   default         1               2021-09-23 14:20:30.791658 +0800 CST    deployed        mytest-1.0.1    1.16.0 

helm lint

使用helm linter检查helm chart有没有写错

helm lint ./mytest1
==> Linting ./mytest1
[INFO] Chart.yaml: icon is recommended 

1 chart(s) linted, 0 chart(s) failed #这个chart没问题

乱改deployment看看linter会不会抓到错误呢

 containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
           ports: #少一个空白
            - name: http
              containerPort: 80
              protocol: TCP

执行helm lint看看~~~果然有抓到问题

helm lint ./mytest 
==> Linting ./mytest
[ERROR] templates/deployment.yaml: unable to parse YAML: error converting YAML to JSON: yaml: line 32: mapping values are not allowed in this context

Error: 1 chart(s) linted, 1 chart(s) failed

helm upgrade

前面的helm ls可以看到REVISION是1,使用upgrade进行更版後,看看版本是否会正确递增呢。
把values.yaml改一下设定值

replicaCount: 2

更版後可以看到REVISION=2,STATUS为deployed,表示刚刚的更版都顺便完成

helm upgrade -n default test2 ./mytest1  
Release "test2" has been upgraded. Happy Helming!
NAME: test2
LAST DEPLOYED: Sat Sep 25 08:11:07 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2

helm ls -A                             
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
test1   default         1               2021-09-23 14:20:30.791658 +0800 CST    deployed        mytest-1.0.1    1.16.0     
test2   default         2               2021-09-25 08:11:07.75769 +0800 CST     deployed        mytest1-0.1.0   1.16.0

helm rollback

当发现刚刚upgrade上去的版本yaml设定值有错误时,要怎麽马上降版呢?
一种是改好设定值再upgrade上去,另一种就是rollback到前一版啦

helm rollback test2 1 
Rollback was a success! Happy Helming!

#REVISION不会降回1喔,一样是递增上去
helm ls -A           
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
test1   default         1               2021-09-23 14:20:30.791658 +0800 CST    deployed        mytest-1.0.1    1.16.0     
test2   default         3               2021-09-25 08:15:15.244443 +0800 CST    deployed        mytest1-0.1.0   1.16.0 

#使用history指令就可以看到test2已经rollback回1了
helm history test2
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION     
1               Sat Sep 25 08:08:46 2021        superseded      mytest1-0.1.0   1.16.0          Install complete
2               Sat Sep 25 08:11:07 2021        superseded      mytest1-0.1.0   1.16.0          Upgrade complete
3               Sat Sep 25 08:15:15 2021        deployed        mytest1-0.1.0   1.16.0          Rollback to 1   

以上就是常用的helm指令啦,如果有更多指令想看的
可以参考 helm官网


<<:  Day 11 打包 python 程序-3

>>:  到底是什麽意思?static 静态方法

Day 2 我要开始学了

Hi 大家好~ 在这边平常我列出我最近想学跟正在学的一些技术 React Testing Libra...

【Day 03】如何评估演算法的效率? Big O 与时间复杂度

一、如何判断演算法的效能 ? 当同样的问题,可以用不一样的演算法来解决时,要如何判断哪个演算法比较好...

Day30 MANO开源专案使用之kube5gnfvo - 使用篇

那麽今天是最後一天了,我们就来做一个布署测试吧!昨天以介绍了关於Template的内容以及主要会使用...

[Day8] 关於人脸侦测(Face Detection)的二三事

本篇文没有引言,不罗嗦。 本文开始 人脸侦测是物体侦测(Object Detection)的一种;...

[Day20] Scrum失败经验谈 – 只想得太大太远

Scrum是大家想要导入的文化与工具,在分享了很多工具、体会和方法後,感觉是个好时机要来讲如何导入s...