云服务器内容精选

  • 创建模板实例 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”。 在“我的模板”页签中,单击目标模板下的“安装”。 参照表2设置安装工作负载参数。 表2 安装工作负载参数说明 参数 参数说明 实例名称 新建模板实例名称,命名必须唯一。 命名空间 指定部署的命名空间。 选择版本 选择模板的版本。 配置文件 用户可以导入values.yaml文件,导入后可替换模板包中的values.yaml文件;也可直接在配置框中在线编辑模板参数。 说明: 此处导入的values.yaml文件需符合yaml规范,即KEY:VALUE格式。对于文件中的字段不做任何限制。 导入的value.yaml的key值必须与所选的模板包的values.yaml保持一致,否则不会生效。即key不能修改。 单击“添加文件”。 选择对应的values.yaml文件,单击“打开”。 配置完成后,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
  • 上传模板 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”,在右上角单击“上传模板”。 单击“添加文件”,选中待上传的工作负载包后,单击“上传”。 图1 上传模板包 由于上传模板时创建OBS桶的命名规则由cce-charts-{region}-{domain_name}变为cce-charts-{region}-{domain_id},其中旧命名规则中的domain_name系统会做base64转化并取前63位,如果您在现有命名规则的OBS桶中找不到模板,请在旧命名规则的桶中进行查找。
  • 创建模板实例 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”。 在“我的模板”页签中,单击目标模板下的“安装”。 参照表2设置安装工作负载参数。 表2 安装工作负载参数说明 参数 参数说明 实例名称 新建模板实例名称,命名必须唯一。 命名空间 指定部署的命名空间。 选择版本 选择模板的版本。 配置文件 用户可以导入values.yaml文件,导入后可替换模板包中的values.yaml文件;也可直接在配置框中在线编辑模板参数。 说明: 此处导入的values.yaml文件需符合yaml规范,即KEY:VALUE格式。对于文件中的字段不做任何限制。 导入的value.yaml的key值必须与所选的模板包的values.yaml保持一致,否则不会生效。即key不能修改。 单击“添加文件”。 选择对应的values.yaml文件,单击“打开”。 配置完成后,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
  • Helm v2与Helm v3的差异及适配方案 随着Helm v2 发布最终版本Helm 2.17.0,Helm v3 现在已是 Helm 开发者社区支持的唯一标准。为便于管理,建议用户尽快将模板切换至Helm v3格式。 当前社区从Helm v2演进到Helm v3,主要有以下变化: 移除tiller Helm v3 使用更加简单和灵活的架构,移除了 tiller,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒。 改进了升级策略,采用三路策略合并补丁 Helm v2 使用双路策略合并补丁。在升级过程中,会对比最近一次发布的chart manifest和本次发布的chart manifest的差异,来决定哪些更改会应用到Kubernetes资源中。如果更改是集群外带的(比如通过kubectl edit),则修改不会被Helm识别和考虑。结果就是资源不会回滚到之前的状态。 Helm v3 使用三路策略来合并补丁,Helm在生成一个补丁时,会考虑之前原来的manifest的活动状态。因此,Helm在使用原来的chart manifest生成新补丁时会考虑当前活动状态,并将其与之前原来的 manifest 进行比对,并再比对新的 manifest 是否有改动,并进行自动补全,以此来生成最终的更新补丁。 详情及示例请见Helm官方文档:https://v3.helm.sh/docs/faq/changes_since_helm2 默认存储驱动程序更改为secrets Helm v2 默认情况下使用 ConfigMaps 存储发行信息,而在 Helm v3 中默认使用 Secrets。 发布名称限制在namespace范围内 Helm v2 只使用tiller 的namespace 作为release信息的存储,这样全集群的release名字都不能重复。Helm v3只会在release安装的所在namespace记录对应的信息,这样release名称可在不同命名空间重用。应用和release命名空间一致。 校验方式改变 Helm v3 对模板格式的校验更加严格,如Helm v3 将chart.yaml的apiVersion从v1切换到v2,针对Helm v2的chart.yaml,强要求指定apiVersion为v1。可安装Helm v3客户端后,通过执行helm lint命令校验模板格式是否符合v3规范。 适配方案:根据Helm官方文档 https://helm.sh/docs/topics/charts/适配Helm v3模板,apiVersion字段必填。 废弃crd-install Helm v3删除了crd-install hook, 并用chart中的crds目录替换。需要注意的是,crds目录中的资源只有在release安装时会部署,升级时不会更新,删除时不会卸载crds目录中的资源。若crd已存在,则重复安装不会报错。 适配方案:根据Helm官方文档 https://helm.sh/docs/chart_best_practices/custom_resource_definitions/, 当前可使用crds目录或者将crd定义单独放入chart。考虑到目前不支持使用Helm升级或删除CRD,推荐分隔chart,将CRD定义放入chart中,然后将所有使用该CRD的资源放到另一个 chart中进行管理。 未通过helm创建的资源不强制update,releaes默认不强制升级 Helm v3强制升级逻辑变化,不再是升级失败后走删除重建,而是直接走put更新逻辑。因此当前CCE release升级默认使用非强制更新逻辑,无法通过Patch更新的资源将导致release升级失败。若环境存在同名资源且无Helm V3的归属标记app.kubernetes.io/managed-by: Helm,则会提示资源冲突。 适配方案:删除相关资源,并通过Helm创建。 Release history数量限制更新 为避免release 历史版本无限增加,当前release升级默认只保留最近10个历史版本。 更多变化和详细说明请参见Helm官方文档 Helm v2与Helm v3的区别:https://v3.helm.sh/docs/faq/changes_since_helm2 Helm v2如何迁移到Helm v3:https://helm.sh/docs/topics/v2_v3_migration 父主题: 模板(Helm Chart)
  • 安装Helm模板包 您可以使用Helm安装模板包(Chart),在使用Helm命令安装模板包前,您可能需要了解三大概念帮助您更好地使用Helm。 模板包(Chart):模板包中含有Kubernetes应用的资源定义以及大量的配置文件。 仓库(Repository):仓库是用于存放共享模板包的地方,您可以从仓库中下载模板包至本地安装,也可以选择直接在线安装。 实例(Release):实例是Helm在Kubernetes集群中安装模板包后的运行结果。一个模板包通常可以在一个集群中安装多次,每次安装都会创建一个新的实例。以MySQL模板包为例,如果您想在集群中运行两个数据库,可以安装该模板包两次,每一个数据库都会拥有自己的release 和release name。 更多关于Helm命令的使用方法请参见使用Helm。 从Helm官方推荐的仓库Artifact Hub中查找模板包,并配置Helm仓库。 helm repo add {repo_name} {repo_addr} 例如,以WordPress模板包为例: helm repo add bitnami https://charts.bitnami.com/bitnami 使用helm install命令安装模板包。 helm install {release_name} {chart_name} --set key1=val1 例如,以安装WordPress为例,步骤1添加的仓库中WordPress的模板包为bitnami/wordpress,并将实例自定义命名为my-wordpress,同时指定一些配置参数。 helm install my-wordpress bitnami/wordpress \ --set mariadb.primary.persistence.enabled=true \ --set mariadb.primary.persistence.storageClass=csi-disk \ --set mariadb.primary.persistence.size=10Gi \ --set persistence.enabled=false 您可以使用helm show values {chart_name}命令查看模板可配置的选项。例如,查看WordPress的可配置项: helm show values bitnami/wordpress 查看已安装的模板实例。 helm list
  • 安装Helm v3 本文以Helm v3.3.0为例进行演示。 如需选择其他合适的版本,请访问https://github.com/helm/helm/releases。 在连接集群的虚拟机上下载Helm客户端。 wget https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz 解压Helm包。 tar -xzvf helm-v3.3.0-linux-amd64.tar.gz 将Helm复制到系统path路径下,以下为/usr/local/bin/helm。 mv linux-amd64/helm /usr/local/bin/helm 查看Helm版本。 helm version version.BuildInfo{Version:"v3.3.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
  • 安装Helm v2 本文以Helm v2.17.0为例进行演示。 如需选择其他合适的版本,请访问https://github.com/helm/helm/releases。 在连接集群的虚拟机上下载Helm客户端。 wget https://get.helm.sh/helm-v2.17.0-linux-amd64.tar.gz 解压Helm包。 tar -xzvf helm-v2.17.0-linux-amd64.tar.gz 将helm拷贝到系统path路径下,以下为/usr/local/bin/helm。 mv linux-amd64/helm /usr/local/bin/helm 因为Kubernetes APIServer开启了RBAC访问控制,所以需创建tiller使用的service account:tiller并给其分配cluster-admin这个集群内置的ClusterRole。按如下创建tiller的资源账号。 vim tiller-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system 部署tiller资源账号。 kubectl apply -f tiller-rbac.yaml 初始化Helm, 部署tiller的Pod。 helm init --service-account tiller --skip-refresh 查看状态。 kubectl get pod -n kube-system -l app=helm 回显如下 NAME READY STATUS RESTARTS AGE tiller-deploy-7b56c8dfb7-fxk5g 1/1 Running 1 23h 查看helm版本。 # helm version Client: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}
  • 安装Helm模板chart包 CCE提供的模板不能满足要求时,可下载模板的chart包进行安装。 在https://github.com/helm/charts的stable目录中查找您需要的chart包,下载后将chart包上传至节点。 下载并解压已获取的chart包,一般chart包格式为.zip。 unzip chart.zip 安装Helm模板。 helm install aerospike/ 安装完成后,执行helm list查看已经安装的模板实例状态。
  • 转换流程(不使用Helm v3客户端) 在CCE节点上下载helm 2to3 转换插件。 wget https://github.com/helm/helm-2to3/releases/download/v0.10.2/helm-2to3_0.10.2_linux_amd64.tar.gz 解压插件包。 tar -xzvf helm-2to3_0.10.2_linux_amd64.tar.gz 模拟转换。 以test-convert实例为例,执行以下命令进行转换的模拟。若出现以下提示,说明模拟转换成功。 # ./2to3 convert --dry-run --tiller-out-cluster -s configmaps test-convertNOTE: This is in dry-run mode, the following actions will not be executed.Run without --dry-run to take the actions described below:Release "test-convert" will be converted from Helm v2 to Helm v3.[Helm 3] Release "test-convert" will be created.[Helm 3] ReleaseVersion "test-convert.v1" will be created. 执行正式转换。若出现以下提示,说明转换成功。 # ./2to3 convert --tiller-out-cluster -s configmaps test-convertRelease "test-convert" will be converted from Helm v2 to Helm v3.[Helm 3] Release "test-convert" will be created.[Helm 3] ReleaseVersion "test-convert.v1" will be created.[Helm 3] ReleaseVersion "test-convert.v1" created.[Helm 3] Release "test-convert" created.Release "test-convert" was converted successfully from Helm v2 to Helm v3.Note: The v2 release information still remains and should be removed to avoid conflicts with the migrated v3 release.v2 release information should only be removed using `helm 2to3` cleanup and when all releases have been migrated over. 转换完成后进行v2 release资源的清理,同样先进行模拟清理,成功后正式清理v2 release资源。 模拟清理: # ./2to3 cleanup --dry-run --tiller-out-cluster -s configmaps --name test-convertNOTE: This is in dry-run mode, the following actions will not be executed.Run without --dry-run to take the actions described below:WARNING: "Release 'test-convert' Data" will be removed. [Cleanup/confirm] Are you sure you want to cleanup Helm v2 data? [y/N]: yHelm v2 data will be cleaned up.[Helm 2] Release 'test-convert' will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" will be deleted. 正式清理: # ./2to3 cleanup --tiller-out-cluster -s configmaps --name test-convertWARNING: "Release 'test-convert' Data" will be removed. [Cleanup/confirm] Are you sure you want to cleanup Helm v2 data? [y/N]: yHelm v2 data will be cleaned up.[Helm 2] Release 'test-convert' will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" d
  • 转换流程(使用Helm v3客户端) 安装Helm v3客户端,参见安装Helm v3。 安装转换插件。 # helm plugin install https://github.com/helm/helm-2to3Downloading and installing helm-2to3 v0.10.2 ...https://github.com/helm/helm-2to3/releases/download/v0.10.2/helm-2to3_0.10.2_linux_amd64.tar.gzInstalled plugin: 2to3 查看已安装的插件,确认插件已安装。 # helm plugin listNAME VERSION DESCRIPTION 2to3 0.10.2 migrate and cleanup Helm v2 configuration and releases in-place to Helm v3 模拟转换。 以test-convert实例为例,执行以下命令进行转换的模拟。若出现以下相关提示,说明模拟转换成功。 # helm 2to3 convert --dry-run --tiller-out-cluster -s configmaps test-convertNOTE: This is in dry-run mode, the following actions will not be executed.Run without --dry-run to take the actions described below:Release "test-convert" will be converted from Helm v2 to Helm v3.[Helm 3] Release "test-convert" will be created.[Helm 3] ReleaseVersion "test-convert.v1" will be created. 执行正式转换。若出现以下提示,说明转换成功。 # helm 2to3 convert --tiller-out-cluster -s configmaps test-convertRelease "test-convert" will be converted from Helm v2 to Helm v3.[Helm 3] Release "test-convert" will be created.[Helm 3] ReleaseVersion "test-convert.v1" will be created.[Helm 3] ReleaseVersion "test-convert.v1" created.[Helm 3] Release "test-convert" created.Release "test-convert" was converted successfully from Helm v2 to Helm v3.Note: The v2 release information still remains and should be removed to avoid conflicts with the migrated v3 release.v2 release information should only be removed using `helm 2to3` cleanup and when all releases have been migrated over. 正式转换成功后,用户可通过helm list查看已转换成功的模板实例。 # helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONtest-convert default 1 2022-08-29 06:56:28.166918487 +0000 UTC deployed test-helmold-1 转换完成后进行V2 release资源的清理,同样先进行模拟清理,成功后正式清理V2 release资源。 模拟清理: # helm 2to3 cleanup --dry-run --tiller-out-cluster -s configmaps --name test-convertNOTE: This is in dry-run mode, the following actions will not be executed.Run without --dry-run to take the actions described below:WARNING: "Release 'test-convert' Data" will be removed. [Cleanup/confirm] Are you sure you want to cleanup Helm v2 data? [y/N]: yHelm v2 data will be cleaned up.[Helm 2] Release 'test-convert' will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" will be deleted. 正式清理: # helm 2to3 cleanup --tiller-out-cluster -s configmaps --name test-convertWARNING: "Release 'test-convert' Data" will be removed. [Cleanup/confirm] Are you sure you want to cleanup Helm v2 data? [y/N]: yHelm v2 data will be cleaned up.[Helm 2] Release 'test-convert' will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" will be deleted.[Helm 2] ReleaseVersion "test-convert.v1" deleted.[Helm 2] Release 'test-convert' deleted.Helm v2 data was cleaned up successfully.