众所周知k8s 上部署一个应用需要 镜像+部署yaml 文件。 那么生产中我们如何管理镜像和 部署yaml 文件了。对于镜像 使用docker 的 镜像仓库就能解决,但是yaml 文件 能不能实现类似 镜像的存储了? helm
帮我们提供了解决方法。但是我难道需要搭一个docker 的私有仓库再搭一个 helm 的仓库? 这里harbor 又解决了这个文件, 它同时可以存放 镜像和 helm charts 包。
这里我记录下 我从零开始使用helm+ harbor 实现, 包制作,上传,下载,部署。
前提条件:
1. 一个k8s 环境
2. 一个已经搭好的harbor
1.配置 harbor 支持 helm chart 存储
如下图登录你的harbor 仓库 ,选取项目这一栏如果又helm chart 数目这个关键字就说明你的harbor仓库支持 存放chart
如果没有需要你重新给harbor 配置 支持chart
到你放在 harbor 配置问题的目录执行下面命令:
docker-compose down -v #停掉已安装的harbor
./install.sh --with-chartmuseum #启动时带上参数 --with-chartmuseum
等命令执行完再登录就能看到 上图中的helm chart 字样了。
2. 安装 helm
这里采用离线方式。直接到github上下载 二进制 文件拷到 PATH 目录下
如果 和我一样访问官方网页卡成狗还不一定打的开试下下面两个镜像网址。直接搜索helm
https://github.com.cnpmjs.org
https://hub.fastgit.org
https://github.com.cnpmjs.org/helm/helm/releases
点击release 下载符合你系统的 二进制包并解压,拷到 你的 PATH 目录下 或者将你二进制包解压后路径加入 PATH 中 就可以使用了。
[root@kanq ~]# helm env
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
HELM_BIN="helm"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/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="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
还有一点 我还需要使用helm push 包到 harbor 仓库所以我还要安装一个 push 插件
https://github.com.cnpmjs.org/chartmuseum/helm-push/releases
使用同样的方式下载 helm-push 安装包,不过它的安装位置就需要参考 上面helm env 获取的HELM_PLUGINS 这个变量的值了 一般时你当前用户主目录的.local 目录下
#创建 helm-push 目录
mkdir -p /root/.local/share/helm/plugins/helm-push
#把你下载好的tar 包拷到创建的目录下
cp helm-push_0.10.0_linux_amd64.tar.gz /root/.local/share/helm/plugins/helm-push
# 到 目录下解压文件
tar -zxvf helm-push_0.10.0_linux_amd64.tar.gz
#执行 helm plugin list 就能看到已经安装好的 push 插件了 这里一定要记住名字时cm-push 而不是push
[root@kanq helm-push]# helm plugin list
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
NAME VERSION DESCRIPTION
cm-push 0.10.0 Push chart package to ChartMuseum
3.helm 使用 harbor 仓库
一般 软件安装 没啥难的,问题都出再使用过程中。
首先 你要 将 你的harbor 仓库地址添加到 本地helm 的仓库列表
下面是我采的坑
1 添加 harbor仓库到 本地helm 仓库列表
网上搜的是下面的方式,意思就是将 你的harbor 仓库填加到本地helm 并给它取名course这里的账号密码就是你登录 harbor 用的
helm repo add course http://harbor.wehgc.com:10443/chartrepo/library --username=admin --password=GJ9JwGl0jL
我照着执行 出错 需要关注的是
- 需要你创一个项目 eg: mychart 不然添加不进去
- 仓库地址格式为: http(s)//{harbor 域名或iP:端口(如果默认443 或80 可不加)}/chartrepo/{mychart}
- 确认你启动仓库harbor 配置的是https 还是 http 如果是http 上面的命令可以执行成功,如果是https 还需带上 ca 证书,启动harbor 用的服务器证书和密钥 如下
helm repo add --ca-file /data/harbor/certs/ca.crt --cert-file /data/harbor/certs/kanq.k8s.com.crt --key-file /data/harbor/certs/kanq.k8s.com.key --username admin --password Harbor12345 myrepo https://kanq.k8s.com:7443/chartrepo/myrepo
helm repo list #查询已添加 仓库地址
helm repo update #跟新本地仓库缓存
- 如果实在没法区分,这里交一个笨办法。手工创建一个helm chart 包然通过 网页方式将 这个包存放到 harbor 库上,上传成功后harbor 会告诉你咋在本地添加仓库地址
helm create mytest #创建 名为mytest chart 包这个是一个默认的daemon
执行后你会发现你目录下有一个mytest的目录
helm package mytest #将目录压缩成一个.tgz 的文件它就是我们要用的包了
或者你手动直接 tar -zcvf mytest.tgz mytest 也行
将这个包通过harbor 网页上传到harbor 上
然后找到你刚刚上传的chart 包,点tag 进入下面界面
就有如何添加 仓库的命令了。
使用helm 操做包制作,上传,下载,部署
- 创建 mytest 包
helm create mytest
- 上传 mytest 包(上传前保证你已经将 仓库添加到了本地helm repo 列表)
上传前先查看安装的push 插件具体名字
比如我这里它叫 cm-push 如果按网上教程 helm push xxx 就会报错 得用helm cm-push
完整命令如下:
helm cm-push ./mytest myrepo --ca-file /data/harbor/certs/ca.crt --cert-file /data/harbor/certs/kanq.k8s.com.crt --key-file /data/harbor/certs/kanq.k8s.com.key --username admin --password Harbor12345
- 下载mytest 包
helm pull myrepo/mytest --ca-file /data/harbor/certs/ca.crt --cert-file /data/harbor/certs/kanq.k8s.com.crt --key-file /data/harbor/certs/kanq.k8s.com.key --username admin --password Harbor12345
- 安装 mytest包
helm install --ca-file /data/harbor/certs/ca.crt --cert-file /data/harbor/certs/kanq.k8s.com.crt --key-file /data/harbor/certs/kanq.k8s.com.key --username admin --password Harbor12345 --version 0.1.0 myrepo/mytest --generate-name