Erinevus lehekülje "Helm" redaktsioonide vahel

Allikas: Kuutõrvaja
10. rida: 10. rida:
 
  Creating mychart
 
  Creating mychart
  
 +
Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks, kuid see ei tundu parim näide millest alustada oma isikliku helmi loomist, kuna
 +
sisaldab kohati liiga palju muutujaid ning keerukust.
  
Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks ning selle modfitseerimisest on ka hea esmalt alustada, kuna nginx on paljude
 
helmide jaoks oluline proxy komponent.
 
  
 
Olulisemad failid mis tekivad on järgnevad
 
Olulisemad failid mis tekivad on järgnevad
25. rida: 25. rida:
 
olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail
 
olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail
  
Lisame testiks nginx confi nginx/templates/cm.yaml
+
===Helmi loomine===
  
apiVersion: v1
+
Tekitame keerukama lahenduse. Nginxi ja postgresi conteinerid
data:
 
  nginx.conf: |
 
    events {
 
      worker_connections  1024;
 
    }
 
    http {
 
      server {
 
        listen 80;
 
        location / {
 
          return 200 "===============================\n\n  This is your helm deploy!  \n\n===============================\n";
 
        }
 
      }
 
    }
 
kind: ConfigMap
 
metadata:
 
  name: nginx-config
 
  
Järgmisena peame selle defineerima oma rakenduse failis templates/deployment.yaml volumes ja volumemounts
+
Loome templates/nginx_workload.yaml faili mis tekitab nginx konteineri ning haagib sinna volumeMounts käsuga külge files
 +
kaustas oleva nginx.conf faili
  
 +
<source lang=yaml>
 +
apiVersion: apps/v1
 +
kind: Deployment
 +
metadata:
 +
  name: nginx
 +
  labels:
 +
spec:
 +
  replicas: 1
 +
  selector:
 +
    matchLabels:
 +
      app: nginx
 +
  template:
 +
    metadata:
 +
      labels:
 +
        app: nginx
 +
    spec:
 
       containers:
 
       containers:
         - name: {{ .Chart.Name }}
+
         - name: nginx
           image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+
           image: nginx:latest
          imagePullPolicy: {{ .Values.image.pullPolicy }}
 
 
           ports:
 
           ports:
 
             - name: http
 
             - name: http
 
               containerPort: 80
 
               containerPort: 80
 
               protocol: TCP
 
               protocol: TCP
          ...
 
 
           volumeMounts:
 
           volumeMounts:
             - name: config
+
             - name: nginx
 
               mountPath: /etc/nginx/nginx.conf
 
               mountPath: /etc/nginx/nginx.conf
 
               subPath: nginx.conf
 
               subPath: nginx.conf
 
       volumes:
 
       volumes:
       - name: config
+
       - name: nginx
 
         configMap:
 
         configMap:
 
           name: nginx-config
 
           name: nginx-config
 +
</source>
  
Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis
+
Selleks, et nginx.confi oleks võimalik mountida tuleb see siduda configmapiga. Selleks
tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise. Antud näites on meil kasutuses longhorni andmesalvestuslahendus
+
tuleb luua eraldi fail templates/nginx_config.yaml
 +
 
 +
apiVersion: v1
 +
kind: ConfigMap
 +
metadata:
 +
  name: nginx-config
 +
data:
 +
  nginx.conf: |-
 +
{{ .Files.Get "files/nginx.conf" | indent 4}}
  
Tekitame claimi faili templates/volume.yaml järgneva sisuga
+
Selleks, et saaksime nginxi 80 pordile ligi pääseda tuleb luua eraldi service kirje templates/nginx_service.yaml mis hangib
 +
k8s käest sisemise IP aadressi ning seob selle 80 pordi selector sektsioonis nginx appiga
  
apiVersion: v1
+
apiVersion: v1
kind: PersistentVolumeClaim
+
kind: Service
metadata:
+
metadata:
  name: longhorn-postgres-data
+
  name: nginx
spec:
+
  labels:
  accessModes:
+
spec:
    - ReadWriteOnce
+
  type: ClusterIP
  storageClassName: longhorn
+
  ports:
  resources:
+
    - port: http
    requests:
+
      targetPort: 80
      storage: 10Gi
+
      protocol: TCP
 +
      name: http
 +
  selector:
 +
    app: nginx
  
Volume templates/deployment.yaml failis defineerimiseks
+
Postgresi konteineri tekitamine käib samamoodi. Esmalt loome deployment tüüpi faili mis tekitab konteineri templates/postgresql_workload.yaml
 +
Erinev on siin see, et postgres vajab erinevalt nginxist ka püsivat kettapinda kuhu oma andmebaas tekitada ja seetõttu peame tekitama
 +
talle presistent storage claimi, mis palub clustril eraldada sinna seadistatud storage mehanismilt kettaruumi.
  
 +
apiVersion: apps/v1
 +
kind: Deployment
 +
metadata:
 +
  name: waldur-db
 +
  labels:
 +
spec:
 +
  replicas: 1
 +
  selector:
 +
    matchLabels:
 +
      app: db
 +
  template:
 +
    metadata:
 +
      labels:
 +
        app: db
 +
    spec:
 +
      containers:
 +
        - name: db
 +
          image: bitnami/postgresql:latest
 +
          volumeMounts:
 +
            - name: waldur-postgres-data
 +
              mountPath: /var/lib/postgresql/data
 +
              subPath: data
 +
          env:
 +
          - name: POSTGRESQL_USERNAME
 +
            value: "test"
 +
          - name: POSTGRES_PASSWORD
 +
            value: "test"
 +
          - name: POSTGRESQL_DATABASE
 +
            value: "test"
 +
          ports:
 +
            - name: postgres
 +
              containerPort: 5432
 +
              protocol: TCP
 
       volumes:
 
       volumes:
 
       - name: postgres-data
 
       - name: postgres-data
89. rida: 136. rida:
 
           claimName: longhorn-postgres-data
 
           claimName: longhorn-postgres-data
  
Ja konteinerile külge monteerimiseks
+
Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis
 +
tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise.
 +
Antud näites on meil kasutuses longhorni andmesalvestuslahendus ja küsime sealt 10G suuruse lõigu.
  
          volumeMounts:
+
Tekitame claimi faili templates/postgres_volume.yaml järgneva sisuga
            - name: postgres-data
+
 
              mountPath: /var/lib/postgresql/data
+
apiVersion: v1
              subPath: data
+
kind: PersistentVolumeClaim
 +
metadata:
 +
  name: longhorn-postgres-data
 +
spec:
 +
  accessModes:
 +
    - ReadWriteOnce
 +
  storageClassName: longhorn
 +
  resources:
 +
    requests:
 +
      storage: 10Gi
 +
 
 +
Samuti peame ka postgresile tekitama service kirje, kus sisemine IP seotakse postgres rakenduse 5432 pordiga
 +
 
 +
apiVersion: v1
 +
kind: Service
 +
metadata:
 +
  name: db
 +
  labels:
 +
spec:
 +
  type: ClusterIP
 +
  ports:
 +
    - port: 5432
 +
      targetPort: 5432
 +
      protocol: TCP
 +
      name: postgres
 +
  selector:
 +
    app: db
 +
 
 +
===Testimine===
  
 
Testimiseks kas kõik on korras saab kasutada käsku
 
Testimiseks kas kõik on korras saab kasutada käsku
  
 
  helm template waldur
 
  helm template waldur
 +
 +
===Repositooriumi loomine===
  
 
Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid
 
Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid

Redaktsioon: 1. september 2019, kell 12:34

Paigaldamine skriptiga suvalisele Linuxile

$ curl -LO https://git.io/get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh

Helmi failistruktuuri loomiseks

$ helm create mychart
Creating mychart

Tekkinud failistruktuur sisaldab näidet ngixi paigaldamiseks, kuid see ei tundu parim näide millest alustada oma isikliku helmi loomist, kuna sisaldab kohati liiga palju muutujaid ning keerukust.


Olulisemad failid mis tekivad on järgnevad

test/Chart.yaml - See fail sisaldab nime, versiooninumbrit, kirjeldust ning linke ja ikooni
test/templates/ingress.yaml
test/templates/deployment.yaml - Siin failis on kogu dockeri rakenduse paigaldamise loogika
test/templates/service.yaml - deploymendis tekittud podi sidumine tcp pordiga
test/values.yaml - Muutujad, mida saab deploymentsi ja teiste templatede jaoks seadistada

Soovides konteinereid juurde luua, näiteks lisada nginxile veel postgresi võib tekitada sama pod-i ehk deploymendi sisse teisegi konteineri. Nii võivad olla kokku seatud näiteks nginx ja postgres. Üldiselt on soovitatud aga tekitada kõrvale teine deployment fail

Helmi loomine

Tekitame keerukama lahenduse. Nginxi ja postgresi conteinerid

Loome templates/nginx_workload.yaml faili mis tekitab nginx konteineri ning haagib sinna volumeMounts käsuga külge files kaustas oleva nginx.conf faili

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          volumeMounts:
            - name: nginx
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
      volumes:
      - name: nginx
        configMap:
          name: nginx-config

Selleks, et nginx.confi oleks võimalik mountida tuleb see siduda configmapiga. Selleks tuleb luua eraldi fail templates/nginx_config.yaml

apiVersion: v1 kind: ConfigMap metadata:

 name: nginx-config

data:

 nginx.conf: |-

Mall:.Files.Get "files/nginx.conf"

Selleks, et saaksime nginxi 80 pordile ligi pääseda tuleb luua eraldi service kirje templates/nginx_service.yaml mis hangib k8s käest sisemise IP aadressi ning seob selle 80 pordi selector sektsioonis nginx appiga

apiVersion: v1 kind: Service metadata:

 name:  nginx
 labels:

spec:

 type: ClusterIP
 ports:
   - port: http
     targetPort: 80
     protocol: TCP
     name: http
 selector:
   app: nginx

Postgresi konteineri tekitamine käib samamoodi. Esmalt loome deployment tüüpi faili mis tekitab konteineri templates/postgresql_workload.yaml Erinev on siin see, et postgres vajab erinevalt nginxist ka püsivat kettapinda kuhu oma andmebaas tekitada ja seetõttu peame tekitama talle presistent storage claimi, mis palub clustril eraldada sinna seadistatud storage mehanismilt kettaruumi.

apiVersion: apps/v1 kind: Deployment metadata:

 name: waldur-db
 labels:

spec:

 replicas: 1
 selector:
   matchLabels:
     app: db
 template:
   metadata:
     labels:
       app: db
   spec:
     containers:
       - name: db
         image: bitnami/postgresql:latest
         volumeMounts:
           - name: waldur-postgres-data
             mountPath: /var/lib/postgresql/data
             subPath: data
         env:
         - name: POSTGRESQL_USERNAME
           value: "test"
         - name: POSTGRES_PASSWORD
           value: "test"
         - name: POSTGRESQL_DATABASE
           value: "test"
         ports:
           - name: postgres
             containerPort: 5432
             protocol: TCP
     volumes:
     - name: postgres-data
       persistentVolumeClaim:
         claimName: longhorn-postgres-data

Soovides tekitada konteinerile püsiva volume, nt postgresi andmete hoidmiseks, tuleb tekitada presistent storage. Selleks peame esiteks teadma mis tüüpi presistent storaget kasutab meie k8s cluster ja tekitada vastavalt sellele claimi mis eraldab meile storagest soovitud suurusega jaotise. Antud näites on meil kasutuses longhorni andmesalvestuslahendus ja küsime sealt 10G suuruse lõigu.

Tekitame claimi faili templates/postgres_volume.yaml järgneva sisuga

apiVersion: v1 kind: PersistentVolumeClaim metadata:

 name: longhorn-postgres-data

spec:

 accessModes:
   - ReadWriteOnce
 storageClassName: longhorn
 resources:
   requests:
     storage: 10Gi

Samuti peame ka postgresile tekitama service kirje, kus sisemine IP seotakse postgres rakenduse 5432 pordiga

apiVersion: v1 kind: Service metadata:

 name: db
 labels:

spec:

 type: ClusterIP
 ports:
   - port: 5432
     targetPort: 5432
     protocol: TCP
     name: postgres
 selector:
   app: db

Testimine

Testimiseks kas kõik on korras saab kasutada käsku

helm template waldur

Repositooriumi loomine

Chartide repositoorium koosneb pakitud chartidest ja index.yaml mis sisaldab kõikide chartide nimesid

helm package nginx
mv nginx-0.1.0.tgz nginx
helm repo index nginx --url http://zoo.tartu.ee/charts/nginx/

Uue versiooninumbriga paki tekitamiseks

# helm package nginx --version 1.1.1

Misjärel on tarvilik genereerida ka index uuesti

https://linchpiner.github.io/k8s-multi-container-pods.html