ProHoster > Блог > Kev tswj hwm > Sim cov cuab yeej tshiab rau kev tsim thiab ua kom muaj kev xa mus rau hauv Kubernetes
Sim cov cuab yeej tshiab rau kev tsim thiab ua kom muaj kev xa mus rau hauv Kubernetes
Nyob zoo! Tsis ntev los no, ntau cov cuab yeej automation txias tau raug tso tawm ob qho tib si rau tsim Docker dluab thiab xa mus rau Kubernetes. Hauv qhov no, kuv txiav txim siab ua si nrog GitLab, ua tib zoo kawm nws lub peev xwm thiab, tau kawg, teeb tsa lub raj xa dej.
Txoj haujlwm no tau tshwm sim los ntawm lub vev xaib kubernetes.io, uas yog generated los ntawm cov cai tau, thiab rau txhua qhov kev thov pas dej ua ke, tus neeg hlau cia li tsim ib qho kev saib ua ntej ntawm lub xaib nrog koj cov kev hloov pauv thiab muab qhov txuas rau saib.
Kuv sim tsim cov txheej txheem zoo sib xws los ntawm kos, tab sis tag nrho ua rau Gitlab CI thiab cov cuab yeej pub dawb uas kuv tau siv los siv los xa cov ntawv thov rau Kubernetes. Hnub no thaum kawg kuv yuav qhia koj ntxiv txog lawv.
Kab lus yuav tham txog cov cuab yeej xws li: Hugo, qbec ib, kaniko ua, git-crypt и GitLab CI nrog rau cov creation ntawm dynamic ib puag ncig.
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" ]
Raws li koj tuaj yeem pom, Dockerfile muaj ob LOS NTAWM, lub sijhawm no hu ua ntau theem tsim thiab tso cai rau koj tshem tawm txhua yam tsis tsim nyog los ntawm daim duab docker zaum kawg.
Yog li, daim duab kawg yuav tsuas muaj tsaus httpd (lub teeb yuag HTTP server) thiab pej xeem/ - cov ntsiab lus ntawm peb lub vev xaib tsim tawm statically.
Tsis txhob hnov qab ua raws li peb cov kev hloov pauv:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. Tau paub kaniko
Raws li tus tsim duab docker, kuv txiav txim siab siv kaniko ua, txij li nws txoj haujlwm tsis tas yuav tsum muaj lub docker daemon, thiab kev tsim nws tus kheej tuaj yeem nqa tawm ntawm txhua lub tshuab thiab cache tuaj yeem khaws cia ncaj qha rau hauv daim ntawv teev npe, yog li tshem tawm qhov xav tau kom muaj kev cia siab tas li.
Txhawm rau tsim cov duab, tsuas yog khiav lub thawv nrog kev executor thiab dhau nws cov ntsiab lus tsim tam sim no; qhov no tuaj yeem ua tiav hauv zos, ntawm docker:
Qhov twg registry.gitlab.com/kvaps/docs.example.org/website - lub npe ntawm koj daim duab docker; tom qab lub tsev, nws yuav cia li tso rau hauv docker npe.
saib seb cov kev hloov pauv no yuav cuam tshuam li cas rau kev xa tawm tam sim no
Tsis txhob hnov qab ua raws li peb cov kev hloov pauv:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. Sim Gitlab-khiav nrog Kubernetes-executor
Txog rau tam sim no kuv tsuas yog siv tsis tu ncua gitlab-khiav ntawm lub tshuab ua ntej npaj (LXC ntim) nrog lub plhaub lossis docker-executor. Thaum pib, peb muaj ob peb tus neeg khiav dej num thoob ntiaj teb tau teev tseg hauv peb gitlab. Lawv sau cov duab docker rau txhua qhov haujlwm.
Tab sis raws li kev xyaum tau pom, qhov kev xaiv no tsis yog qhov zoo tshaj plaws, ob qho tib si ntawm kev ua tau zoo thiab kev nyab xeeb. Nws yog qhov zoo dua thiab muaj tswv yim zoo dua kom muaj cov neeg khiav dej num sib cais rau txhua qhov haujlwm, lossis txawm rau txhua qhov chaw.
Hmoov zoo, qhov no tsis yog teeb meem txhua, txij li tam sim no peb yuav xa mus gitlab-khiav ncaj qha raws li ib feem ntawm peb txoj haujlwm txoj cai hauv Kubernetes.
Gitlab muab ib daim ntawv npaj npaj ua rau kev siv gitlab-khiav mus rau Kubernetes. Yog li txhua yam koj yuav tsum ua yog nrhiav kom paub sau npe token rau peb qhov project hauv Chaw -> CI / CD -> Runners thiab hla nws mus rau tus thawj tswj hwm:
yga8y-jdCusVDn_t4Wxc - sau npe token rau koj qhov project.
rbac.create= yog - muab cov neeg khiav nrog qhov tsim nyog ntawm cov cai kom muaj peev xwm tsim cov pods los ua peb cov dej num siv kubernetes-executor.
Yog tias txhua yam ua tiav yog lawm, koj yuav tsum pom tus neeg khiav dej num hauv ntu Runners, hauv koj qhov project nqis.
Screenshot ntawm tus ntxiv khiav
Puas yog nws yooj yim? - Yog, nws yog qhov yooj yim! Tsis muaj teeb meem ntxiv nrog rau kev sau npe cov neeg khiav dej num manually, txij li tam sim no rau cov neeg khiav dej num yuav raug tsim thiab rhuav tshem tau.
6. Siv cov kab kos Helm nrog QBEC
Txij li thaum peb txiav txim siab los xav txog gitlab-khiav ib feem ntawm peb qhov project, nws yog lub sijhawm los piav qhia nws hauv peb qhov chaw khaws cia Git.
Peb tuaj yeem piav qhia nws ua ib qho kev sib cais website, tab sis yav tom ntej peb npaj yuav xa cov ntawv luam sib txawv website feem ntau, tsis zoo li gitlab-khiav, uas yuav raug xa tawm ib zaug rau Kubernetes pawg. Yog li cia peb pib ib daim ntawv thov cais rau nws:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
Lub sijhawm no peb yuav tsis piav txog Kubernetes cov chaw ua haujlwm ntawm tes, tab sis yuav siv daim ntawv npaj ua Helm. Ib qho zoo ntawm qbec yog lub peev xwm los ua Helm kab kos ncaj qha los ntawm Git repository.
Raws li tuaj yeem pom los ntawm cov ntsiab lus, tag nrho cov ntaub ntawv tau npog * yuav tau tsav los ntawm git-crypt, tsuas yog rau feem ntau .gitattributes
Peb tuaj yeem tshawb xyuas qhov no los ntawm kev khiav:
git crypt status -e
Cov zis yuav yog ib daim ntawv teev tag nrho cov ntaub ntawv nyob rau hauv lub repository uas encryption enabled
Ntawd yog tag nrho, tam sim no peb tuaj yeem ua raws li peb cov kev hloov pauv yam nyab xeeb:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
Txhawm rau thaiv qhov chaw cia khoom, tsuas yog khiav:
git crypt lock
thiab tam sim ntawd tag nrho cov ntaub ntawv encrypted yuav tig mus rau hauv binary ib yam dab tsi, nws yuav tsis yooj yim sua kom nyeem lawv.
Txhawm rau decrypt lub repository, khiav:
git crypt unlock
8. Tsim ib daim duab toolbox
Daim duab toolbox yog ib daim duab nrog tag nrho cov cuab yeej uas peb yuav siv los deploy peb qhov project. Nws yuav siv los ntawm Gitlab khiav los ua cov haujlwm raug xa mus.
Txhua yam yooj yim ntawm no, cia peb tsim ib qho tshiab dockerfiles/toolbox/Dockerfile nrog cov ntsiab lus hauv qab no:
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
Raws li koj tuaj yeem pom, hauv daim duab no peb nruab tag nrho cov khoom siv hluav taws xob uas peb tau siv los xa peb daim ntawv thov. Peb tsis xav tau ntawm no tshwj tsis yog kubtl ua, tab sis tej zaum koj yuav xav ua si nrog nws thaum lub sij hawm teeb tsa cov kav dej.
Tsis tas li ntawd, txhawm rau kom muaj peev xwm sib txuas lus nrog Kubernetes thiab xa mus rau nws, peb yuav tsum teeb tsa lub luag haujlwm rau cov pods tsim los ntawm gitlab-khiav.
Txhawm rau ua qhov no, cia peb mus rau cov npe nrog gitlab-khiav:
Ntawm no peb tau qhib ntau qhov kev xaiv tshiab rau qbec:
--root ib co/app - tso cai rau koj los txiav txim cov npe ntawm ib daim ntawv thov tshwj xeeb
--force:k8s-context __incluster__ - qhov no yog qhov txawv txav uas hais tias kev xa mus yuav tshwm sim hauv tib pawg uas gtilab-khiav khiav. Qhov no yog qhov tsim nyog vim tias txwv tsis pub qbec yuav sim nrhiav qhov tsim nyog Kubernetes server hauv koj kubeconfig
--tos - yuam qbec tos kom txog thaum cov peev txheej uas nws tsim tau nkag mus rau hauv Lub Xeev Npaj thiab tsuas yog tom qab ntawd tawm nrog kev ua tiav kev tawm-code.
-yog - tsuas yog lov tes taw kev sib tham sib plhaub Koj puas paub tseeb? thaum siv.
Tsis txhob hnov qab ua raws li peb cov kev hloov pauv:
Feem ntau, cov kauj ruam tau piav qhia saum toj no txaus los tsim thiab xa yuav luag txhua qhov kev pabcuam microservice, tab sis peb tsis xav ntxiv tag txhua zaus peb yuav tsum hloov kho lub xaib. Yog li ntawd, peb yuav coj txoj kev muaj zog ntau dua thiab teeb tsa kev xa tawm hauv lub tswv yim.
Lub tswv yim yog yooj yim: tam sim no cov duab ntawm peb website yuav rov tsim dua txhua zaus koj thawb mus tswv, thiab tom qab ntawd cia li xa mus rau Kubernetes.
Cia peb hloov kho ob txoj haujlwm no hauv peb .gitlab-ci.yml:
Thov nco ntsoov peb tau ntxiv ib txoj xov tswv к refs rau txoj haujlwm build_website thiab tam sim no peb siv $CI_COMMIT_REF_NAME es tsis txhob $CI_COMMIT_TAG, uas yog, peb tau untied los ntawm cov cim npe hauv Git thiab tam sim no peb yuav thawb ib daim duab nrog lub npe ntawm ceg cog lus uas pib lub raj xa dej. Nws yog ib qho tsim nyog sau cia tias qhov no tseem yuav ua haujlwm nrog cov cim npe, uas yuav tso cai rau peb txuag snapshots ntawm lub vev xaib nrog cov ntawv tshwj xeeb hauv docker-registry.
Thaum lub npe ntawm docker tag rau lub vev xaib tshiab tuaj yeem hloov pauv tsis tau, peb tseem yuav tau piav qhia txog cov kev hloov pauv rau Kubernetes, txwv tsis pub nws tsuas yog yuav tsis rov siv dua daim ntawv thov los ntawm cov duab tshiab, vim nws yuav tsis pom muaj kev hloov pauv hauv lub kev xa tawm manifest.
Xaiv —vm:ext-str digest=”$DIGEST” rau qbec - tso cai rau koj dhau qhov hloov pauv sab nraud rau jsonnet. Peb xav kom nws rov ua haujlwm dua hauv pawg nrog txhua qhov kev tso tawm ntawm peb daim ntawv thov. Peb tsis tuaj yeem siv lub npe tag lawm, uas tam sim no tuaj yeem hloov tsis tau, vim peb yuav tsum tau khi rau ib qho tshwj xeeb ntawm daim duab thiab ua rau kev xa tawm thaum nws hloov.
Ntawm no peb yuav tau txais kev pab los ntawm Kaniko lub peev xwm los khaws cov duab digest rau ib cov ntaub ntawv (kev xaiv --digest-file)
Tom qab ntawd peb yuav hloov cov ntaub ntawv no thiab nyeem nws thaum lub sijhawm xa tawm.
Cia peb hloov kho cov kev txwv rau peb deploy/website/environments/base.libsonnet uas tam sim no yuav zoo li no:
Ua tiav, tam sim no ib qho kev cog lus hauv tswv pib tsim cov duab docker rau website, thiab tom qab ntawd xa mus rau Kubernetes.
Tsis txhob hnov qab ua raws li peb cov kev hloov pauv:
git add .
git commit -m "Configure dynamic build"
Peb mam li kuaj tom qab git laub peb yuav tsum pom tej yam zoo li no:
Screenshot ntawm pipeline rau tus tswv
Hauv txoj ntsiab cai, peb tsis tas yuav rov ua haujlwm gitlab-khiav nrog txhua lub laub, tshwj tsis yog, tau kawg, tsis muaj dab tsi tau hloov pauv hauv nws qhov kev teeb tsa, cia peb kho nws hauv .gitlab-ci.yml:
Tom qab ntawd peb yuav tshaj tawm nws hauv 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
Thiab sau cov kev cai parameter rau nws nyob rau hauv 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',
},
},
}
Wb kuj saib ze ze ntawm jobu stop_review, nws yuav tshwm sim thaum cov ceg raug tshem tawm thiab kom gitlab tsis sim kuaj xyuas nws siv GIT_STRATEGY: tsis muaj, tom qab ntawd peb clone tswv- ceg thiab tshem tawm kev tshuaj xyuas los ntawm nws.
Nws yog qhov tsis meej pem me ntsis, tab sis kuv tseem tsis tau pom txoj hauv kev zoo nkauj dua.
Lwm qhov kev xaiv yuav yog siv txhua qhov kev tshuaj xyuas mus rau lub tsev so npe chaw, uas tuaj yeem raug rhuav tshem tag nrho.
Tsis txhob hnov qab ua raws li peb cov kev hloov pauv:
Saib xyuas Apps Qhov no yog GitLab feature uas tso cai rau koj ntxiv ib lub pob rau txhua cov ntaub ntawv hauv qhov chaw khaws cia kom pom sai sai hauv qhov chaw xa tawm.