Lapho wakha inqubo ye-CI/CD usebenzisa i-Kubernetes, ngezinye izikhathi inkinga iphakama yokungahambisani phakathi kwezidingo zengqalasizinda entsha kanye nesicelo esidluliselwa kuyo. Ikakhulukazi, esiteji sokwakha isicelo kubalulekile ukuthola один isithombe esizosetshenziswa ku всех izindawo zamaphrojekthi namaqoqo. Lesi simiso sisekela okulungile
Kodwa-ke, ngeke ubone noma ubani ezimeni lapho ikhodi yesayithi isebenzisa uhlaka olwenziwe ngomumo, ukusetshenziswa okubeka imingcele ekusetshenzisweni kwayo okuqhubekayo. Futhi nakuba “kusendaweni evamile” lokhu kulula ukubhekana nakho, ku-Kubernetes lokhu kuziphatha kungase kube inkinga, ikakhulukazi uma uhlangabezana nakho okokuqala. Nakuba umqondo wokusungula ungaqhamuka nezixazululo zengqalasizinda ezibonakala zisobala noma zizinhle uma uqala nje... kubalulekile ukukhumbula ukuthi izimo eziningi zingakwazi futhi kufanele zixazululwe ngokwezakhiwo.
Ake sibheke izixazululo ezithandwayo zokulungisa amafayela ezingaholela emiphumeleni engathandeki lapho usebenzisa iqoqo, futhi siveze nendlela elungile kakhudlwana.
Isitoreji esimile
Ukufanekisa, cabanga ngohlelo lwewebhu olusebenzisa uhlobo oluthile lwejeneretha emile ukuze uthole isethi yezithombe, izitayela, nezinye izinto. Isibonelo, uhlaka lwe-Yii PHP lunomphathi wefa owakhelwe ngaphakathi okhiqiza amagama ahlukile wemibhalo. Ngokufanelekile, okukhiphayo kuyisethi yezindlela zesayithi elimile ngokusobala ezingaphambanisani (lokhu kwenziwa ngenxa yezizathu ezimbalwa - isibonelo, ukuqeda izimpinda lapho izingxenye eziningi zisebenzisa insiza efanayo). Ngakho-ke, ngaphandle kwebhokisi, okokuqala lapho ufinyelela imojula yensiza yewebhu, amafayela amile (empeleni, ngokuvamile ama-symlink, kodwa ngaphezulu kwalokho kamuva) ayakhiwa futhi abekwe ngohlu lwemibhalo oluvamile lwempande oluhlukile kulokhu kuthunyelwa:
-
webroot/assets/2072c2df/css/…
-
webroot/assets/2072c2df/images/…
-
webroot/assets/2072c2df/js/…
Kusho ukuthini lokhu mayelana neqoqo?
Isibonelo esilula
Ake sithathe icala elivamile, lapho i-PHP yandulelwa yi-nginx ukusabalalisa idatha emile nokucubungula izicelo ezilula. Indlela elula - Ukuthunyelwa ngeziqukathi ezimbili:
apiVersion: apps/v1
kind: Deployment
metadata:
name: site
spec:
selector:
matchLabels:
component: backend
template:
metadata:
labels:
component: backend
spec:
volumes:
- name: nginx-config
configMap:
name: nginx-configmap
containers:
- name: php
image: own-image-with-php-backend:v1.0
command: ["/usr/local/sbin/php-fpm","-F"]
workingDir: /var/www
- name: nginx
image: nginx:1.16.0
command: ["/usr/sbin/nginx", "-g", "daemon off;"]
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: nginx.conf
Ngefomu elenziwe lula, ukucushwa kwe-nginx kubilisa kokulandelayo:
apiVersion: v1
kind: ConfigMap
metadata:
name: "nginx-configmap"
data:
nginx.conf: |
server {
listen 80;
server_name _;
charset utf-8;
root /var/www;
access_log /dev/stdout;
error_log /dev/stderr;
location / {
index index.php;
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Lapho uqala ukufinyelela isayithi, amafa avela esitsheni se-PHP. Kodwa esimweni seziqukathi ezimbili ngaphakathi kwe-pod eyodwa, i-nginx ayazi lutho mayelana nalawa mafayela amile, okumele (ngokokucushwa) anikezwe wona. Ngenxa yalokho, iklayenti lizobona iphutha elingu-404 lazo zonke izicelo kumafayela e-CSS kanye ne-JS. Isixazululo esilula lapha kungaba ukuhlela inkomba evamile yeziqukathi. Inketho yokuqala - jikelele emptyDir
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: site
spec:
selector:
matchLabels:
component: backend
template:
metadata:
labels:
component: backend
spec:
volumes:
- name: assets
emptyDir: {}
- name: nginx-config
configMap:
name: nginx-configmap
containers:
- name: php
image: own-image-with-php-backend:v1.0
command: ["/usr/local/sbin/php-fpm","-F"]
workingDir: /var/www
volumeMounts:
- name: assets
mountPath: /var/www/assets
- name: nginx
image: nginx:1.16.0
command: ["/usr/sbin/nginx", "-g", "daemon off;"]
volumeMounts:
- name: assets
mountPath: /var/www/assets
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: nginx.conf
Manje amafayela amile akhiqizwe esitsheni anikezwa i-nginx ngendlela efanele. Kodwa ake ngikukhumbuze ukuthi lesi yisixazululo sakudala, okusho ukuthi asikude neze futhi sinama-nuances kanye nokushiyeka kwayo, okuxoxwa ngakho ngezansi.
Isitoreji esithuthuke kakhulu
Manje cabanga ngesimo lapho umsebenzisi avakashele isayithi, alayishe ikhasi elinezitayela ezitholakala esitsheni, futhi ngenkathi efunda leli khasi, saphinde safaka isiqukathi. Ikhathalogi yezimpahla ayinalutho futhi isicelo ku-PHP siyadingeka ukuze kuqalwe ukukhiqiza ezintsha. Kodwa-ke, ngisho nangemva kwalokhu, izixhumanisi eziya ku-statics ezindala ngeke zingasebenzi, okuzoholela emaphutheni ekuboniseni ama-statics.
Ngaphezu kwalokho, cishe sinephrojekthi elayishiwe kakhulu noma encane, okusho ukuthi ikhophi eyodwa yohlelo lokusebenza ngeke yanele:
- Masiyikhulise Ukuthunyelwa kufika kuma-replicas amabili.
- Lapho isayithi liqala ukufinyelelwa, amafa adalwa ngomfanekiso owodwa.
- Ngesinye isikhathi, i-ingress inqume (ngezinjongo zokulinganisa umthwalo) ukuthumela isicelo kumfanekiso wesibili, futhi lezi zimpahla bezingakafiki. Noma mhlawumbe azisekho ngoba sisebenzisa
RollingUpdate
futhi okwamanje senza ukuthunyelwa.
Ngokuvamile, umphumela uphinde ube namaphutha.
Ukuze ugweme ukulahlekelwa amafa amadala, ungashintsha emptyDir
on hostPath
, ingeza i-static ngokomzimba ku-cluster node. Le ndlela yokwenza yimbi ngoba empeleni kufanele bophezela ku-cluster node ethile isicelo sakho, ngoba - uma kwenzeka uthuthela kwamanye ama-node - uhla lwemibhalo ngeke luqukathe amafayela adingekayo. Noma uhlobo oluthile lokuvumelanisa lwemibhalo yangemuva phakathi kwamanodi luyadingeka.
Yiziphi izixazululo?
- Uma ihadiwe nezinsiza kuvumela, ungasebenzisa
cephs ukuhlela uhla lwemibhalo olufinyeleleka ngokulinganayo lwezidingo ezimile.Amadokhumenti asemthethweni incoma amadrayivu e-SSD, okungenani ukuphindaphinda okuphindwe kathathu kanye noxhumano oluzinzile “olugqinsi” phakathi kwama-cluster node. - Inketho engadingi kakhulu kungaba ukuhlela iseva ye-NFS. Kodwa-ke, lapho-ke udinga ukunaka ukwanda okungenzeka kwesikhathi sokuphendula sokucubungula izicelo yiseva yewebhu, futhi ukubekezelelana kwamaphutha kuzoshiya okuningi okufanele ukwenze. Imiphumela yokwehluleka iyinhlekelele: ukulahlekelwa kwentaba kubhubhisa iqoqo lishone ngaphansi kwengcindezi yomthwalo we-LA ogijimela esibhakabhakeni.
Phakathi kwezinye izinto, zonke izinketho zokudala isitoreji esiqhubekayo zizodinga ukuhlanza ingemuva amasethi aphelelwe yisikhathi amafayela aqoqwe phakathi nenkathi ethile yesikhathi. Ngaphambi kweziqukathi ezine-PHP ungabeka I-DaemonSet kusuka kunqolobane ye-nginx, ezogcina amakhophi ezimpahla isikhathi esilinganiselwe. Lokhu kuziphatha kulungiseka kalula kusetshenziswa proxy_cache
ngokujula kwesitoreji ngezinsuku noma amagigabhayithi esikhala sediski.
Ukuhlanganisa le ndlela nezinhlelo zefayela ezisabalalisiwe ezishiwo ngenhla kunikeza insimu enkulu yokucabanga, elinganiselwe kuphela isabelomali namandla obuchwepheshe alabo abazoyisebenzisa futhi bayisekele. Ngokuhlangenwe nakho, singasho ukuthi uma uhlelo lulula, lusebenza ngokuzinza. Lapho izendlalelo ezinjalo zengezwa, kuba nzima kakhulu ukugcina ingqalasizinda, futhi ngesikhathi esifanayo isikhathi esichithwa ekuxilongeni nasekululameni kunoma yikuphi ukwehluleka siyakhula.
Isincomo
Uma ukuqaliswa kwezinketho zesitoreji ezihlongozwayo kubonakala kungenasisekelo kuwe (kuyinkimbinkimbi, kuyabiza ...), ngakho-ke kufanelekile ukubheka isimo ngakolunye uhlangothi. Okungukuthi, ukumba ku-architecture yephrojekthi kanye lungisa inkinga kukhodi, ehlanganiswe nesakhiwo sedatha ethile esimile esithombeni, incazelo engacacile yokuqukethwe noma inqubo "yokufudumala" kanye/noma izimpahla ezihlanganiswe ngaphambilini esigabeni sokuhlanganisa isithombe. Ngale ndlela sithola ukuziphatha okungabikezelwa ngokuphelele kanye nesethi efanayo yamafayela azo zonke izindawo nezifaniso zohlelo lokusebenza olusebenzayo.
Uma sibuyela esibonelweni esiqondile ngohlaka lwe-Yii futhi singahloli ukwakheka kwayo (okungeyona inhloso ye-athikili), kwanele ukuveza izindlela ezimbili ezithandwayo:
- Shintsha inqubo yokwakha isithombe ukuze ubeke amafa endaweni ebikezelwayo. Lokhu kuyaphakanyiswa/kwenziwa ezandisweni ezifana
yii2-static-assets . - Chaza ama-hashes athile ezinkomba zempahla, njengoba kuxoxwe ngakho ku-isb.
lesi sethulo (kusukela kusilayidi No. 35). Ngendlela, umbhali wombiko ekugcineni (futhi hhayi ngaphandle kwesizathu!) Weluleka ukuthi ngemva kokuhlanganisa izimpahla kuseva yokwakha, zilayishe endaweni yokugcina emaphakathi (njenge-S3), phambi kwalapho i-CDN ibeka khona.
Amafayela atholakalayo
Elinye icala elizosebenza lapho uthutha uhlelo lokusebenza kuqoqo le-Kubernetes ligcina amafayela omsebenzisi ohlelweni lwefayela. Isibonelo, siphinde sibe nohlelo lokusebenza lwe-PHP olwamukela amafayela ngefomu lokulayisha, lenze okuthile ngawo ngesikhathi sokusebenza, futhi liwabuyisele emuva.
Ku-Kubernetes, indawo lapho lawa mafayela kufanele abekwe khona kufanele ifane kuzo zonke izifaniso zohlelo lokusebenza. Ngokuya ngobunkimbinkimbi bohlelo lokusebenza kanye nesidingo sokuhlela ukuphikelela kwalawa mafayela, izinketho zedivayisi ezabiwe ezibalwe ngenhla zingase zibe indawo enjalo, kodwa, njengoba sibona, zinezinkinga zazo.
Isincomo
Isixazululo esisodwa usebenzisa isitoreji esihambelana ne-S3 (ngisho noma kuwuhlobo oluthile lwesigaba esizibambele wena njenge-minio). Ukushintshela ku-S3 kuzodinga izinguquko ezingeni lekhodi, nokuthi okuqukethwe kuzolethwa kanjani ekugcineni, sesivele senzile
Izikhathi zomsebenzisi
Ngokwehlukana, kufanelekile ukuqaphela inhlangano yokugcina izikhathi zabasebenzisi. Ngokuvamile lawa futhi amafayela kudiski, okuyinto kumongo we-Kubernetes azoholela ezicelweni zokugunyazwa njalo kumsebenzisi uma isicelo sakhe siphelela kwesinye isitsha.
Inkinga ixazululwa ngokwengxenye ngokuvula stickySessions
ekungeneni (isici sisekelwa kuzo zonke izilawuli zokungena ezidumile - ukuze uthole imininingwane eyengeziwe, bona
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
rules:
- host: stickyingress.example.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /
Kodwa lokhu ngeke kuqede izinkinga ngokuthunyelwa okuphindaphindiwe.
Isincomo
Indlela elungile kungaba ukudlulisela isicelo ku ukugcina amaseshini ku-memcached, Redis kanye nezixazululo ezifanayo - ngokuvamile, shiya ngokuphelele izinketho zefayela.
isiphetho
Izixazululo zengqalasizinda okuxoxwe ngazo embhalweni zifanele ukusetshenziswa kuphela ngefomethi “yezinduku” zesikhashana (okuzwakala kukuhle kakhulu ngesiNgisi njengokusebenza). Angase afaneleke ezigabeni zokuqala zokuthutha uhlelo lokusebenza ku-Kubernetes, kodwa akufanele agxile.
Indlela ejwayelekile enconyiwe iwukuba uzisuse ukuze uvune ukuguqulwa kwesakhiwo sohlelo lokusebenza ngokuhambisana nalokho osekwaziwa abaningi.
PS
Funda futhi kubhulogi yethu:
- «
I-proxying amafayela kusuka ku-AWS S3 kusetshenziswa i-nginx "; - «
Izindlela ezi-7 ezihamba phambili zokusebenzisa iziqukathi ngokuya nge-Google "; - «
7 Izimiso Zokuklama Izicelo Ezisekelwe Kwisitsha » (kusuka ku-Red Hat); - «
7 Izinto Ezilahlekile ku-12 Factor App ".
Source: www.habr.com