Explicant applicationes per plures racemos Kubernetes cum Helm

Quam Dailymotion Kubernetes adhibet: Application instruere

Nos ad Dailymotionem Kubernetes productionis abhinc III annos uti coepimus. Sed applicationes per multiplices ligaturas explicas amet est, itaque per hos annos instrumenta nostra et workflows emendare conati sumus.

Ubi incipit?

Hic tegamus quomodo applicationes nostras per multiplices racemos Kubernetes circa mundum explicabimus.

Ad multiplices Kubernetes res statim explicandas utimur helmet omnia nostra chartula in uno repositorio reposita sunt. Ad plenam applicationis acervum ex pluribus officiis explicandis, chartis breviariis sic dictis utimur. Essentialiter, haec chartula est quae clientelas declarat et te API initiali et officia eius uno mandato permittit.

Scripsimus etiam parvam Pythonis scriptionem super Helm ad compescendos, chartas condendas, arcana addendi, applicationes explicandi. Omnia haec munera in suggestu centrali CI utens imagine aguntur.

Ad rem veniamus.

Nota. Cum haec legeris, primum candidatus remissionis Helm 3 iam nuntiatus est. Praecipua versio integram exercitum emendandi habet ut aliquos proventus quos in praeterito habuimus alloqui.

Chart progressionem workflow

Ad applicationes ramosas utimur, eundemque ad chartis accessum adhibere decrevimus.

  • Ramus dev usus ad creandum chartis quae in racemis evolutionis probentur.
  • Cum viverra petitio submittatur dominuspellantur in choragio.
  • Denique rogationem trahendam creamus ut mutationes in ramo committamus PRODI et eas in productione adhibeas.

Quisque ambitus suum proprium repositio habet, quae chartis nostris reponit et utimur Chartmuseum utilissimis APIs. Hoc modo strictam solitudinem cavemus inter ambitus et reales mundi probationes chartis antequam eas in productione utamur.

Repositoria in diversis ambitibus chart

Notatu dignum est quod, cum tincidunt ramum dev trudunt, versionem charti suae statim ad dev Chartmuseum impulit. Omnes igitur tincidunt eodem repositorio utantur, et debes diligenter denotare versionem chartularum ne forte alienae mutationes utantur.

Nostra autem scriptura Python parum validat Kubernetes obiecta Kubernetes OpenAPI specifications utens Kubevalprius editam Chartmusem.

Descriptio generalis chart evolutionis workflow

  1. Pipeline operas profecti sunt secundum speciem gazr.io qua- lor imperium (linnt, unit-test).
  2. Inpellit in donarium imaginem cum instrumentis Pythonis quae applicationes nostras explicant.
  3. Genus nomine ambitus erigens.
  4. Kubernetes yaml validating files utentes Kubeval.
  5. Automatarie versionem chartæ et chartæ parentis ejus (charta quæ e chartæ mutatis pendent).
  6. Subdendo chart ad Chartmuseum quod congruit eius environment

Administrandi differences per clusters

Foederatio Botri

Fuit tempus quo usi sumus foederatio botri Kubernetesubi res Kubernetes ex unico API end. Sed orta sunt problemata. Exempli gratia, quaedam obiecta Kubernetes in foederationis termino creari non potuerunt, difficilem foederata obiecta conservare et alia singulis racemis obiecta.

Ad problema solvendum, ligaturas independenter tractare coepimus, quae processum valde faciliorem reddebant (prima versionis foederationis usi sumus; aliquid in secunda mutare potuit).

Geo-statu distribuitur

Rostra nostra nunc per 6 regiones distribuuntur, 3 localiter et 3 in nube.


Distribuit instruere

Valla Galea Global

4 Valores Helm globalis permittunt te discrimina inter ligaturas dignoscere. Omnes nostrae chartulae valorem minimum defaltam habent.

global:
  cloud: True
  env: staging
  region: us-central1
  clusterName: staging-us-central1

Global values

Haec bona adiuvantia contextum pro nostris applicationibus definiunt et ad varios usus adhibentur: vigilantia, investigatio, colligatio, vocatio externa faciens, scandens, etc.

  • "nubes": hybrid Kubernetes suggestum habemus. Exempli gratia, noster API in zonis GCP et in centris nostris explicatur.
  • "env": Aliquot valores in ambitus non productiones mutare possunt. Exempli causa, subsidia definitionum et configurationum autoscaling.
  • "Regio": Haec notitia adiuvat locum botri determinare et adhiberi potest ad terminos proximos pro exterioribus officiis determinare.
  • "botrusname": si et quando definire volumus valorem pro uno botro.

Ecce certum exemplum:

{{/* Returns Horizontal Pod Autoscaler replicas for GraphQL*/}}
{{- define "graphql.hpaReplicas" -}}
{{- if eq .Values.global.env "prod" }}
{{- if eq .Values.global.region "europe-west1" }}
minReplicas: 40
{{- else }}
minReplicas: 150
{{- end }}
maxReplicas: 1400
{{- else }}
minReplicas: 4
maxReplicas: 20
{{- end }}
{{- end -}}

Helm template exemplum

Haec logica definitur in adiutorio exemplorum ad vitandam Kubernetes YAML.

Application Nuntius

Instrumenta instruere nostra in pluribus documentis YAML nituntur. Infra exemplum est quomodo declaramus obsequium et topologiam eius scandentem (numerum replicarum) in botro.

releases:
  - foo.world

foo.world:                # Release name
  services:               # List of dailymotion's apps/projects
    foobar:
      chart_name: foo-foobar
      repo: [email protected]:dailymotion/foobar
      contexts:
        prod-europe-west1:
          deployments:
            - name: foo-bar-baz
              replicas: 18
            - name: another-deployment
              replicas: 3

Service Definition

Forma est haec omnium graduum quae in programmatibus nostris incepta definiunt. Ultimus gradus applicationem multiplicium botrum operariorum eodem tempore explicat.


Jenkins instruere gradibus

Quid de arcanis?

Secundum securitatem, omnia secreta e diversis locis indagamus et in unico crypta condimus firmamentum Lutetiae.

Instrumenta nostra instruere ad valores occultos de Vault extrahendi et, cum tempus instruere advenerit, eas Helm inserere.

Ad hoc faciendum, definivimus destinata inter secreta in Vault et secreta quae applicationes nostras indigent;

secrets:                                                                                                                                                                                                        
     - secret_id: "stack1-app1-password"                                                                                                                                                                                  
       contexts:                                                                                                                                                                                                   
         - name: "default"                                                                                                                                                                                         
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"                                                                                                                                                                                    
         - name: "cluster1"                                                                                                                                                                           
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"

  • Regulas generales definivimus sequi cum secreta in Vault memorant.
  • Si secretum habet ad specifica context vel botrum portassent, certum ingressum addere debes. (Hic contextus botrus1 suum valorem pro ACERVUS arcano-app1-password habet).
  • Alioquin valorem adhibetur per default.
  • Pro singulis item in hoc album in Kubernetes secreto key-par pretii inseritur. Ergo in chartis nostris valde simplex est.

apiVersion: v1
data:
{{- range $key,$value := .Values.secrets }}
  {{ $key }}: {{ $value | b64enc | quote }}
{{ end }}
kind: Secret
metadata:
  name: "{{ .Chart.Name }}"
  labels:
    chartVersion: "{{ .Chart.Version }}"
    tillerVersion: "{{ .Capabilities.TillerVersion.SemVer }}"
type: Opaque

Problemata et limitationes

Opus cum multa repositoria

Nunc evolutionem chartarum et applicationum separamus. Hoc significat tincidunt laborare in duobus repositoriis git: unum ad applicationem, alterum ad definiendum instruere Kubernetes. 2 git repositoria intelliguntur 2 workflows, et facile est pro newbie confundi.

Administrandi communis charts est hassle

Ut iam diximus, chartae genericae valde utiles sunt ad cognoscendas clientelas et multiplices applicationes celeriter explicandas. Sed utimur --reuse-valuesad vitandum omnes valores omni tempore explicamus applicationem quae pars est huius chart generalis generalis.

In continua traditione workflui solum duos valores habemus qui regulariter mutantur: numerus replicationum et tag imago (versio). Aliae valores manuales stabiliores mutantur, quod est difficillimum. Praeterea unus error in chartis generativae explicandis gravibus delictis efficere potest, sicut ex nostra experientia vidimus.

Configuratione files adaequationis multa

Cum elit novam applicationem addit, plures tabulas mutare habet: declarationem applicationis, secretorum elenchum, addita applicationis pro dependentia, si in chart generatim comprehendatur.

Jenkins permissiones nimis extensae sunt in Vault

Nunc habemus unum AppRolequi omnia secreta de Cochle legit.

In reverti processus non automated

Ad revolvere, opus est imperio pluribus racemis currere, et hoc erroribus refertum est. Hanc operationem manually facimus ut recta versio ID specificetur.

Movemur ad GitOps

Propositum nostrum

Chartam reddere volumus ad repositorium applicationis quam explicatur.

Opus operandi idem erit ac progressus. Exempli gratia, cum ramus ad dominum impellitur, instruere automatice utitur. Praecipua differentia inter accessum hunc et fluxum currentem esset illud omnia agetur in git (schedula ipsa et via in Kubernetes explicatur).

Commoda plura sunt;

  • Multum clarius Nam elit. Facilius est cognoscere quomodo mutationes in chart locali applicare.
  • Ministerium instruere definitio potest specificari eodem loco signum servitutis.
  • Administrandi remotionem charts communis. Habebit seruicium suum Helm et suum dimittam. Hoc licebit tibi applicationem lifecycli (reversi, upgrade) in minimo gradu regere, ne ad alia officia afficias.
  • Beneficia git pro administratione chart: undo mutationes, stipes audit, etc. Si mutationem chart solvere debes, git utens facere potes. Instruere statim incipit.
  • Ut consideres meliori tuo progressu workflow cum tools ut Skaffoldcum quibus tincidunt mutationes in contextu prope productionem probare possunt.

Duo-gradus migrationis

Tincimenta nostra hoc workflow pro 2 annis iam utentes sunt, migrationem quam maxime sine dolore esse volumus. Unde constituimus gradum medium apponere in via ad metam.
Primus gradus simplex est;

  • Similem structuram servamus in applicatione instruere, sed in uno obiecto quod DailymotionRelease vocatur.

apiVersion: "v1"
kind: "DailymotionRelease"
metadata:
  name: "app1.ns1"
  environment: "dev"
  branch: "mybranch"
spec:
  slack_channel: "#admin"
  chart_name: "app1"
  scaling:
    - context: "dev-us-central1-0"
      replicas:
        - name: "hermes"
          count: 2
    - context: "dev-europe-west1-0"
      replicas:
        - name: "app1-deploy"
          count: 2
  secrets:
    - secret_id: "app1"
      contexts:
        - name: "default"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"
        - name: "dev-europe-west1-0"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"

  • 1 remissionis per applicationem (sine chartis communis).
  • Charts in schedula repositorii git s.

Locuti sumus omnibus e tincidunt, unde processus migrationis iam inceperat. Primus gradus adhuc utens tribunal CI moderatur. Aliam stationem mox scribam de phase duo: quomodo nos ad GitOps workflow permovemus? influunt,. Dicam vobis quomodo omnia constituamus et quas difficultates invenimus (multa repositoria, secreta, etc.). Sequere nuncium.

Hic progressum nostrum describere conati sumus per annos praeteriti laboris in applicatione instituti, quae ad cogitationes de GitOps accedunt. Nondum metam attigimus ac de exitu nuntiabimus, nunc persuasum habemus rem recte fecisse cum omnia simpliciorem reddere decrevimus et propius ad habitum tincidunt efficere.

Source: www.habr.com