- 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,
İlgili dosyalara erişmek için aşağıdaki repoyu kullanabilirsiniz;
https://github.com/mertyakan/k8s-init-container
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
1. values.yaml
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
2. volumes/public.yaml
{{- 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 -}}
3. template/deployment.yaml
spec: {{- with .Values.initContainers }} initContainers: {{- include "common.tplvalues.render" ( dict "value" . "context" $ ) | nindent 8}} {{- end }}
4. init_command.sh
/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