kubeasz/docs/guide/helm.md

82 lines
4.6 KiB
Markdown
Raw Normal View History

2018-05-23 23:58:11 +08:00
# Helm
`Helm`致力于成为k8s集群的应用包管理工具希望像linux 系统的`RPM` `DPKG`那样成功确实在k8s上部署复杂一点的应用很麻烦需要管理很多yaml文件configmap,controller,service,rbac,pv,pvc等等而helm能够整齐管理这些文档版本控制参数化安装方便的打包与分享等。
- 建议积累一定k8s经验以后再去使用helm对于初学者来说手工去配置那些yaml文件对于快速学习k8s的设计理念和运行原理非常有帮助而不是直接去使用helm面对又一层封装与复杂度。
2018-05-23 23:58:11 +08:00
## 安装(开发测试环境)
在开发环境安装不考虑安全性问题很方便除了tiller官方镜像需要翻墙下载。
- 客户端:从最新[release](https://github.com/kubernetes/helm/releases)下载helm-v2.9.1-linux-amd64.tar.gz到本地解压后把二进制直接放到环境PATH下即可
- 服务端不能翻墙的可以使用docker hub上的转存镜像比如jmgao1983/tiller:v2.9.1
helm默认使用kubectl客户端相同的配置文件去访问k8s集群因此只要在能使用kubectl的节点运行如下即能进行安装。
``` bash
2018-05-23 23:58:11 +08:00
$ helm init --tiller-image jmgao1983/tiller:v2.9.1
```
- 验证
``` bash
$ kubectl get pod --all-namespaces|grep tiller
kube-system tiller-deploy-7c6cd89d69-72r7j 1/1 Running 0 10h
$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
```
如果 `helm version` 出现如下错误,在每个节点安装 `socat`即可(如 apt install socat
``` bash
E0522 22:22:15.492436 24409 portforward.go:331] an error occurred forwarding 38398 -> 44134: error forwarding port 44134 to pod dc6da4ab99ad9c497c0cef1776b9dd18e0a612d507e2746ed63d36ef40f30174, uid : unable to do port forwarding: socat not found.
Error: cannot connect to Tiller
```
## 安全安装 helm在线
2018-05-23 23:58:11 +08:00
上述安装的tiller服务器默认允许匿名访问那么k8s集群中的任何pod都能访问tiller风险较大因此需要在helm客户端和tiller服务器间建立安全的SSL/TLS认证机制tiller服务器和helm客户端都是使用同一CA签发的`client cert`,然后互相识别对方身份。建议通过本项目提供的`ansible role`安装符合官网上介绍的安全加固措施在delpoy节点运行:
``` bash
2018-05-26 17:55:28 +08:00
# 1.如果已安装非安全模式,使用 helm reset 清理
2019-01-14 18:03:52 +08:00
# 2.配置默认helm参数 vi /etc/ansible/roles/helm/defaults/main.yml
2018-05-26 17:55:28 +08:00
# 3.执行安装
$ ansible-playbook /etc/ansible/roles/helm/helm.yml
2018-05-23 23:58:11 +08:00
```
简单介绍下`/roles/helm/tasks/main.yml`中的步骤
- 1-下载最新release的helm客户端到/etc/ansible/bin目录下再由它自动推送到deploy的{{ bin_dir }}目录下
- 2-由集群CA签发helm客户端证书和私钥
- 3-由集群CA签发tiller服务端证书和私钥
- 4-创建tiller专用的RBAC配置只允许helm在指定的namespace查看和安装应用
- 5-安全安装tiller到集群tiller服务启用tls验证
- 6-配置helm客户端使用tls方式与tiller服务端通讯
2018-11-25 22:16:37 +08:00
### 注意因使用了TLS认证所以helm命令执行分以下两种情况
- 执行与tiller服务有关的命令比如 `helm ls` `helm version` `helm install`等需要加`--tls`参数
- 执行其他命令,比如`helm search` `helm fetch` `helm home`等不需要加`--tls`
2018-05-23 23:58:11 +08:00
## 安全安装 helm离线
在内网环境中由于不能访问互联网无法连接repo地址使用上述的在线安装helm的方式会报错。因此需要使用离线安装的方法来安装。
离线安装步骤:
```bash
# 1.创建本地repo
mkdir -p /opt/helm-repo
# 2.启动helm repo server,如果要其他服务器访问改为本地IP
nohup helm serve --address 127.0.0.1:8879 --repo-path /opt/helm-repo &
# 3.更改helm 配置文件
将/etc/ansible/role/helm/default/main.yml中repo的地址改为 http://127.0.0.1:8879
cat <<EOF >/etc/ansible/role/helm/default/main.yml
helm_namespace: kube-system
helm_cert_cn: helm001
tiller_sa: tiller
tiller_cert_cn: tiller001
tiller_image: jmgao1983/tiller:v2.9.1
#repo_url: https://kubernetes-charts.storage.googleapis.com
repo_url: http://127.0.0.1:8879
# 如果默认官方repo 网络访问不稳定可以使用如下的阿里云镜像repo
#repo_url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
EOF
# 4.运行安全helm命令
ansible-playbook /etc/ansible/role/helm/helm.yml
```
2018-05-26 17:55:28 +08:00
## 使用helm安装应用到k8s上
2018-05-23 23:58:11 +08:00
2018-06-23 12:42:02 +08:00
请阅读本项目文档[helm安装prometheus监控](prometheus.md)