容器 & 服务:Helm Charts(二)安装与使用
作者:互联网
系列文章:
容器 & 服务:一个 Java 应用的 Docker 构建实战
容器 & 服务:Docker 应用的 Jenkins 构建 (二)
容器 & 服务:Kubernetes 构件及 Deployment 操作
系列文章:
容器 & 服务:一个 Java 应用的 Docker 构建实战
容器 & 服务:Docker 应用的 Jenkins 构建 (二)
容器 & 服务:Kubernetes 构件及 Deployment 操作
一 本地环境
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-helm
Updating 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的前提条件。
-
一个Kubernetes集群
-
决定将哪些安全配置应用于安装(如果有的话)
-
安装和配置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.1
k8s.gcr.io/kube-controller-manager:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.4
k8s.gcr.io/kube-scheduler:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.4
k8s.gcr.io/kube-proxy:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.4
k8s.gcr.io/kube-apiserver:v1.21.4=registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.4
k8s.gcr.io/etcd:3.4.13-0=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
quay.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/pause
Digest: sha256:6c3835cab3980f11b83277305d0d736051c32b17606f5ec59f1dda67c9ba3810
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/pause@sha256:6c3835cab3980f11b83277305d0d736051c32b17606f5ec59f1dda67c9ba3810
v1.21.4: Pulling from google_containers/kube-controller-manager
省略中间部分...
Digest: sha256:d0b22f715fcea5598ef7f869d308b55289a3daaa12922fa52a1abf17703c88e7
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
Untagged: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
Untagged: 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-context
或kubectl cluster-info
。
$ kubectl config current-contextmy-cluster
docker-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 200
Error: unknown command "init" for "helm"
Did you mean this?
lint
Run 'helm --help' for usage.
4.2.2 问题分析
Helm版本信息:
helm version
version.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 repository
Update Complete. ⎈Happy Helming!⎈
4.3.2 安装chart
helm install mysql stable/mysql
Error: 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认证问题,参考下面几篇文章:
标签:容器,google,Kubernetes,Charts,helm,Helm,containers 来源: https://blog.csdn.net/liuhuoxingkong/article/details/120602611