一、Helm 安装与模板
1)Helm 安装部署
- 安装二进制命令(本地需要连接上kubernetes 集群)
- 安装Alicloudhelm 插件与操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# 安装 Helm 插件
helm plugin install https://github.com/AliyunContainerService/helm-acr
<!--more-->
# 配置本地仓库映射
export HELM_REPO_USERNAME='<企业版实例访问凭证中账号>'
export HELM_REPO_PASSWORD='<企业版实例访问凭证中密码>'
helm repo add <本地仓库名称> acr://registry-chart-test.cn-hangzhou.cr.aliyuncs.com/<命名空间>/<Chart仓库名称> --username ${HELM_REPO_USERNAME} --password ${HELM_REPO_PASSWORD}
#export HELM_REPO_USERNAME=devops@ib_daily
#export HELM_REPO_PASSWORD=2RJPfCgHXroSYQga
#helm repo add aliyun-acr-repo acr://registry-chart-test.cn-hangzhou.cr.aliyuncs.com/chart-test/app-test --username ${HELM_REPO_USERNAME} --password ${HELM_REPO_PASSWORD}
# 推送Chart
#本地创建一个 Chart
helm create <Chart 名称>
#helm create app-test
#推送 Chart 目录
helm cm-push <Chart 名称> <本地仓库名称>
#helm cm-push app-test aliyun-acr-repo
#或者推送 Chart 压缩包
helm cm-push <Chart 名称>-<Chart 版本>.tgz <本地仓库名称>
# 拉取Chart
#从线上Chart 仓库更新本地Chart 索引
helm repo update
#helm repo update aliyun-acr-repo
#拉取Chart
helm fetch <本地仓库名称>/<Chart 名称> --version <Chart 版本>
#helm fetch aliyun-acr-repo/app-test --version=20211228100329-daily
#或者直接安装Chart
helm install -f values.yaml <本地仓库名称>/<Chart 名称> --version <Chart 版本>
#helm install app-test aliyun-acr-repo/app-test --version 20211228100329-daily --namespace daily-appshelm install 操作实际执行按顺序安装资源:
- Namespace
- NetworkPolicy
- ResourceQuota
- LimitRange
- PodSecurityPolicy
- PodDisruptionBudget
- ServiceAccount
- Secret
- SecretList
- ConfigMap
- StorageClass
- PersistentVolume
- PersistentVolumeClaim
- CustomResourceDefinition
- ClusterRole
- ClusterRoleList
- ClusterRoleBinding
- ClusterRoleBindingList
- Role
- RoleList
- RoleBinding
- RoleBindingList
- Service
- DaemonSet
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- StatefulSet
- Job
- CronJob
- Ingress
- APIService
- 查看本地仓库:helm repo list
- 添加/删除仓库:helm repo add xxx / helm repo remove xxx
- 推送/拉取charts:helm cm-push xxx / helm fetch/pull xxx
- 安装/卸载charts:helm install xxx / helm uninstall xxx
- 升级/回滚:helm upgrade xxx / helm rollback xxx
- 创建本地自己的charts: helm create xxx
- 查看charts 可自定义配置项/获取自定义配置项 :helm show values / helm get values
- 配置跨账号ACR 拉取镜像
helm 部署时需要pull image 部署,因此需要配置跨账号ACR 拉取镜像。参考:跨账号ACR 拉取镜像配置
2)Helm 模板与语法编写
详情参考:Charts 文件格式,模板编写
内置对象
基本目录结构内容:Chart.yaml(chart 信息说明) 、Values.yaml(自定义变量) 、charts(子chart目录,依赖)
templates 模板(实际安装到Kubernetes 集群中的资源定义Yaml 模板文件,如deployment、pod 等)
- 资源模板:confimap.yaml、deployment.yaml 等
- 命名模板:_helpers.tpl
访问文件
二、测试验证部署app-test
1)本地安装helm、kubectl(连接Kubernetes 集群)二进制命令
2)初始化配置app-test
初始化应用目录:helm create app-test
应用app-test 目录结构
- 关键配置信息
1
2
3
4
5
6
7# Chart.yaml
apiVersion: v2
name: app-test
description: application app-test for env daily
type: application
version: 20211215123042-daily
appVersion: 20211215123042_daily1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52# values.yaml
replicaCount: 1
image:
repository: registry-chart-test.cn-hangzhou.cr.aliyuncs.com/ib-ibos/app-test
pullPolicy: IfNotPresent
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
serviceAccount:
create: false
annotations: {}
name: ""
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
service:
type: ClusterIP
port: 8080
create: false
ingress:
enabled: false
className: ""
annotations: {}
hosts:
- host: reos.com.cn
paths:
- path: /
pathType: ImplementationSpecific
tls: []
resources: {}
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
3)配置镜像仓库,部署应用
- 配置远程ACR 企业版仓库,参考 Helm安装部署 部分。
- 部署应用
执行部署命令
1
helm install app-test aliyun-acr-repo/app-test --version 20211228100329-daily --namespace daily-apps
部署结果
- 更新版本
三、问题点
使用helm 命令安装需本地连接Kubernetes 集群(需提供API Server 公网EIP)
与AlicloudEdas 产品兼容问题
- 使用helm 部署的应用与Edas 不共通,因此使用helm 部署的无法从Edas 上查看应用的相关信息
- Edas 支持将手动部署的Deployment 手动导入,参考:https://help.aliyun.com/document_detail/202036.html(自行部署导入Edas 的应用暂未确定是否能完整导入Edas 组件注入的变量)
版本控制与镜像拉取
- helm 通过配置values 变量值写入或更新 image->repository 的值进行pull 镜像更新,并通过 helm push 推送pull 的镜像配置到私有仓库中。
- helm 通过upgrade 与rollback 命令进行已部署应用的升级与回滚功能。
与原有CI/CD 配置使用问题
- helm 部署只能通过本地更新配置并执行,无法与现有的 CI/CD 流水线进行配合使用,需要进行调整。