ProHoster > Блог > administratio > Quaerens nova instrumenta aedificandi et automandi instruere in Kubernetes
Quaerens nova instrumenta aedificandi et automandi instruere in Kubernetes
Salve! Nuper multa instrumenta automationis refrigerantia dimissa sunt tum ad imagines aedificandas Docker et ad Kubernetes instruere. Hac de re placuit cum GitLab circum ludere, eius facultates penitus perscrutari et, sane, pipelinem constituere.
Hoc opus inspiratum a website kubernetes.ioquod generatur ex source codes automatice, et pro unaquaque piscina rogatu misso, robot automatice versionem loci praevisum cum mutationibus tuis gignit et nexum videndi praebet.
Similem processum de scabere conabar aedificare, sed plane in Gitlab CI constructum et instrumenta libera, quibus usus sum utens ad applicationes ad Kubernetes explicandas. De his tandem tibi hodie plura dicam.
De instrumentis ut de articulis disseremus: Hugo, qbec, kaniko, git-crypt и C. GitLab cum creatione dynamicae progressionis.
Exemplum propositi nostri, documenta editae in Hugone situm creare conabimur. Hugo static contentus generator est.
Pro quibus static generantibus noti sunt, de his paulo plura dicam. Dissimiles machinae institutoriae cum database et quibusdam PHP, quae ab usore petitae paginas in musca generant, generatores statice paulo aliter designantur. Permittunt te accipere fontes, plerumque tabellarum copiae in Markdown markup et thema templates, deinde eas compilare in loco perfecto perfecto.
Hoc est, ex consequenti, directorium structuram ac seriem HTML imaginum generatarum accipies, quae simpliciter cuilibet vili obnoxio et laboranti website imponere potes.
Hugonem localiter instituere potes et eum experior:
Novum site initializing:
hugo new site docs.example.org
Simulque git repositio;
cd docs.example.org
git init
Hactenus noster situs pristinus est et ut aliquid in eo appareat, primum opus est thema connectere: thema is just a set of templates and specified rules by which our site is generated.
Pro themate utemur Discequae, mea quidem sententia, ad locum documentorum aptissima est.
Velimus sedulo animadvertimus quod in repositorio nostro thema imaginum servare non opus est, sed simpliciter illud per coniungere possumus. git submodule:
Ita repositorium nostrum continebit tantum fasciculos directe ad nostrum propositum relatos, et thema connexum remanebit ut nexum cum reposito specifico et commissum in eo, hoc est, semper ab originali fonte extrahi et timere non potest. mutationibus repugnat.
Sit scriptor corrigere aboutconfig config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
Iam in hac scaena currere potes;
hugo server
Et in inscriptione http://localhost:1313/ reprehendo nostrum website nuper creatum, omnes mutationes factae in indicem automatice update paginam apertam in navigatro, commodissime!
Sit scriptor pagina operimentum creare experimentum content/_index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
Screenshot paginae nuper creatae
Situm generare, mox currere;
hugo
Indicis contenta public/ et in website tuum erit.
Immo obiter eam statim adiciamus .gitignore:
echo /public > .gitignore
Mutationes nostras committere noli oblivisci:
git add .
git commit -m "New site created"
2. Praeparans Dockerfile
Tempus est repositorii structuram definire. Soleo uti aliquid simile;
dockerfiles/ - directoria continent cum Dockerfiles et omnia necessaria ad imagines fabricandas nostras Docker.
explicandam/ - continet directoria ad applicationes nostras ad Kubernetes explicandas
Sic primum Dockerfile per viam creabimus dockerfiles/website/Dockerfile
FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src
FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]
Ut videre potes, Dockerfile duos contineat a, haec factura appellatur multi scaena constructum ac permittit ut omnia quae superflua sunt ab ultima Docker imagine excludas.
Sic ultima imago tantum continebit darkhttpd (LEVUS HTTP server) et public/ - Summa nostri stabiliter generatae website.
Mutationes nostras committere noli oblivisci:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. Ut cognoscat kaniko
Sicut fabricator imaginis auctor, ego uti decrevi kanikoCum eius operatio non requirit daemonem dolitorem, et ipsa constructio quavis machina peragi potest et cella directe in registro condi potest, eo quod removeatur necesse est ut repositione plenae discursationis pertinax sit.
Condere imaginem, mox vas cum currunt kaniko executor et transitum hodiernam contextus aedificandi, quod etiam localiter fieri potest, per scopo:
quibus registry.gitlab.com/kvaps/docs.example.org/website - nomen imaginis tuae, cum aedificatur, automatice in registrum scopulorum deducetur.
parametri --cache sino vos ut strata cache in subcriptio Faucibus, exempli gratia, fient in registry.gitlab.com/kvaps/docs.example.org/website/cache, sed aliam semitam uti potes modulo --cache-repo.
Tortor de docker-subcriptio
4. ut cognoscat qbec
Qbec instrumentum instruere est quod permittit ut declarative applicationem tuam describere manifestat ac eas Kubernetes explicet. Utens Jsonnet sicut syntax principalis sinit te valde simpliciorem reddere descriptionem differentiarum per multiplices ambitus, et etiam paene omnino eliminat codicem repetitio.
Hoc maxime verum esse potest in casibus in quibus applicationem ad plures ligaturas cum diversis parametris explicandas opus est et eas in Git declarare voles.
Qbec etiam tibi permittit ut Helm chartulas in transeundo parametros necessarias redderes, ac deinde eas eodem modo ac manifestas regulares operare, in iis varias mutationes in iis adhibere potes, et hoc vicissim tibi permittit ut necessitas careat. uti ChartMuseum. Id est, condere potes et reddere chartulas directe ex git, ubi sunt.
Ut ante dixi, omnia opera in directorio recondimus explicandam/:
Hic imprimis interest in spec.environments, qbec iam defaltam environment pro nobis creavit et inscriptionem servo electronicam accepit, necnon spatii spatii e kubeconfig currente nostro.
Nunc cum disponas ad default ambitus, qbec solum ad botrum Kubernetes determinatum et ad certum spatium nominandum explicabit, hoc est, iam non debes commutare inter contextus et spatiis nomina ad instruere.
Si opus est, semper occasus in hoc documento renovare potes.
Omnes ambitus tuos describuntur qbec.yamlet in tabella params.libsonnetubi dicitur ubi parametri sunt.
Deinde videmus duos directoria:
components / — omnes manifestationes ad applicationem nostram hic reponendae sunt, describi possunt tam in jsonnet quam in imagini yaml regulari
ambitus/ — hic omnes variabiles ambitus nostros (parametri) describemus.
Per default duos ordines habemus:
environments/base.libsonnet - communes parametros continebit pro omnibus ambitibus
environments/default.libsonnet - continet ambitum overridden ad environment default
aperta est environments/base.libsonnet et adde parametros pro primo nostro ibi componente;
In hoc fasciculo tria entia Kubernetes statim descripsimus, haec sunt: instruere, obsequium и Ingress. Si vellemus, possemus eas in varias partes ponere, sed una adhuc satis erit nobis.
Syntax jsonnet simillimum est regulari json, in principio, regularis json iam valet jsonnet, sic primo facilius tibi erit utere online officia sicut yaml2json consuetum tuum yaml in json convertere, vel, si partes tuae variabiles non continent, forma regularis yaml describi possunt.
Cum opus est jsonnet EGO altus suadeo installing plugin pro editor
Exempli gratia, plugin pro vim vim-jsonnet, quod syntaxin volvitur elucidando et ipso facto perficit jsonnet fmt omne tempus servas (instituitur jsonnet requirit).
Omnia parata sunt, iam explicari incipimus;
Ut quid cepimus, curramus;
qbec show default
In output, videbis yaml redditum manifestat quod botrum default applicabitur.
Magna nunc applicare;
qbec apply default
In output semper videbis quid in botro tuo fiet , qbec rogabit te ut consentias typing mutationes . y voluntates tuas confirmare poteris.
Nostra applicatio parata est et explicatur!
Si mutas, semper potes;
qbec diff default
videre quomodo hae mutationes accidunt instruere currentem
Mutationes nostras committere noli oblivisci:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. Conatus Gitlab-cursor apud Kubernetes executor
Usque nuper tantum usus est regularis gitlab-cursor in machina praeparata (LXC continens) concha seu docker-exsecutor. Initio complures tales cursores globally in gitlab nostra definitos habuimus. Navale imagines omnium inceptorum colligebant.
Sed ut praxis ostendit, haec optio non est optima, tam ratione practicae et salutis. Multo melius est et ideologiam rectius habere singulas cursores ad singulas res, vel etiam ad singulas ambitus explicandas.
Fortunate haec quaestio omnino non est, quia nunc explicabimus gitlab-cursor directe ad partem nostri consilii juris in Kubernetes.
Gitlab chartam gubernaculo paratam factam praebet ad gitlab-cursorem ad Kubernetes explicandam. Itaque omne opus facere est invenire adnotatione firmitatis indicium ad nostrum project in Optiones -> CI / CD -> Runners gubernare et consequentes;
yga8y-jdCusVDn_t4Wxc - adnotatione tessera ad propositum tuum.
rbac.create = veri — Cursorem praebet necessaria privilegiorum copia ut siliquas creare possit ad officia nostra exercenda utendo kubernetes-executore.
Si omnia recte aguntur, cursorem relatus in sectione videre debes Cursor, in occasus project.
Tortor additae cursor
Estne simplex? - Immo simplex est! Nulla plus hassle cum cursoribus manualibus perscriptum, posthac cursores automatice creabuntur et delebuntur.
6. Deploy Helm chartis cum QBEC
Cum considerare decrevimus gitlab-cursor pars propositi nostri est tempus describere in repositorio nostro Git.
Non potuimus describere componentes separatum websitesed in posterum diversis exemplaribus disponere disponimus website persaepe, unlike gitlab-cursorquae semel tantum per Kubernetes botrum explicabuntur. Sit scriptor initialize applicationem separatam pro eo:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
Hoc tempore Kubernetes res manuales non describemus, sed chartulam Helm paratam capiemus. Una commoda qbec facultas est reddendi Helm chartis directe ex Git reposito.
Sed secreta recondere in Git tutum non est? Itaque necesse est eas recte encrypt.
Usitas, unius variabilis causa, hoc non semper convenit. Secreta transferre potes qbec et per variabiles ambitus systematis CI tui.
Sed memorabile est etiam plura incepta esse quae plura secreta continere possint, ea omnia transferre per variabiles ambitus difficiliores erunt.
Hoc autem in casu nolui de tam mirifico instrumento narrare git-crypt.
git-crypt Convenit etiam in eo quod permittit te totam historiam secretorum servare, ac certamina comparare, confundi et resolvere eodem modo, sicut nos in Git agere consuevimus.
Primum est post institutionem git-crypt necesse est claves generare pro reposito nostro:
git crypt init
Si PGP clavem habes, te statim addere potes adiutorem huius rei:
Hoc modo semper minuere potes hoc repositorium privatis clavibus utens.
Si PGP clavem non habes et eam non exspectas, alia via ire potes et clavis documenti exportare:
git crypt export-key /path/to/keyfile
Sic quicunque exportatum habet keyfile minui poterit repositio.
Tempus est secretum primum constituere.
Fac me admonere te nos adhuc esse in indicem explicandam/gitlab-runner/, ubi habemus directorium secreta/, omnes tabellas encryptas in eo, hoc enim fasciculum creabimus secreta /.gitattributes cum sequenti contenti:
Ut ex contento videri potest, omnia fascicula palliata sunt * ejicietur per git-cryptnisi magna .gitattributes
Hoc per currit possumus reprehendo:
git crypt status -e
In output erit index omnium imaginum in promptuario pro quibus encryption potest
Actum est, nunc tuto mutationes nostras committere;
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
Repositorium claudere, mox currere;
git crypt lock
statimque omnes fasciculi encrypted in binarii aliquid convertent, eas legere impossibile erit.
Minuta repositio, currite;
git crypt unlock
8. crea in toolbox imaginem
Instrumenti instrumenti imago est imago cum omnibus instrumentis quibus ad nostrum propositum explicandum utemur. Adhibebitur a cursore Gitlab ad operas instruere typicas.
Omnia hic simplicia sunt, novum crearemus dockerfiles / toolbox / Dockerfile cum sequenti contenti:
FROM alpine:3.11
RUN apk add --no-cache git git-crypt
RUN QBEC_VER=0.10.3
&& wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz
| tar -C /tmp -xzf -
&& mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/
RUN KUBECTL_VER=1.17.0
&& wget -O /usr/local/bin/kubectl
https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl
&& chmod +x /usr/local/bin/kubectl
RUN HELM_VER=3.0.2
&& wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz
| tar -C /tmp -zxf -
&& mv /tmp/linux-amd64/helm /usr/local/bin/helm
Ut vides, in hac imagine instituimus omnes utilitates quas ad nostram applicationem explicandam usi sumus. Non opus est hic nisi kubectlsed circum ludere cum eo in pipelineo phase videres.
Item, ut cum Kubernetes communicare possit et ad eam explicandam, opus est ut siliquas quae a gitlab cursore generatae sunt configurare.
Hoc ut facias, eamus in indicem cum cursore gitlab;
Puto nos hanc versionem tuto appellare v0.0.1 et tag adde:
git tag v0.0.1
Quotiens tags novam versionem dimittere necesse est. Tags in Docker imagines ligabuntur ad Git tags. Singulae ventilationes cum novo tag initialize imaginum fabricam cum hoc tag.
praestare git dis --tagset inspiciamus primum nostrum pipelinum;
Screenshot primi pipeline
Operae pretium est animum intendere ad quod conventus per tags aptus est ad imagines fabricandas, sed ad applicationem Kubernetes explicandas non convenit. Cum novae tags assignari possunt veteribus committis, hoc in casu, initialis fistulae earum ad veterem versionem instruere possunt.
Ad hanc solvendam quaestionem plerumque imagines schoenariorum fabricare ad tags ligatur et applicationem ad ramum instruere dominusin quibus versiones imaginum collectarum indurata sunt. Hoc est ubi reverti potes initialize cum simplici reverti dominus— sarmenta.
10. Automation de instruere
Ut ad Gitlab-cursorem ad decrypt secreta nostra, repositorium clavem exportare debebimus et eam nostris ci ambitus variabilibus addere;
--root quidam / app * - sino vos determinare indicem certae applicationis
--force:k8s-context __incluster__ - Haec variabilis magica est quae dicit instruere in eodem botro fieri in quo cursor gtilab currit. Hoc necessarium est, quia aliter qbec idoneum Kubernetes servo tuo in kubeconfig invenire conabitur
--manere — copiae qbec exspectandae sunt donec facultates quas creat in promtu eant statum et tunc demum cum felici exitu exeant.
-yes - simpliciter priuat interactive testa Es certus? cum perrexerunt.
Et post git dis videbimus quo modo explicandae sint applicationes nostrae;
Screenshot secundi pipeline
11. Artificia et conventus cum strenuo domino
Gradus supra descriptos typice sufficiunt ad aedificandum et tradendum quodlibet fere microservicium, sed nolumus addere quotienscumque opus est ad locum renovandum. Ergo dynamicam viam capiemus et digestum in ramo magistri constituemus.
Idea simplex est: imago nunc nostri website reaedificabitur omni tempore ventilabis in dominusac deinde ipso facto ad Kubernetes explicant.
Haec duo jobs in nostro update scriptor .gitlab-ci.yml:
Quaeso nota adiecimus filo dominus к Non enimf respicit pro jobs build_website et nunc utimur $CI_COMMIT_REF_NAME pro $CI_COMMIT_TAG, hoc est, a tags in Git solvimur et nunc imaginem trudemus cum nomine rami commissi qui pipeline initialem instruxit. Notatu dignum est hoc etiam cum tags operari, quod nos permittet ut cum specifica versione in actis subcriptio snapshots servare.
Cum nomen inceptorum pro nova versione situs immutatum esse potest, adhuc habemus mutationes Kubernetes describere, alioquin simpliciter applicationem ex nova imagine non reddet, cum nullas mutationes in notabit. instruere manifest.
optionem -vm: ext-str digestum "$ DIGEST" nam qbec - sino te transire externam variabilem ad jsonnet. Volumus eam in botro reddi cum applicationis nostrae solutione unaquaque. Nomine tag nomen iam uti non possumus, quod iam incommutabile esse potest, cum certae imaginis versioni ligari necesse est ac felis instruere cum mutat.
Hic adiuvabimus facultatem Kaniko servandi imaginem digestam in tabella (option --digest-file)
Tunc hunc fasciculum transferemus et in tempore instruemus.
Lets parametri renovatio nostro deploy/website/environments/base.libsonnet qute nunc vide sicut hoc;
Actum, nunc aliquo committo dominus initializes constructum de docker imago for websiteatque inde Kubernetes explicant.
Mutationes nostras committere noli oblivisci:
git add .
git commit -m "Configure dynamic build"
Nos reprehendo eam postea git dis videndum est aliquid simile hoc;
Screenshot de pipeline pro domino
In principio, cursorem gitlabrum cum singulis dis reddere non necesse est, nisi certe nihil mutatum est in eius configuratione, illud figamus in .gitlab-ci.yml:
Immittentur in dis ad quaslibet ramos praeter magistrum et explicant versionem praeviam loci.
Qbec pro nova optione videmus; --app-tag - permittit ut versiones applicationis et operae in hoc tag solo tantum explices, cum opes in Kubernetes creando et destruendo, qbec solum cum illis operabitur.
Hoc modo separatum ambitum singulis recensendis creare non possumus, sed simpliciter eandem reuse.
Hic etiam utimur qbec applicare recensionem, pro * qbec applicare default - Hoc prorsus momentum est, cum differentias ambituum nostrorum (recensio et defectu) describere conabimur;
Tunc declarabimus illud in deploy/website/params.libsonnet:
local env = std.extVar('qbec.io/env');
local paramsMap = {
_: import './environments/base.libsonnet',
default: import './environments/default.libsonnet',
review: import './environments/review.libsonnet',
};
if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile
Morem parametri scribe pro eo in deploy/website/environments/review.libsonnet:
// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');
base {
components+: {
website+: {
name: 'example-docs-' + slug,
domain: subdomain + '.docs.example.org',
},
},
}
Sit etiam inspiciat jobu stop_reviewurguetur, cum ramus deletus est et ut gitlabum checkout adhibitum esse non conetur GIT_STRATEGY: nemoPostea clone dominus-branch et recensionem delere per eam.
Paululum confusum est, sed adhuc viam pulchriorem non inveni.
Vel optio erit singulas recensiones explicandi ad spatium spatii deversorium, quod semper omnino divelli potest.
Mutationes nostras committere noli oblivisci:
git add .
git commit -m "Enable automatic review"
git dis, git Checkout b test, git dis originem test, reprehendo:
Screenshot in ambitibus creatum Gitlab
Omnia laborat? - Magnum, dele nostrum test ramum; Checkout git dominum, git dis originem: test, reprimimus jobs delendo ambitum sine erroribus laboravisse.
Hic statim declarare libet quod quaelibet elit in incepto potest ramos creare, potest etiam mutare .gitlab-ci.yml file and access secret variables.
Ideo enixe commendatur ut eorum usus tantum in ramis munitis permittat, v.gr dominusaut variabilium singularum rerum ambitum efficiant.
13. Review Apps
Review Apps Hoc pluma GitLab est quae tesseram cuiusque fasciculi in repositorio addere sinit ut cito illam in ambitu rerum inspicias.
Ut hae tesserae appareant, fasciculum creare debes .gitlab/route-map.yml et describe in ea omnem viam transformationum, in nobis valde simplex erit;