Technical note
HelmChart制作
参考
常规操作
# 生成骨架
helm create mychart
# 修改并安装
helm install full-coral ./mychart
# 查看实际加载的模板
helm get manifest full-coral
## 安装
helm install clunky-serval ./mychart --namespace mynamespace
# 测试渲染
helm install --debug --dry-run goodly-guppy ./mychart
helm install solid-vulture ./mychart --dry-run --debug --set favoriteDrink=slurm
使用HarborHelm仓库
https://juejin.cn/post/6844903795827146759
# 安装cm-push插件,3.8以上虽然自带push命令,但无法实现向http仓库推送
helm plugin install https://github.com/chartmuseum/helm-push
# 添加HarborHelm仓库
helm repo add dubhe http://harbor.dubhe:30002/chartrepo/dubhe
helm repo update
# 上传chart
helm cm-push ./gogs.tgz dubhe --username admin --password yourpass
简易脚手架
Chart.yaml
apiVersion: v2
name: mysql
description: Dubhe MySQL Helm Chart for Kubernetes
type: application
version: 1.0.0
appVersion: "5.7.42-debian"
values.yaml
mysql:
repository: mysql
tag: 5.7.42-debian
imagePullPolicy: Always
storageClassName: longhorn-retain
storageSize: 20Gi
nodePort: 30353
templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: "{{ .Values.mysql.repository }}:{{ .Values.mysql.tag }}"
imagePullPolicy: {{ .Values.mysql.imagePullPolicy }}
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: dubhe-secret
key: mysql-password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/mysql.conf.d/mysqld.cnf
subPath: mysqld.cnf
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql
- name: mysql-config
configMap:
name: mysql-configmap
items:
- key: mysql-conf
path: mysqld.cnf
templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-configmap
data:
mysql-conf: |
[mysqld]
server_id = 1
log-bin = mysql-bin
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
character-set-server=utf8
group_concat_max_len=102400
max_connections=2000
max_allowed_packet=524288000
default-time-zone='+08:00'
# 忽略挂载目录
ignore-db-dir=lost+found
templates/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql
spec:
accessModes:
- ReadWriteOnce
{{- if not ( empty .Values.mysql.storageClassName ) }}
storageClassName: {{ .Values.mysql.storageClassName }}
{{- end }}
resources:
requests:
storage: {{ .Values.mysql.storageSize }}
templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
clusterIP: None
templates/service-exposed.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-exposed
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
{{- if not ( empty .Values.mysql.nodePort ) }}
nodePort: {{ .Values.mysql.nodePort }}
{{- end }}
type: NodePort