kubernetes sidecar container ile php container arasındaki volume iceriginin paylasilmasi
- Bu icerikte kubernetes uzerindeki php ve nginx podlari, nginx sidecar olacak sekilde konfigure edilmistir,
- Fakat uygulmanin php icerisindeki css dosyalarına ulasması gerekmektedir,
- Sidecar olarak deploy edilen podlar arasında ilgili alani volume olarak baglanmistir,
- Bu islem icin, init container kullanılmistir,
Ozetle init container'in bu stratejideki gorevi php uzerindeki css dosyasının bulundugu dizini kendi uzerinde /tmp/X alanında yada sizin belirleyeceginiz herhangi bir alanda rsync ile dosyaları kopyalamasi, init container'a baglanan volume uzerine esitlemesi olarak tanımlayabiliriz. Sonrasında bu volume'u nginx uzerine baglayarak ilgili alandaki css dosyasına erismesini saglayacagiz.
Helm kullanarak olusturdugum chart uzerinde asagidaki dosyalarda degisiklikler yapilmistir,
- helmchartfolder/values.yaml ##helm chart'inin values.yaml dosyasi
- helmchartfolder/template/volumes/public.yaml ##bu dosya eklenecek
- helmchartfolder/template/deployment.yaml ##initcontainer'in ve deployment'in yapılan degisiklikleri alabilmesi icin bu dosyada editleme yapilacak,
- init container icinde calisacak script'i istediginiz alanda barındırabilirsiniz,
Klasor agaci asagidaki gibi; bu makalede anlatilan konu disindaki diger dosyalari gormezden geliniz,
├── app
│ ├── Chart.lock
│ ├── Chart.yaml
│ ├── charts
│ │ ├── common-1.10.4.tgz
│ │ ├── elasticsearch-7.16.3.tgz
│ │ └── mysql-8.8.23.tgz
│ ├── templates
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── configmaps
│ │ │ └── configmaps.yaml
│ │ ├── deployment.yaml
│ │ ├── hpa.yaml
│ │ ├── ingress.yaml
│ │ ├── secret.yaml
│ │ ├── service.yaml
│ │ ├── serviceaccount.yaml
│ │ ├── tests
│ │ │ └── test-connection.yaml
│ │ └── volumes
│ │ └── public.yaml
│ └── values.yaml
└── externalConfigs
├── envVars
│ └── envVars
├── mysql
│ └── mysql-values.yaml
├── nginx
│ ├── default.conf
│ ├── nginx.conf
│ └── nginx.conf.sample
└── scripts
└── init_command.sh
persistence:
enabled: true
extraVolumeClaims:
public:
storageClass: px-sharedv4-sc
accessMode: ReadWriteMany
size: 2Gi
extraVolumes:
- name: public
persistentVolumeClaim:
claimName: public
sidecars:
- name: nginx
image: image/m2:latest
volumeMounts:
- mountPath: /var/www/html/public
name: public
initContainers:
- name: sync-volume
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
securityContext:
runAsUser: 0
command: ["/bin/sh"]
args:
- -c
- |
{{- if .Values.externalConfigs.scripts.init_command_sh }}
{{ tpl .Values.externalConfigs.scripts.init_command_sh . | nindent 4 }}
{{- end }}
volumeMounts:
- name: public
mountPath: /tmp/public
{{- if and .Values.persistence.enabled }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: public
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
{{- if .Values.persistence.hostPath }}
storageClassName: ""
{{- else }}
storageClassName: {{ .Values.persistence.extraVolumeClaims.public.storageClass }}
{{- end }}
accessModes:
- {{ .Values.persistence.extraVolumeClaims.public.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.extraVolumeClaims.public.size | quote }}
{{- end -}}
spec:
{{- with .Values.initContainers }}
initContainers:
{{- include "common.tplvalues.render" ( dict "value" . "context" $ ) | nindent 8}}
{{- end }}
/bin/bash <<'EOF'
rsync -avc /var/www/html/public/ /tmp/public/
EOF
helm install command;
helm upgrade --install --create-namespace -n mert-akeneo mert-akeneo akeneo/ --set ingress.enabled=false --set-file externalConfigs.nginx.nginx_conf=externalConfigs/nginx/nginx.conf --set-file externalConfigs.nginx.nginx_conf_sample=externalConfigs/nginx/nginx.conf.sample --set-file externalConfigs.nginx.default_conf=externalConfigs/nginx/default.conf,externalConfigs.envVars.envVars=externalConfigs/envVars/envVars,externalConfigs.scripts.init_command_sh=externalConfigs/scripts/init_command.sh -f externalConfigs/mysql/mysql-values.yaml