写点什么

容器 & 服务:Helm Charts(二)安装与使用

发布于: 刚刚
容器 & 服务:Helm Charts(二)安装与使用

系列文章:

容器 & 服务:开篇,压力与资源

容器 & 服务:一个 Java 应用的 Docker 构建实战

容器 & 服务:Docker 应用的 Jenkins 构建

容器 & 服务:Docker 应用的 Jenkins 构建 (二)

容器 & 服务:K8s 与 Docker 应用集群 (一)

容器 & 服务:K8s 与 Docker 应用集群 (二)

容器 & 服务:Kubernetes 构件及 Deployment 操作

容器 & 服务: ClickHouse 与 k8s 架构

容器 & 服务: 扩容

容器 & 服务:metrics-server 探索

容器 & 服务:Helm Charts(一)


一 本地环境

macos Big Sur,11.2.3, Apple m1 芯片,8G 内存。

二 Helm 安装

2.1 mac 下安装

通过网上搜寻,找到了一份比较有质量的入门文档:Helm中文文档,其中包含了从安装到使用、开发者指南、部署到 Kubernetes、Kubernetes CI/CD几方面内容。

本篇先集中在安装使用上。mac 上的 Homebrew 已经支持了 helm 的下载安装,Kubernetes 社区的成员为 Homebrew 贡献了一个 Helm 子命令;

brew install kubernetes-helm
复制代码

在本地执行安装,命令及输出如下:

brew install kubernetes-helmUpdating Homebrew...Warning: helm 3.5.4 is already installed and up-to-date.To reinstall 3.5.4, run:  brew reinstall helm
复制代码

目前 brew 安装的版本为 3.5.4。

2.2 windows

在 windows 下,我们也可以选择使用Chocolatey来安装 helm。简单描述一下,Chocolatey 是一款专为 Windows 系统开发的、基于 NuGet 的包管理器工具,类似于 Node.js 的 npm,MacOS 的 brew,Ubuntu 的 apt-get,它简称为 choco。Chocolatey 的设计目标是成为一个去中心化的框架,便于开发者按需快速安装应用程序和工具。

简单地理解,Chocolatey 就是 Windows 系统下的 yum 或 apt-get,或者 mac 下的 Homebrew。

Kubernetes 社区的成员为Chocolatey贡献了一个Helm包,命令为:

choco install kubernetes-helm
复制代码

除了 Chocolatey,scoop 也是 Windows 下一款超级好用的软件,是强大的 Windows 命令行包管理工具

也可以通过scoop命令行安装程序安装 Helm 的二进制文件,scoop install helm。

2.3 其他方法

我们也可以使用 Helm 的源码构建,根据具体的系统进行相关的构建并执行安装。

三 Helm 使用前提

3.1 前提

以下是成功和安全使用 Helm 的前提条件。

  1. 一个 Kubernetes 集群

  2. 决定将哪些安全配置应用于安装(如果有的话)

  3. 安装和配置 Helm 和 Tiller(集群端服务)。

3.2 安装 Kubernetes

3.2.1 安装方法参考

在 Mac 下的 docker 安装,可以参考 容器 & 服务:Jenkins 本地及 docker 安装部署;最近版本的 docker 中都包含了 Kubernetes,不过可能需要在 docker 内执行安装,或者再做一次配置调整,相关操作可以参考:Docker-mac下环境搭建

Docker 内安装 Kubernetes 可见下图:

遇到的问题,就是安装后,Kubernetes 一直是 starting 状态:

3.2.2 问题处理过程

在实际操作中,发现跟之前整理的文章有点差别,主要就是 Kubernetes 的版本。本篇使用的 docker,版本为:

Docker 版本为 4.0.1,Kubernetes:v1.21.4。我们下载的 k8s-for-docker-desktop,其分支只支持到 v1.32.3,所以就又需要手动修改 images.properties 这个文件了,把其中涉及到版本的地方都修改为 v1.21.4。

对应的文件可以直接使用:

k8s.gcr.io/pause:3.4.1=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1k8s.gcr.io/kube-controller-manager:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.4k8s.gcr.io/kube-scheduler:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.4k8s.gcr.io/kube-proxy:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.4k8s.gcr.io/kube-apiserver:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.4k8s.gcr.io/etcd:3.4.13-0=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0k8s.gcr.io/coredns/coredns:v1.8.0=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1=registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
复制代码

3.2.3 执行镜像加载,再次启动 k8s

上述修改完成后,我们再次执行./load_images.sh  ,可以看到执行内容如下(为了节省篇幅,只保留了开始和结尾的部分):

k8s-for-docker-desktop % ./load_images.sh           images.properties found.3.4.1: Pulling from google_containers/pauseDigest: sha256:6c3835cab3980f11b83277305d0d736051c32b17606f5ec59f1dda67c9ba3810Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/pause@sha256:6c3835cab3980f11b83277305d0d736051c32b17606f5ec59f1dda67c9ba3810v1.21.4: Pulling from google_containers/kube-controller-manager省略中间部分...Digest: sha256:d0b22f715fcea5598ef7f869d308b55289a3daaa12922fa52a1abf17703c88e7Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller@sha256:d0b22f715fcea5598ef7f869d308b55289a3daaa12922fa52a1abf17703c88e7
复制代码

待实行完成后,再次启动 Kubernetes,稍等一会儿之后,显示启动完毕。

3.3 kubectl

除了可运行的 Kubernetes 集群,还需要我们有一个本地配置的kubectl

Helm 将通过读取 Kubernetes 配置文件(通常为$HOME/.kube/config)找到安装 Tiller 的位置。这与kubectl使用的同一个文件。

要找到 Tiller 要安装到哪个集群,可以运行kubectl config current-contextkubectl cluster-info

$ kubectl config current-contextmy-clusterdocker-desktop
复制代码

四 Helm 初始化与 Tiller

4.1 什么是 Tiller

Tiller 是 Helm 的服务端部分,通常运行在 Kubernetes 集群内部。但对于开发,它也可以在本地运行,并配置为与远程 Kubernetes 集群通信。

4.2 Helm 初始化

4.2.1 官方执行命令

根据官方文档描述,在我们安装好 Helm 之后,就可以使用 helm init 命令来初始化本地 CLI 并安装 Tiller 到我们的 Kubernetes 集群:

$ helm init --history-max 200
复制代码

但事实上并没有这么简单,执行后报错:

k8s-for-docker-desktop % helm init --history-max 200Error: unknown command "init" for "helm"
Did you mean this? lint
Run 'helm --help' for usage.
复制代码

4.2.2 问题分析

Helm 版本信息:

helm versionversion.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"dirty", GoVersion:"go1.16.3"}
复制代码

可知本地安装的 helm 版本为 3.5.4,而 init 命令为 helm2 的命令,在 Helm 3 已经弃用,可使用 helm env 查看环境配置信息。另外,Helm 3 中,Tiller 被移除了。

helm env 查看信息如下:

HELM_BIN="helm"HELM_CACHE_HOME="/Users/lijingyong/Library/Caches/helm"HELM_CONFIG_HOME="/Users/lijingyong/Library/Preferences/helm"HELM_DATA_HOME="/Users/lijingyong/Library/helm"HELM_DEBUG="false"HELM_KUBEAPISERVER=""HELM_KUBEASGROUPS=""HELM_KUBEASUSER=""HELM_KUBECAFILE=""HELM_KUBECONTEXT=""HELM_KUBETOKEN=""HELM_MAX_HISTORY="10"HELM_NAMESPACE="default"HELM_PLUGINS="/Users/lijingyong/Library/helm/plugins"HELM_REGISTRY_CONFIG="/Users/lijingyong/Library/Preferences/helm/registry.json"HELM_REPOSITORY_CACHE="/Users/lijingyong/Library/Caches/helm/repository"HELM_REPOSITORY_CONFIG="/Users/lijingyong/Library/Preferences/helm/repositories.yaml"
复制代码

那么看来,在当前的 Helm 3 版本中,不需要再执行 helm init 的相关命令了,我们继续向下执行。

4.3 安装一个示例 chart

4.3.1 执行 repo 更新

helm repo update Error: no repositories found. You must add one before updating
复制代码

执行失败,提示先添加一个。ok,那就添加一个先:

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
复制代码

而后我们再执行更新,结果 ok:

 % helm repo update                                                           Hang tight while we grab the latest from your chart repositories......Successfully got an update from the "stable" chart repositoryUpdate Complete. ⎈Happy Helming!⎈
复制代码

4.3.2 安装 chart

helm install mysql stable/mysqlError: Kubernetes cluster unreachable: Get "https://kubernetes.docker.internal:6443/version?timeout=32s": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
复制代码

再次报错,嗯。。。这次是 kubernetes 集群不可达的问题,不过可以定位到是 ca 认证问题,参考下面几篇文章:

kubernetes二进制部署时ca认证排错记录

k3s执行helm命令报错


发布于: 刚刚阅读数: 3
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
容器 & 服务:Helm Charts(二)安装与使用