This is an old revision of the document!
kube1:~/webd-k8s# mkdir -p uni-webd-chart/templates/ mv -v my-webd-deployment.yaml uni-webd-chart/templates/ mv -v my-webd-service.yaml uni-webd-chart/templates/
... kube1:~/webd-k8s# helm upgrade -i my-gowebd uni-webd-chart/ -n my-ns --create-namespace
kube1:~/webd-k8s# helm upgrade -i my-htwebd uni-webd-chart/ -n my-ns --create-namespace
kube1:~/webd-k8s# helm upgrade -i my-pywebd uni-webd-chart/ -n my-ns --create-namespace
... kube1:~/webd-k8s# curl http://pywebd.corpX.un
kube1:~/webd-k8s# helm template -f env.yaml my-pywebd uni-webd-chart/ #--debug kube1:~/webd-k8s# helm upgrade -i my-pywebd uni-webd-chart/ -f env.yaml -n my-ns --create-namespace kube1:~/webd-k8s# curl https://pywebd.corpX.un -kv
kube1:~/webd-k8s# cat uni-webd-chart/Chart.yaml
apiVersion: v2 name: webd-chart version: 0.1.0
kube1:~/webd-k8s# cat uni-webd-chart/values.yaml
#hostname: webd
#replicaCount: 2
#image:
# repository: gitlab.corpX.un:5000/student/webd
# tag: ver1.1
#env:
# PYWEBD_DOC_ROOT: /var/www/
# PYWEBD_PORT: 4443
# APWEBD_HOSTNAME: "apwebd.corpX.un"
# KEYCLOAK_HOSTNAME: "keycloak.corpX.un"
# REALM_NAME: "corpX"
service:
port: 80
# targetPort: 4080
# type: LoadBalancer
# ip: 192.168.X.65
ingress:
enabled: false
className: nginx
hosts:
- hostTemplate: "{{ .Values.hostname }}.{{ .Values.domain }}"
##- host: webd.corpX.un
##- host: corpX.un
tls: []
# tls:
# - secretName: webd-tls
# hosts:
# - "{{ .Values.hostname }}.{{ .Values.domain }}"
## - webd.corpX.un
## - corpX.un
certificate:
enabled: false
secretName: webd-tls
dnsNames:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
##- webd.corpX.un
##- "*.corpX.un"
issuerRef_name: freeipa-dns-clusterissuer
issuerRef_kind: ClusterIssuer
volumes: []
#volumes:
#- name: secret-tls-volume
# secret:
# secretName: pywebd-tls
volumeMounts: []
#volumeMounts:
#- name: secret-tls-volume
# subPath: tls.crt
# mountPath: /etc/pywebd/pywebd.crt
#- name: secret-tls-volume
# subPath: tls.key
# mountPath: /etc/pywebd/pywebd.key
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-webd-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-dep
spec:
selector:
matchLabels:
app: {{ .Release.Name }}-lab
replicas: {{ default 1 .Values.replicaCount }}
template:
metadata:
labels:
app: {{ .Release.Name }}-lab
spec:
containers:
- name: my-webd
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default "latest" }}"
{{- with .Values.env }}
env:
{{- range $key, $val := . }}
- name: {{$key}}
value: {{$val|quote}}
{{- end}}
{{- end}}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.volumes }}
volumes:
{{- toYaml . | nindent 6 }}
{{- end }}
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-webd-service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-svc
spec:
selector:
app: {{ .Release.Name }}-lab
ports:
- protocol: TCP
port: {{ .Values.service.port }}
{{- if hasKey .Values.service "targetPort" }}
targetPort: {{ .Values.service.targetPort }}
{{- end }}
type: {{ .Values.service.type | default "ClusterIP" }}
{{- if and (hasKey .Values.service "ip") (eq .Values.service.type "LoadBalancer") }}
loadBalancerIP: {{ .Values.service.ip }}
{{- end }}
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-ingress.yaml
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}-ingress
spec:
ingressClassName: {{ .Values.ingress.className }}
rules:
{{- range .Values.ingress.hosts }}
{{- /* - host: {{ .host }} */}}
- host: {{ tpl .hostTemplate $ }}
http:
paths:
- backend:
service:
name: {{ $.Release.Name }}-svc
port:
number: {{ default $.Values.service.port $.Values.service.targetPort}}
path: /
pathType: Prefix
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ tpl . $ | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
{{- end }}
kube1:~/webd-k8s# cat env.yaml
domain: corpX.un
kube1:~/webd-k8s# cat uni-webd-chart/templates/my-certificate.yaml
{{- if .Values.certificate.enabled -}}
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: {{ .Release.Name }}-cert
spec:
secretName: {{ .Values.certificate.secretName }}
dnsNames:
{{- range .Values.certificate.dnsNames }}
- {{ tpl . $ | quote }}
{{- end }}
issuerRef:
name: {{ .Values.certificate.issuerRef_name }}
kind: {{ .Values.certificate.issuerRef_kind }}
privateKey:
rotationPolicy: Always
{{- end }}
kube1:~/webd-k8s# cp uni-webd-chart/values.yaml apps/gowebd/values.yaml kube1:~/webd-k8s# cp uni-webd-chart/values.yaml apps/pywebd/values.yaml kube1:~/webd-k8s# vim uni-webd-chart/values.yaml
Комментируем для документации, для демонстрации наследования можно оставить то, что часто используется по умолчанию
kube1:~/webd-k8s# cat apps/gowebd/values.yaml
hostname: gowebd
replicaCount: 2
image:
repository: gitlab.corpX.un:5000/student/gowebd
tag: ver1.1
ingress:
enabled: true
tls:
- secretName: gowebd-tls
hosts:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
certificate:
enabled: true
secretName: gowebd-tls
kube1:~/webd-k8s# helm template my-gowebd uni-webd-chart/ -f apps/gowebd/values.yaml -f env.yaml kube1:~/webd-k8s# helm upgrade -i my-gowebd uni-webd-chart/ -f env.yaml -f apps/gowebd/values.yaml -n my-ns --create-namespace
kube1:~/webd-k8s# cat apps/pywebd/values.yaml
hostname: pywebd
image:
repository: gitlab.corpX.un:5000/student/pywebd
tag: ver1.2
env:
PYWEBD_DOC_ROOT: /var/www2/
PYWEBD_PORT: 4443
service:
# port: 80
port: 443
targetPort: 4443
type: LoadBalancer
ip: 192.168.X.65
certificate:
enabled: true
secretName: pywebd-tls
volumes:
- name: secret-tls-volume
secret:
secretName: pywebd-tls
volumeMounts:
- name: secret-tls-volume
subPath: tls.crt
mountPath: /etc/pywebd/pywebd.crt
- name: secret-tls-volume
subPath: tls.key
mountPath: /etc/pywebd/pywebd.key
kube1:~/webd-k8s# cat apps/apwebd/values.yaml
hostname: apwebd
image:
repository: gitlab.corpX.un:5000/student/apwebd
tag: ver1.1
env:
APWEBD_HOSTNAME: "apwebd.corpX.un"
KEYCLOAK_HOSTNAME: "keycloak.corpX.un"
REALM_NAME: "corpX"
ingress:
enabled: true
tls:
- secretName: apwebd-tls
hosts:
- "{{ .Values.hostname }}.{{ .Values.domain }}"
certificate:
enabled: true
secretName: apwebd-tls
kube1:~/webd-k8s# cat argocd/application.yaml