k8s init container // php to nginx public volume

  • 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,

  1. helmchartfolder/values.yaml ##helm chart’inin values.yaml dosyasi
  2. helmchartfolder/template/volumes/public.yaml ##bu dosya eklenecek
  3. helmchartfolder/template/deployment.yaml ##initcontainer’in ve deployment’in yapılan degisiklikleri alabilmesi icin bu dosyada editleme yapilacak,
  4. 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

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogcu bunu beğendi: