helm
helm是k8s的包管理工具
安装
https://github.com/helm/helm/releases
- 解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
- 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
入门
chart的结构一般如下
mychart/
Chart.yaml
values.yaml
charts/
templates/
...
templates/ 目录包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给Kubernetes。
values.yaml 文件也导入到了模板。这个文件包含了chart的 默认值 。这些值会在用户执行helm install 或 helm upgrade时被覆盖。
Chart.yaml 文件包含了该chart的描述。你可以从模板中访问它。charts/目录 可以 包含其他的chart(称之为 _子chart_)。(描述性的,一般这个文件不用怎么管
你可以使用helm create chartname
来快速创建一个项目文件夹,里面包含了一个完整的结构,甚至包含了一些预生成的模版,如下
[root@master linux-amd64]# helm create testlist
[root@master testlist]# ll
total 16
drwxr-xr-x 2 root root 4096 Sep 1 14:34 charts
-rw-r--r-- 1 root root 1144 Sep 1 14:34 Chart.yaml
drwxr-xr-x 3 root root 4096 Sep 1 14:34 templates
-rw-r--r-- 1 root root 1875 Sep 1 14:34 values.yaml
[root@master testlist]# ll templates/
total 32
-rw-r--r-- 1 root root 1841 Sep 1 14:34 deployment.yaml
-rw-r--r-- 1 root root 1792 Sep 1 14:34 _helpers.tpl
-rw-r--r-- 1 root root 919 Sep 1 14:34 hpa.yaml
-rw-r--r-- 1 root root 2081 Sep 1 14:34 ingress.yaml
-rw-r--r-- 1 root root 1751 Sep 1 14:34 NOTES.txt
-rw-r--r-- 1 root root 322 Sep 1 14:34 serviceaccount.yaml
-rw-r--r-- 1 root root 364 Sep 1 14:34 service.yaml
drwxr-xr-x 2 root root 4096 Sep 1 14:34 tests
[root@master testlist]# ll templates/tests/
total 4
-rw-r--r-- 1 root root 382 Sep 1 14:34 test-connection.yaml
你可以把他们全部删除然后写你自己的,你也可以在这些文件的基础上进行修改,helm官方有一些别人已经写好的helm,你可以helm pull把他们拉下来,但是一般实际环境还是得要根据自己的需求去写
常用指令
helm create chartname 创建一个helm工程文件夹
helm package path 打包一个helm版本包
helm lint path 验证chart
helm uninstall release_name 卸载一个已经安装的包
helm test 测试模拟安装
helm template 渲染模版,可以看看各个值映射的对不对
编写示例:普罗米修斯容器化方案
prometheus+grafana,并实现以文件的方式自动发现
当然,这里只是简单演示,具体请按自己情况来添加其他需要的功能
deployment:
prometheus.yaml
#/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: prometheus
namespace: {{.Values.namespace}}
spec:
serviceName: prometheus
replicas: {{.Values.prom.replicaCount}}
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
imagePullPolicy: IfNotPresent
args:
- "--config.file=/etc/prometheus/conf/prometheus.yml"
# user: root
# command: ["chmod", "-R", "777", "/prometheus"]
volumeMounts:
- mountPath: /etc/prometheus/conf/
name: prometheusconf
- name: storage
mountPath: /prometheus
- name: static-sd
mountPath: /var/
volumes:
- name: prometheusconf
hostPath:
path: /prom/conf/ #配置文件存放地址
- name: storage
hostPath:
path: /data01/ #node上的挂载点,记得权限放高点,不然pod里面的用户没有修改这个目录的权限就会导致失败
type: DirectoryOrCreate
- name: static-sd
configMap:
name: prometheus-file-sd #节点自动发现
grafana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: {{.Values.namespace}}
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
imagePullPolicy: IfNotPresent
configuremap:
file-sd.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-file-sd
namespace: {{ .Values.namespace }}
labels:
app: promtest
data:
file-sd.json: |
[
]
service
prom-ser.yaml
kind: Service
apiVersion: v1
metadata:
name: prometheus
namespace: {{ .Values.namespace }}
labels:
app: prometheus
spec:
type: NodePort
ports:
- name: http
port: 9090
protocol: TCP
targetPort: 9090
nodePort: 30001
selector:
app: prometheus
gra-ser.yaml
kind: Service
apiVersion: v1
metadata:
name: grafana
namespace: {{ .Values.namespace }}
labels:
app: grafana
spec:
type: NodePort
ports:
- name: grafana
port: 3000
targetPort: 3000
nodePort: 30002
selector:
app: grafana
values.yaml
namespace: promtest
prom:
replicaCount: 1
image:
- name: prometheus
image: prometheus:latest
pullPolicy: IfNotPresent
评论已关闭