在 k3s 内使用 Helm(国内)
1. AppHub
Helm 可以类似理解为 ”K8s OS“ 的包管理工具,再以前没有这个工具我们要手动写 yaml/json 文件来自动化部署应用,但是 Helm 就类似于 Homebrew 一样,有人帮我们写好了配置文件(Chart),我们只需要一个命令,加自定义的参数就行了。
helm install stable/mysql --generate-name
Helm 官方提供了一个 Chart 仓库,Helm Hub,但是众说周知的原因,无法访问。阿里云原生团队提供了镜像服务,同步所有 Charts 并且将其中的 gcr.io
等镜像地址全部替换为国内可以访问的镜像。
阿里云 Helm charts 开源仓库。
AppHub 的主要职责之一,是把所有 Helm 官方 Hub 托管的应用,都自动同步到国内,并自动将 Charts 文件中的 gcr.io 等有网络访问问题的 URL 替换成为稳定的国内镜像 URL。
2. k3s 提供的内建 CRD
k3s 内建了一个 CRD 并且也内置了 Helm V3 & V2, 从而使得 Helm 的使用可以使用另一种方式。
什么是 CRD,Custom Controllers,参考 k8s 官方介绍。
什么是 Operator,参考 CoreOS 的官方介绍。
下面是 k3s 中内建 Helm Operator 的资源类型。
[root@bowser1704 ~]# kubectl api-resources --api-group=helm.cattle.io
NAME SHORTNAMES APIGROUP NAMESPACED KIND
helmcharts helm.cattle.io true HelmChart
那么在这个 CRD 里面怎么使用国内镜像呢?
HelmChart namespace 必须为 kube-system 因为 HelmChart 的 controller 只在 kube-system 里面。
Keep in mind that
namespace
in your HelmChart resource metadata section should always bekube-system
, because the K3s deploy controller is configured to watch this namespace for new HelmChart resources.
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: example-helmchart
namespace: kube-system
spec:
helmVersion: v3
chart: test-helmchart
targetNamespace: test-namespace
version: 0.0.1
repo: https://apphub.aliyuncs.com
3. 使用 release 文件
在路径 /var/lib/rancher/k3s/server/static/charts/
下的 tgz
格式文件可以通过 kubernetes API 访问。
所以可以通过下载 tgz / helm chart release 文件解决「网络」问题。yaml 文件可以这么写:
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: traefik
namespace: kube-system
spec:
chart: https://%{KUBERNETES_API}%/static/charts/traefik-1.81.0.tgz
valuesContent: |-
rbac:
enabled: true
ssl:
enabled: true
metrics:
prometheus:
enabled: true
kubernetes:
ingressEndpoint:
useDefaultPublishedService: true
image: "rancher/library-traefik"
tolerations:
- key: "CriticalAddonsOnly"
operator: "Exists"
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
如何下载 helm chart release
安装 helm 到网络环境良好的机器,例如你的电脑。
helm pull loki/promtail
# download promtail-x.x.x.tgz to your current directory.
然后上传到机器上,copy 到 /var/lib/rancher/k3s/server/static/charts/
目录下。
Ref: