ProHoster > Blogs > AdministrÄcija > IzmÄÄ£inÄt jaunus rÄ«kus, lai izveidotu un automatizÄtu izvietoÅ”anu Kubernetes
IzmÄÄ£inÄt jaunus rÄ«kus, lai izveidotu un automatizÄtu izvietoÅ”anu Kubernetes
Sveiki! Nesen ir izlaisti daudzi lieliski automatizÄcijas rÄ«ki gan Docker attÄlu veidoÅ”anai, gan izvietoÅ”anai Kubernetes. Å ajÄ sakarÄ es nolÄmu paspÄlÄties ar GitLab, rÅ«pÄ«gi izpÄtÄ«t tÄ iespÄjas un, protams, izveidot cauruļvadu.
Å o darbu iedvesmoja vietne kubernetes.io, kas tiek Ä£enerÄts no pirmkodi automÄtiski, un katram nosÅ«tÄ«tajam pÅ«la pieprasÄ«jumam robots automÄtiski Ä£enerÄ vietnes priekÅ”skatÄ«juma versiju ar jÅ«su izmaiÅÄm un nodroÅ”ina saiti apskatei.
Es mÄÄ£inÄju izveidot lÄ«dzÄ«gu procesu no nulles, bet pilnÄ«bÄ balstÄ«ts uz Gitlab CI un bezmaksas rÄ«kiem, kurus esmu pieradis izmantot, lai izvietotu lietojumprogrammas Kubernetes. Å odien es beidzot pastÄstÄ«Å”u vairÄk par viÅiem.
RakstÄ tiks apspriesti tÄdi rÄ«ki kÄ: Hugo, qbec, kaniko, git-crypt Šø GitLab CI ar dinamiskas vides izveidi.
KÄ mÅ«su projekta piemÄru mÄs mÄÄ£inÄsim izveidot dokumentÄcijas publicÄÅ”anas vietni, kas veidota uz Hugo. Hugo ir statiska satura Ä£enerators.
Tiem, kas nav pazÄ«stami ar statiskajiem Ä£eneratoriem, es jums pastÄstÄ«Å”u nedaudz vairÄk par tiem. AtŔķirÄ«bÄ no parastajiem vietÅu dzinÄjiem ar datu bÄzi un dažiem PHP, kas pÄc lietotÄja pieprasÄ«juma Ä£enerÄ lapas lidojumÄ, statiskie Ä£eneratori ir veidoti nedaudz savÄdÄk. Tie ļauj iegÅ«t avotus, parasti failu kopu Markdown iezÄ«mÄÅ”anas un motÄ«vu veidnÄs, un pÄc tam apkopot tos pilnÄ«bÄ pabeigtÄ vietnÄ.
Tas ir, kÄ rezultÄtÄ jÅ«s saÅemsiet direktoriju struktÅ«ru un Ä£enerÄtu HTML failu kopu, ko varÄsit vienkÄrÅ”i augÅ”upielÄdÄt jebkurÄ lÄtajÄ mitinÄÅ”anÄ un iegÅ«t funkcionÄjoÅ”u vietni.
Varat instalÄt Hugo lokÄli un izmÄÄ£inÄt:
Jaunas vietnes inicializÄcija:
hugo new site docs.example.org
Un tajÄ paÅ”Ä laikÄ git repozitorijs:
cd docs.example.org
git init
LÄ«dz Å”im mÅ«su vietne ir senatnÄ«ga, un, lai tajÄ kaut kas parÄdÄ«tos, mums vispirms ir jÄsavieno motÄ«vs; motÄ«vs ir tikai veidÅu un noteiktu noteikumu kopums, pÄc kuriem tiek Ä£enerÄta mÅ«su vietne.
TÄmai mÄs izmantosim MÄcÄ«ties, kas, manuprÄt, ir lieliski piemÄrots dokumentÄcijas vietnei.
Es vÄlos pievÄrst Ä«paÅ”u uzmanÄ«bu tam, ka mums nav jÄsaglabÄ motÄ«vu faili mÅ«su projektu repozitorijÄ; tÄ vietÄ mÄs varam to vienkÄrÅ”i savienot, izmantojot git apakÅ”modulis:
TÄdÄjÄdi mÅ«su repozitorijÄ bÅ«s tikai faili, kas ir tieÅ”i saistÄ«ti ar mÅ«su projektu, un pievienotÄ tÄma paliks kÄ saite uz konkrÄtu repozitoriju un commit tajÄ, tas ir, to vienmÄr var izvilkt no sÄkotnÄjÄ avota un nebaidÄ«ties no tÄ. nesavienojamas izmaiÅas.
Izlabosim konfigurÄciju config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
Jau Å”ajÄ posmÄ jÅ«s varat skriet:
hugo server
Un adresÄ http://localhost:1313/ pÄrbaudiet mÅ«su jaunizveidoto vietni, visas direktorijÄ veiktÄs izmaiÅas automÄtiski atjaunina atvÄrto lapu pÄrlÅ«kprogrammÄ, ļoti Ärti!
MÄÄ£inÄsim izveidot titullapu content/_index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
JaunizveidotÄs lapas ekrÄnuzÅÄmums
Lai izveidotu vietni, vienkÄrÅ”i palaidiet:
hugo
Direktorija saturs publisks/ un tÄ bÅ«s jÅ«su vietne.
JÄ, starp citu, tÅ«lÄ«t pievienosim to .gitignore:
echo /public > .gitignore
Neaizmirstiet veikt mÅ«su izmaiÅas:
git add .
git commit -m "New site created"
2. Docker faila sagatavoŔana
Ir pienÄcis laiks definÄt mÅ«su repozitorija struktÅ«ru. Es parasti izmantoju kaut ko lÄ«dzÄ«gu:
dockerfiles/ ā satur direktorijus ar Dockerfiles un visu nepiecieÅ”amo, lai izveidotu mÅ«su Docker attÄlus.
izvietot/ ā satur direktorijus mÅ«su lietojumprogrammu izvietoÅ”anai Kubernetes
TÄdÄjÄdi mÄs izveidosim savu pirmo Dockerfile Å”ajÄ ceÄ¼Ä 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" ]
KÄ redzat, Dockerfile satur divus NO, Å”o funkciju sauc daudzpakÄpju uzbÅ«ve un ļauj no galÄ«gÄ Docker attÄla izslÄgt visu nevajadzÄ«go.
TÄdÄjÄdi galÄ«gajÄ attÄlÄ bÅ«s tikai tumÅ”shttpd (viegls HTTP serveris) un publisks/ ā mÅ«su statiski Ä£enerÄtÄs vietnes saturs.
Neaizmirstiet veikt mÅ«su izmaiÅas:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. Kaniko iepazīŔana
KÄ doka attÄlu veidotÄjs es nolÄmu izmantot kaniko, jo tÄ darbÄ«bai nav nepiecieÅ”ams docker dÄmons, un paÅ”u veidoÅ”anu var veikt jebkurÄ datorÄ, un keÅ”atmiÅu var glabÄt tieÅ”i reÄ£istrÄ, tÄdÄjÄdi novÄrÅ”ot nepiecieÅ”amÄ«bu pÄc pilnvÄrtÄ«gas pastÄvÄ«gas krÄtuves.
Lai izveidotu attÄlu, vienkÄrÅ”i palaidiet konteineru ar kaniko izpildÄ«tÄjs un nododiet tam paÅ”reizÄjo bÅ«vÄÅ”anas kontekstu; to var izdarÄ«t arÄ« lokÄli, izmantojot docker:
Kur registry.gitlab.com/kvaps/docs.example.org/website ā jÅ«su doka attÄla nosaukums; pÄc izveides tas tiks automÄtiski palaists dokstacijas reÄ£istrÄ.
Parametrs -- keÅ”atmiÅa ļauj keÅ”atmiÅÄ saglabÄt slÄÅus docker reÄ£istrÄ; dotajÄ piemÄrÄ tie tiks saglabÄti registry.gitlab.com/kvaps/docs.example.org/website/cache, bet varat norÄdÄ«t citu ceļu, izmantojot parametru --keÅ”atmiÅas repo.
Docker-reÄ£istra ekrÄnuzÅÄmums
4. IepazÄ«Å”anÄs ar qbec
Qbec ir izvietoÅ”anas rÄ«ks, kas ļauj deklaratÄ«vi aprakstÄ«t lietojumprogrammas manifestus un izvietot tos Kubernetes. Jsonnet kÄ galvenÄs sintakses izmantoÅ”ana ļauj ievÄrojami vienkÄrÅ”ot atŔķirÄ«bu aprakstu dažÄdÄs vidÄs, kÄ arÄ« gandrÄ«z pilnÄ«bÄ novÄrÅ” koda atkÄrtoÅ”anos.
ÄŖpaÅ”i tas var attiekties uz gadÄ«jumiem, kad lietojumprogramma ir jÄizvieto vairÄkos klasteros ar dažÄdiem parametriem un vÄlaties tos deklaratÄ«vi aprakstÄ«t Git.
Qbec ļauj arÄ« renderÄt Helm diagrammas, nododot tÄm nepiecieÅ”amos parametrus un pÄc tam darbinÄt tÄs tÄpat kÄ parastos manifestus, tostarp var tÄm pielietot dažÄdas mutÄcijas, un tas savukÄrt ļauj atbrÄ«voties no nepiecieÅ”amÄ«bas izmantojiet ChartMuseum. Tas ir, jÅ«s varat saglabÄt un renderÄt diagrammas tieÅ”i no git, kur tÄs pieder.
KÄ jau teicu iepriekÅ”, mÄs saglabÄsim visas izvietoÅ”anas direktorijÄ izvietot/:
mkdir deploy
cd deploy
InicializÄsim savu pirmo lietojumprogrammu:
qbec init website
cd website
Tagad mÅ«su lietojumprogrammas struktÅ«ra izskatÄs Å”Ädi:
Å eit mÅ«s galvenokÄrt interesÄ spec.vide, qbec mums jau ir izveidojis noklusÄjuma vidi un paÅÄmis servera adresi, kÄ arÄ« nosaukumvietu no mÅ«su paÅ”reizÄjÄs kubeconfig.
Tagad, izvietojot uz noklusÄjuma vidÄ, qbec vienmÄr izvietos tikai norÄdÄ«tajÄ Kubernetes klasterÄ« un norÄdÄ«tajÄ nosaukumvietÄ, tas ir, jums vairs nav jÄpÄrslÄdzas starp kontekstiem un nosaukumvietÄm, lai veiktu izvietoÅ”anu.
Ja nepiecieÅ”ams, jÅ«s vienmÄr varat atjauninÄt iestatÄ«jumus Å”ajÄ failÄ.
Visas jÅ«su vides ir aprakstÄ«tas qbec.yaml, un failÄ params.libsonnet, kur ir rakstÄ«ts, kur tiem iegÅ«t parametrus.
TÄlÄk mÄs redzam divus direktorijus:
sastÄvdaļas/ ā Å”eit tiks saglabÄti visi mÅ«su lietojumprogrammas manifesti; tos var aprakstÄ«t gan jsonnet, gan parastajos yaml failos
vide/ ā Å”eit mÄs aprakstÄ«sim visus mÅ«su vides mainÄ«gos (parametrus).
Å ajÄ failÄ mÄs aprakstÄ«jÄm trÄ«s Kubernetes entÄ«tijas vienlaikus, tÄs ir: IzvietoÅ”anas, Serviss Šø IekļūŔana. Ja mÄs vÄlÄtos, mÄs tos varÄtu salikt dažÄdos komponentos, bet Å”ajÄ posmÄ mums pietiks ar vienu.
sintakse jsonnet ir ļoti lÄ«dzÄ«gs parastajam json, principÄ parastais json jau ir derÄ«gs jsonnet, tÄpÄc sÄkumÄ jums var bÅ«t vieglÄk izmantot tieÅ”saistes pakalpojumus, piemÄram, yaml2json lai pÄrvÄrstu savu parasto yaml par json, vai, ja jÅ«su komponenti nesatur nevienu mainÄ«go, tad tos var aprakstÄ«t parastÄ yaml formÄtÄ.
StrÄdÄjot ar jsonnet Es ļoti iesaku instalÄt spraudni jÅ«su redaktoram
PiemÄram, vim ir spraudnis vim-jsonnet, kas ieslÄdz sintakses izcelÅ”anu un tiek automÄtiski izpildÄ«ts jsonnet fmt katru reizi, kad saglabÄjat (nepiecieÅ”ams instalÄt jsonnet).
Viss ir gatavs, tagad mÄs varam sÄkt izvietot:
Lai redzÄtu, ko esam ieguvuÅ”i, izpildÄ«sim:
qbec show default
IzvadÄ jÅ«s redzÄsit renderÄtus yaml manifestus, kas tiks lietoti noklusÄjuma klasterim.
Lieliski, tagad piesakieties:
qbec apply default
IzvadÄ jÅ«s vienmÄr redzÄsit, kas tiks darÄ«ts jÅ«su klasterÄ«, qbec lÅ«gs jums piekrist izmaiÅÄm, ierakstot y varÄsi apstiprinÄt savus nodomus.
MÅ«su lietojumprogramma ir gatava un izvietota!
Ja veicat izmaiÅas, vienmÄr varat rÄ«koties Å”Ädi:
qbec diff default
lai redzÄtu, kÄ Å”Ä«s izmaiÅas ietekmÄs paÅ”reizÄjo izvietoÅ”anu
Neaizmirstiet veikt mÅ«su izmaiÅas:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. IzmÄÄ£inot Gitlab-runner ar Kubernetes-izpildÄ«tÄju
VÄl nesen izmantoju tikai parasto gitlab-runner uz iepriekÅ” sagatavotas iekÄrtas (LXC konteiners) ar Äaulu vai dokeru-izpildÄ«tÄju. SÄkotnÄji mÅ«su Gitlab laboratorijÄ bija vairÄki Å”Ädi skrÄjÄji visÄ pasaulÄ. ViÅi savÄca docker attÄlus visiem projektiem.
Bet, kÄ liecina prakse, Ŕī iespÄja nav pati ideÄlÄkÄ gan praktiskuma, gan droŔības ziÅÄ. Daudz labÄk un ideoloÄ£iski pareizÄk ir katram projektam vai pat katrai videi izvietot atseviŔķus skrÄjÄjus.
Par laimi, tÄ nemaz nav problÄma, jo tagad mÄs izvietosim gitlab-runner tieÅ”i kÄ daļa no mÅ«su projekta tieÅ”i Kubernetes.
Gitlab nodroÅ”ina gatavu stÅ«res diagrammu Gitlab-runner izvietoÅ”anai Kubernetes. TÄpÄc viss, kas jums jÄdara, ir noskaidrot reÄ£istrÄcijas marÄ·ieris mÅ«su projektam IestatÄ«jumi -> CI / CD -> SkrÄjÄji un nodod to stÅ«rei:
rbac.create=true ā nodroÅ”ina skrÄjÄjam nepiecieÅ”amo privilÄÄ£iju daudzumu, lai, izmantojot kubernetes-executor, varÄtu izveidot podi mÅ«su uzdevumu veikÅ”anai.
Ja viss ir izdarÄ«ts pareizi, sadaÄ¼Ä vajadzÄtu redzÄt reÄ£istrÄtu skrÄjÄju Runners, jÅ«su projekta iestatÄ«jumos.
PievienotÄ skrÄjÄja ekrÄnuzÅÄmums
Vai tas ir tik vienkÄrÅ”i? - JÄ, tas ir tik vienkÄrÅ”i! Vairs nav jÄrÄÄ·inÄs ar skrÄjÄju manuÄlu reÄ£istrÄciju, turpmÄk skrÄjÄji tiks izveidoti un iznÄ«cinÄti automÄtiski.
6. Izvietojiet Helm diagrammas ar QBEC
TÄ kÄ mÄs nolÄmÄm apsvÄrt gitlab-runner daļa no mÅ«su projekta, ir pienÄcis laiks to aprakstÄ«t mÅ«su Git repozitorijÄ.
MÄs to varÄtu raksturot kÄ atseviŔķu sastÄvdaļu mÄjas lapa, bet nÄkotnÄ plÄnojam izvietot dažÄdas kopijas mÄjas lapa ļoti bieži, atŔķirÄ«bÄ no gitlab-runner, kas tiks izvietots tikai vienu reizi vienÄ Kubernetes klasterÄ«. TÄtad inicializÄsim atseviŔķu lietojumprogrammu:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
Å oreiz mÄs neaprakstÄ«sim Kubernetes entÄ«tijas manuÄli, bet Åemsim gatavu Helm diagrammu. Viena no qbec priekÅ”rocÄ«bÄm ir iespÄja renderÄt Helm diagrammas tieÅ”i no Git repozitorija.
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;
std.native('expandHelmTemplate')(
'../vendor/gitlab-runner',
params.values,
{
nameTemplate: params.name,
namespace: env.namespace,
thisFile: std.thisFile,
verbose: true,
}
)
Pirmais arguments, lai expandHelmTemplate mÄs izejam ceļu uz diagrammu, tad parametri.vÄrtÄ«bas, ko Åemam no vides parametriem, tad nÄk objekts ar
nosaukums Veidne ā laidiena nosaukums
namespace ā nosaukumu telpa pÄrcelta uz stÅ«ri
Å”o failu ā obligÄtais parametrs, kas nodod ceļu uz paÅ”reizÄjo failu
runÄ«gs - parÄda komandu stÅ«res veidne ar visiem argumentiem diagrammas renderÄÅ”anas laikÄ
Tagad aprakstīsim mūsu komponenta parametrus Environments/base.libsonnet:
Bet noslÄpumu glabÄÅ”ana pakalpojumÄ Git nav droÅ”a, vai ne? TÄpÄc mums tie ir pareizi jÄÅ”ifrÄ.
Parasti viena mainÄ«gÄ lieluma dÄļ tam ne vienmÄr ir jÄga. JÅ«s varat pÄrsÅ«tÄ«t noslÄpumus uz qbec un izmantojot jÅ«su CI sistÄmas vides mainÄ«gos.
Bet ir vÄrts atzÄ«mÄt, ka ir arÄ« sarežģītÄki projekti, kuros var bÅ«t daudz vairÄk noslÄpumu; to visu pÄrsÅ«tÄ«Å”ana, izmantojot vides mainÄ«gos, bÅ«s ÄrkÄrtÄ«gi sarežģīta.
TurklÄt Å”ajÄ gadÄ«jumÄ es nevarÄtu jums pastÄstÄ«t par tik brÄ«niŔķīgu rÄ«ku kÄ git-crypt.
git-crypt Tas ir Ärts arÄ« ar to, ka ļauj saglabÄt visu noslÄpumu vÄsturi, kÄ arÄ« salÄ«dzinÄt, apvienot un atrisinÄt konfliktus tÄdÄ paÅ”Ä veidÄ, kÄ mÄs esam pieraduÅ”i darÄ«t Git gadÄ«jumÄ.
PirmÄ lieta pÄc uzstÄdÄ«Å”anas git-crypt mums ir jÄÄ£enerÄ mÅ«su repozitorija atslÄgas:
git crypt init
Ja jums ir PGP atslÄga, varat nekavÄjoties pievienot sevi kÄ lÄ«dzstrÄdnieku Å”im projektam:
TÄdÄ veidÄ jÅ«s vienmÄr varat atÅ”ifrÄt Å”o repozitoriju, izmantojot savu privÄto atslÄgu.
Ja jums nav PGP atslÄgas un jÅ«s to negaidÄt, varat doties citÄ veidÄ un eksportÄt projekta atslÄgu:
git crypt export-key /path/to/keyfile
TÄdÄjÄdi ikviens, kam ir eksportÄts atslÄgas fails varÄs atÅ”ifrÄt jÅ«su repozitoriju.
Ir pienÄcis laiks izveidot mÅ«su pirmo noslÄpumu.
AtgÄdinÄÅ”u, ka mÄs joprojÄm atrodamies direktorijÄ deploy/gitlab-runner/, kur mums ir direktorijs noslÄpumi/, Å”ifrÄsim visus tajÄ esoÅ”os failus, Å”im nolÅ«kam izveidosim failu noslÄpumi/.gitattributes ar Å”Ädu saturu:
KÄ redzams no satura, visi faili ir maskÄti * tiks braukts cauri git-crypt, izÅemot lielÄko daļu .gitattributes
MÄs to varam pÄrbaudÄ«t, izpildot:
git crypt status -e
Izvade bÅ«s visu repozitorijÄ esoÅ”o failu saraksts, kuriem ir iespÄjota Å”ifrÄÅ”ana
Tas arÄ« viss. Tagad mÄs varam droÅ”i veikt izmaiÅas:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
Lai bloÄ·Ätu repozitoriju, vienkÄrÅ”i palaidiet:
git crypt lock
un uzreiz visi Å”ifrÄtie faili pÄrvÄrtÄ«sies par kaut ko binÄru, tos izlasÄ«t nebÅ«s iespÄjams.
Lai atÅ”ifrÄtu repozitoriju, palaidiet:
git crypt unlock
8. Izveidojiet rÄ«ku kastes attÄlu
RÄ«kkopas attÄls ir attÄls ar visiem rÄ«kiem, ko izmantosim sava projekta izvietoÅ”anai. Gitlab skrÄjÄjs to izmantos, lai veiktu tipiskus izvietoÅ”anas uzdevumus.
Å eit viss ir vienkÄrÅ”i, izveidosim jaunu Dockerfiles/Toolbox/Dockerfile ar Å”Ädu saturu:
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
KÄ redzat, Å”ajÄ attÄlÄ mÄs instalÄjam visas utilÄ«tas, kuras izmantojÄm savas lietojumprogrammas izvietoÅ”anai. Mums tas Å”eit nav vajadzÄ«gs, ja vien kubectl, taÄu, iespÄjams, vÄlÄsities ar to paspÄlÄties cauruļvada iestatÄ«Å”anas posmÄ.
TurklÄt, lai varÄtu sazinÄties ar Kubernetes un tajÄ izvietot, mums ir jÄkonfigurÄ loma gitlab-runner Ä£enerÄtajiem podiem.
Lai to izdarītu, dodieties uz direktoriju ar gitlab-runner:
cd deploy/gitlab-runner
un pievienojiet jaunu komponentu komponenti/rbac.jsonnet:
LÅ«dzu, Åemiet vÄrÄ, ka mÄs izmantojam GIT_SUBMODULE_STRATEGY: normÄli tiem darbiem, kuros pirms izpildes ir skaidri jÄinicializÄ apakÅ”moduļi.
Es domÄju, ka mÄs to varam droÅ”i saukt par versiju v0.0.1 un pievienojiet tagu:
git tag v0.0.1
MÄs pievienosim atzÄ«mes ikreiz, kad bÅ«s jÄizlaiž jauna versija. AtzÄ«mes Docker attÄlos tiks saistÄ«tas ar Git tagiem. Katrs nospiedums ar jaunu tagu inicializÄs attÄlu veidoÅ”anu ar Å”o tagu.
Darīsim to git push --tags, un apskatīsim mūsu pirmo konveijeru:
PirmÄ cauruļvada ekrÄnuzÅÄmums
Ir vÄrts pievÄrst uzmanÄ«bu faktam, ka montÄža ar tagiem ir piemÄrota docker attÄlu veidoÅ”anai, bet nav piemÄrota lietojumprogrammas izvietoÅ”anai Kubernetes. TÄ kÄ vecajÄm saistÄ«bÄm var pieŔķirt jaunus tagus, Å”ajÄ gadÄ«jumÄ to konveijera inicializÄÅ”ana novedÄ«s pie vecÄs versijas izvietoÅ”anas.
Lai atrisinÄtu Å”o problÄmu, docker attÄlu bÅ«vÄÅ”ana parasti ir saistÄ«ta ar tagiem un lietojumprogrammas izvietoÅ”ana filiÄlÄ. meistars, kurÄ apkopoto attÄlu versijas ir kodÄtas. Å eit varat inicializÄt atcelÅ”anu ar vienkÄrÅ”u atgrieÅ”anu meistars- filiÄles.
10. IzvÄrÅ”anas automatizÄcija
Lai Gitlab-runner atÅ”ifrÄtu mÅ«su noslÄpumus, mums bÅ«s jÄeksportÄ repozitorija atslÄga un jÄpievieno tÄ mÅ«su CI vides mainÄ«gajiem:
Å eit mÄs esam iespÄjojuÅ”i vairÄkas jaunas qbec opcijas:
--root some/app ā ļauj noteikt konkrÄtas lietojumprogrammas direktoriju
--force:k8s-context __incluster__ - tas ir maÄ£isks mainÄ«gais, kas saka, ka izvietoÅ”ana notiks tajÄ paÅ”Ä klasterÄ«, kurÄ darbojas gtilab-runner. Tas ir nepiecieÅ”ams, jo pretÄjÄ gadÄ«jumÄ qbec mÄÄ£inÄs atrast piemÄrotu Kubernetes serveri jÅ«su kubeconfig
--pagaidi ā liek qbec gaidÄ«t, lÄ«dz tÄ izveidotie resursi nonÄk gatavÄ«bas stÄvoklÄ« un tikai tad iziet ar veiksmÄ«gu izejas kodu.
-JÄ - vienkÄrÅ”i atspÄjo interaktÄ«vo apvalku Vai esat pÄrliecinÄts? kad tas ir izvietots.
Un pÄc git push mÄs redzÄsim, kÄ mÅ«su lietojumprogrammas ir izvietotas:
OtrÄ cauruļvada ekrÄnuzÅÄmums
11. Artefakti un montÄža, spiežot uz meistaru
Parasti ar iepriekÅ” aprakstÄ«tajÄm darbÄ«bÄm pietiek, lai izveidotu un nodroÅ”inÄtu gandrÄ«z jebkuru mikropakalpojumu, taÄu mÄs nevÄlamies pievienot tagu katru reizi, kad mums ir jÄatjaunina vietne. TÄpÄc mÄs izvÄlÄsimies dinamiskÄku marÅ”rutu un iestatÄ«sim Ä«ssavilkuma izvietoÅ”anu galvenajÄ filiÄlÄ.
Ideja ir vienkÄrÅ”a: tagad mÅ«su tÄls mÄjas lapa tiks pÄrbÅ«vÄta katru reizi, kad iespiedÄ«sities meistarsun pÄc tam automÄtiski izvietot Kubernetes.
AtjauninÄsim Ŕīs divas darba vietas mÅ«su .gitlab-ci.yml:
LÅ«dzu, Åemiet vÄrÄ, ka esam pievienojuÅ”i pavedienu meistars Šŗ refs darba vietÄm build_website un tagad lietojam $CI_COMMIT_REF_NAME nevis $CI_COMMIT_TAG, tas ir, mÄs esam atsaistÄ«ti no tagiem pakalpojumÄ Git, un tagad mÄs nosÅ«tÄ«sim attÄlu ar tÄs izpildes filiÄles nosaukumu, kas inicializÄja konveijeru. Ir vÄrts atzÄ«mÄt, ka tas darbosies arÄ« ar tagiem, kas ļaus mums saglabÄt vietnes momentuzÅÄmumus ar noteiktu versiju docker-reÄ£istrÄ.
Ja jaunÄs vietnes versijas docker taga nosaukums var bÅ«t nemainÄ«gs, mums joprojÄm ir jÄapraksta Kubernetes izmaiÅas, pretÄjÄ gadÄ«jumÄ tÄ vienkÄrÅ”i nepÄrvietos lietojumprogrammu no jaunÄ attÄla, jo tÄ nepamanÄ«s nekÄdas izmaiÅas izvietoÅ”anas manifests.
Opcija āvm:ext-str digest=ā$DIGESTā qbec ā ļauj nosÅ«tÄ«t ÄrÄju mainÄ«go jsonnet. MÄs vÄlamies, lai ar katru mÅ«su lietojumprogrammas laidienu tÄ tiktu atkÄrtoti izvietota klasterÄ«. MÄs vairs nevaram izmantot taga nosaukumu, kas tagad var bÅ«t nemainÄms, jo mums ir jÄbÅ«t piesaistÄ«tam konkrÄtai attÄla versijai un jÄaktivizÄ izvietoÅ”ana, kad tÄ mainÄs.
Å eit mums palÄ«dzÄs Kaniko spÄja saglabÄt Ä«ssavilkuma attÄlu failÄ (opcija -- Digest-fails)
PÄc tam mÄs pÄrsÅ«tÄ«sim Å”o failu un lasÄ«sim to izvietoÅ”anas laikÄ.
AtjauninÄsim parametrus mÅ«su deploy/website/environments/base.libsonnet kas tagad izskatÄ«sies Å”Ädi:
Gatavs, tagad iesaistieties meistars inicializÄ docker attÄla bÅ«vniecÄ«bu mÄjas lapa, un pÄc tam izvietojiet to Kubernetes.
Neaizmirstiet veikt mÅ«su izmaiÅas:
git add .
git commit -m "Configure dynamic build"
MÄs pÄrbaudÄ«sim vÄlÄk git push mums vajadzÄtu redzÄt kaut ko lÄ«dzÄ«gu:
VadÄ«tÄja konveijera ekrÄnuzÅÄmums
PrincipÄ mums nav jÄpÄrizvieto gitlab-runner ar katru nospieÅ”anu, ja vien, protams, nekas nav mainÄ«jies tÄ konfigurÄcijÄ, izlabosim to .gitlab-ci.yml:
Ir pienÄcis laiks dažÄdot mÅ«su cauruļvadu ar dinamisku vidi.
Vispirms atjauninÄsim darbu build_website mÅ«su .gitlab-ci.yml, noÅemot bloku no tÄ tikai, kas piespiedÄ«s Gitlab to aktivizÄt jebkurÄ saistÄ«bÄ ar jebkuru filiÄli:
Tie tiks palaisti pÄc nosÅ«tÄ«Å”anas uz jebkuru filiÄli, izÅemot galveno, un izvietos vietnes priekÅ”skatÄ«juma versiju.
MÄs redzam jaunu qbec opciju: --app-tag ā tas ļauj atzÄ«mÄt izvietotÄs lietojumprogrammas versijas un strÄdÄt tikai Å”ajÄ tagÄ; veidojot un iznÄ«cinot resursus Kubernetes, qbec darbosies tikai ar tiem.
TÄdÄ veidÄ mÄs nevaram izveidot atseviŔķu vidi katrai apskatei, bet vienkÄrÅ”i izmantot to paÅ”u.
Å eit mÄs arÄ« izmantojam qbec piemÄrot pÄrskatÄ«Å”anu, tÄ vietÄ qbec lietot noklusÄjumu - tieÅ”i Å”ajÄ brÄ«dÄ« mÄs mÄÄ£inÄsim aprakstÄ«t mÅ«su vides atŔķirÄ«bas (pÄrskatÄ«Å”ana un noklusÄjuma):
Pievienot pÄrskata vide iekÅ”Ä deploy/website/qbec.yaml
Tad mÄs to paziÅosim 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
Un pierakstiet tam pielÄgotos parametrus 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',
},
},
}
ApskatÄ«sim arÄ« jobu tuvÄk stop_review, tas tiks aktivizÄts, kad filiÄle tiks dzÄsta un lai gitlab nemÄÄ£inÄtu izrakstÄ«ties, tas tiek izmantots GIT_STRATEGY: nav, vÄlÄk mÄs klonÄjam meistars- atzarot un dzÄst atsauksmi, izmantojot to.
Tas ir nedaudz mulsinoÅ”i, bet es vÄl neesmu atradis skaistÄku veidu.
AlternatÄ«va iespÄja bÅ«tu izvietot katru atsauksmi viesnÄ«cas nosaukumvietÄ, kuru vienmÄr var pilnÄ«bÄ nojaukt.
Viss darbojas? - lieliski, izdzÄsiet mÅ«su testa zaru: git izrakstÄ«Å”anÄs meistars, git push izcelsme: tests, mÄs pÄrbaudÄm, vai vides dzÄÅ”anas darbi darbojÄs bez kļūdÄm.
Å eit es gribÄtu uzreiz precizÄt, ka jebkurÅ” izstrÄdÄtÄjs projektÄ var izveidot filiÄles, viÅÅ” var arÄ« mainÄ«ties .gitlab-ci.yml failu un piekļūt slepenajiem mainÄ«gajiem.
TÄpÄc ir stingri ieteicams atļaut tos izmantot tikai aizsargÄtÄm zarÄm, piemÄram, in meistarsvai izveidojiet atseviŔķu mainÄ«go kopu katrai videi.
13. PÄrskatiet lietotnes
PÄrskatiet lietotnes Å Ä« ir GitLab funkcija, kas ļauj katram repozitorijÄ esoÅ”ajam failam pievienot pogu, lai to Ätri skatÄ«tu izvietotajÄ vidÄ.
Lai Ŕīs pogas tiktu parÄdÄ«tas, jums ir jÄizveido fails .gitlab/route-map.yml un aprakstiet tajÄ visas ceļa pÄrvÄrtÄ«bas; mÅ«su gadÄ«jumÄ tas bÅ«s ļoti vienkÄrÅ”i: