Xa ukwakhiwa kwenkqubo ye-CI / CD usebenzisa i-Kubernetes, ngamanye amaxesha ingxaki ivela ngokungahambelani phakathi kweemfuno zesiseko esitsha kunye nesicelo esidluliselwa kuyo. Ngokukodwa, kwinqanaba lokwakha isicelo kubalulekile ukufumana ΠΎΠ΄ΠΈΠ½ umfanekiso oza kusetyenziswa kuwo Π²ΡΠ΅Ρ
Ubume beprojekthi kunye namaqela. Lo mgaqo usisiseko esichanekileyo
Nangona kunjalo, awuyi kubona nabani na kwiimeko apho ikhowudi yesayithi isebenzisa isakhelo esenziwe esele silungile, ukusetyenziswa okumisela izithintelo ekusebenziseni ngakumbi. Kwaye ngelixa "kwindawo eqhelekileyo" oku kulula ukujongana nayo, kwi-Kubernetes le ndlela yokuziphatha ingaba yingxaki, ngakumbi xa udibana nayo okokuqala. Ngelixa ingqondo enobuchule inokuza nezisombululo zeziseko ezingundoqo ezibonakala zicacile okanye zilungile xa uthi nqala... kubalulekile ukukhumbula ukuba uninzi lweemeko zinako kwaye kufuneka. zisonjululwe ngokolwakhiwo.
Makhe sijonge izisombululo ezithandwayo zokugcina iifayile ezinokukhokelela kwimiphumo engathandekiyo xa uqhuba iqela, kwaye ubonise indlela echanekileyo.
Ugcino olungatshintshiyo
Ukwenza umzekelo, qwalasela inkqubo yewebhu esebenzisa uhlobo oluthile lwejenereyitha engatshintshiyo ukufumana iseti yemifanekiso, izimbo, kunye nezinye izinto. Umzekelo, isakhelo se-Yii PHP sinomphathi we-asethi eyakhelwe-ngaphakathi ovelisa amagama ahlukeneyo olawulo. Ngokuhambelanayo, imveliso yiseti yeendlela zesiza esimileyo ngokucacileyo esingadibanisiyo (oku kwenziwa ngenxa yezizathu ezininzi - umzekelo, ukuphelisa ukuphinda-phinda xa amacandelo amaninzi esebenzisa uvimba omnye). Ke, ngaphandle kwebhokisi, okokuqala ufikelela kwimodyuli yomthombo wewebhu, iifayile ezingatshintshiyo (enyanisweni, zihlala zi-symlink, kodwa ngaphezulu koko kamva) zenziwe kwaye zibekwe ngolawulo lweengcambu eziqhelekileyo ezikhethekileyo kolu kuthunyelwa:
-
webroot/assets/2072c2df/css/β¦
-
webroot/assets/2072c2df/images/β¦
-
webroot/assets/2072c2df/js/β¦
Kuthetha ukuthini oku malunga neqela?
Owona mzekelo ulula
Masithathe imeko eqhelekileyo, xa i-PHP ilandelwa yi-nginx ukusasaza idatha engatshintshiyo kunye nokwenza izicelo ezilula. Eyona ndlela ilula - Ukuthunyelwa nezitya ezibini:
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
Kwifom eyenziwe lula, i-nginx config ibilisa koku kulandelayo:
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;
}
}
Xa uqala ukufikelela kwisiza, ii-asethi zivela kwisikhongozeli se-PHP. Kodwa kwimeko yezikhongozeli ezimbini ngaphakathi kwepod enye, i-nginx ayazi nto malunga nezi fayile ze-static, ezimele zinikwe zona (ngokobumbeko). Ngenxa yoko, umxhasi uya kubona impazamo ye-404 kuzo zonke izicelo kwiifayile ze-CSS kunye ne-JS. Isisombululo esilula apha siya kuba kukulungelelanisa uhlaziyo oluqhelekileyo lwezikhongozeli. Inketho yokuqala - ngokubanzi 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
Ngoku iifayile ezimileyo ezenziwe kwisikhongozeli zibuyiswa ngu nginx ngokuchanekileyo. Kodwa mandikukhumbuze ukuba esi sisisombululo samandulo, oku kuthetha ukuba akude neyona nto ifanelekileyo kwaye inama-nuances kunye neentsilelo, ezixutyushwa ngezantsi.
Ugcino oluphambili
Ngoku khawufane ucinge ngemeko apho umsebenzisi wayetyelele indawo, elayisha iphepha elinesitayile esikhoyo kwisikhongozeli, kwaye ngelixa wayefunda eli phepha, saphinda sathumela isikhongozeli. Ikhathalogu ye-asethi iphelelwe kwaye isicelo kwi-PHP siyafuneka ukuqalisa ukuvelisa ezintsha. Nangona kunjalo, nangemva koku, ukudibanisa kwi-statics endala kuya kuba yinto engafanelekanga, eya kukhokelela kwiimpazamo ekuboniseni i-statics.
Ukongeza, sinokuba neprojekthi elayishiweyo ngaphezulu okanye ngaphantsi, okuthetha ukuba ikopi enye yesicelo ayisayi kwanela:
- Masiyinyuse Ukuthunyelwa ukuya kutsho kwiikopi ezimbini.
- Xa isiza safikelelwa okokuqala, ii-asethi zenziwa kwikopi enye.
- Ngexesha elithile, i-ingress yagqiba (ngeenjongo zokulinganisa umthwalo) ukuthumela isicelo kwi-replica yesibini, kwaye ezi mpahla zazingekho. Okanye mhlawumbi azisekho kuba sisebenzisa
RollingUpdate
kwaye okwangoku senza ukusasazwa.
Ngokubanzi, isiphumo kwakhona iimpazamo.
Ukuze ugweme ukulahlekelwa yimpahla endala, unokutshintsha emptyDir
phezu hostPath
, ukongeza i-static ngokomzimba kwi-node ye-cluster. Le ndlela imbi kuba eneneni kufuneka senze njalo bopha kwindawo ethile yeqela isicelo sakho, kuba - kwimeko yokufudukela kwezinye iindawo - ulawulo aluyi kuqulatha iifayile eziyimfuneko. Okanye uhlobo oluthile lwemvelaphi yongqamaniso phakathi kweendawo zokuhlala luyafuneka.
Ziziphi izicombululo?
- Ukuba izixhobo kunye nezixhobo zivumela, ungasebenzisa
iiphfs ukucwangcisa ulawulo olufikelelekayo ngokulinganayo kwiimfuno ezimileyo.Amaxwebhu asemthethweni icebisa iidrive ze-SSD, ubuncinci ukuphindaphinda kathathu kunye noqhagamshelo oluzinzileyo "olungqingqwa" phakathi kweendawo zeqela. - Inketho engabalulekanga kangako inokuba kukulungiselela iseva ye-NFS. Nangona kunjalo, ngoko kufuneka uthathele ingqalelo ukunyuka okunokwenzeka kwixesha lokuphendula kwizicelo zokucubungula ngumncedisi wewebhu, kwaye ukunyamezela impazamo kuya kushiya okuninzi. Imiphumo yokungaphumeleli yintlekele: ukulahlekelwa kwentaba kutshabalalisa iqela lokufa phantsi kohlaselo lomthwalo we-LA obalekela esibhakabhakeni.
Phakathi kwezinye izinto, zonke iinketho zokwenza ugcino oluqhubekayo luya kufuna ukucoca ngasemva iiseti eziphelelwe lixesha zeefayile eziqokelelwe kwithuba elithile lexesha. Ngaphambi kwezikhongozeli ezine-PHP ungabeka DaemonSet ukusuka kwi-caching nginx, eya kugcina iikopi ze-asethi ixesha elithile. Oku kuziphatha kuqwalaselwe ngokulula usebenzisa proxy_cache
ngobunzulu bokugcina ngeentsuku okanye i-gigabytes yendawo yedisk.
Ukudibanisa le ndlela kunye neenkqubo zefayile ezisasazwayo ezikhankanywe ngasentla kunika intsimi enkulu yokucinga, elinganiselwe kuphela ngohlahlo lwabiwo-mali kunye namandla obugcisa abo baya kuphumeza kunye nokuxhasa. Ngokusuka kumava, sinokuthi inkqubo elula, isebenze ngakumbi. Xa ezo zingqimba zongezwa, kuba nzima kakhulu ukugcina iziseko zophuhliso, kwaye ngexesha elifanayo ixesha elichithwe ekuxilongeni nasekubuyiseleni nakuphi na ukungaphumeleli kwanda.
Ingcebiso
Ukuba ukuphunyezwa kweendlela zokugcina ezicetywayo nazo zibonakala zingafanelekanga kuwe (zinzima, zibiza ...), ngoko kuyafaneleka ukujonga imeko ukusuka kwelinye icala. Oko kukuthi, ukugrumba kuyilo lweprojekthi kunye lungisa ingxaki kwikhowudi, ebotshelelwe kwisakhiwo sedatha esingatshintshiyo emfanekisweni, inkcazo engacacanga yesiqulatho okanye inkqubo "yokufudumala" kunye / okanye i-asethi yangaphambili kwinqanaba lokuhlanganisa umfanekiso. Ngale ndlela sifumana ukuziphatha okuqikelelweyo kunye neseti efanayo yeefayile kuzo zonke iimeko-bume kunye neekopi zesicelo esisebenzayo.
Ukuba sibuyela kumzekelo othile kunye nesakhelo se-Yii kwaye asifuni kwisakhiwo sayo (esingeyiyo injongo yenqaku), kwanele ukubonisa iindlela ezimbini ezidumileyo:
- Guqula inkqubo yokwakha umfanekiso ukubeka i-asethi kwindawo eqikelelwayo. Oku kucetyisiwe/kuphunyezwe kwizandiso ezifana
yii2-static-asethi . - Chaza ii-hashes ezithile zoluhlu lwee-asethi, njengoko kuxoxwe ngazo umz.
le ntetho (ukuqala kwisilayidi esinguNombolo 35). Ngendlela, umbhali wengxelo ekugqibeleni (kwaye kungekho ngaphandle kwesizathu!) Ucebisa ukuba emva kokudibanisa i-asethi kwi-server yokwakha, zilayishe kwindawo yokugcina ephakathi (njenge-S3), phambi kweyiphi indawo ye-CDN.
Iifayile ezikhutshelwayo
Elinye ityala eliya kungena ngokuqinisekileyo xa ufuduka isicelo kwiqela leKubernetes kukugcina iifayile zomsebenzisi kwinkqubo yefayile. Umzekelo, siphinde sibe nesicelo se-PHP esamkela iifayile ngefom yokulayisha, yenza into nabo ngexesha lokusebenza, kwaye uzithumele kwakhona.
Kwi-Kubernetes, indawo apho ezi fayile kufuneka zibekwe khona kufuneka ziqheleke kuzo zonke iikopi zesicelo. Ngokuxhomekeke kubunzima besicelo kunye nesidingo sokuququzelela ukuzingisa kwezi fayile, iinketho zesixhobo esabelwana ngazo ezikhankanywe ngasentla zinokuba yindawo enjalo, kodwa, njengoko sibona, zinemiqobo yazo.
Ingcebiso
Esinye isisombululo usebenzisa ugcino oluhambelana ne-S3 (nokuba luhlobo oluthile lokuzibamba njenge-minio). Ukutshintshela kwi-S3 kuya kufuna utshintsho kwinqanaba lekhowudi, kunye nendlela umxholo oya kuhanjiswa ngayo ekuqaleni, sele sinayo
Iiseshoni zabasebenzisi
Ngokwahlukileyo, kuyafaneleka ukuba uqaphele umbutho wokugcinwa kweeseshoni zabasebenzisi. Ngokuqhelekileyo ezi zikwayifayile kwidisk, apho kumxholo we-Kubernetes iya kukhokelela kwizicelo zogunyaziso rhoqo kumsebenzisi ukuba isicelo sakhe siphelela kwesinye isikhongozeli.
Ingxaki isonjululwe ngokuyilayita stickySessions
ekungeneni (inqaku lixhaswa kubo bonke abalawuli abadumileyo be-ingress-ukufumana iinkcukacha ezingaphezulu, 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 oku akuyi kuphelisa iingxaki ngokuthunyelwa ngokuphindaphindiweyo.
Ingcebiso
Enye indlela echanekileyo inokuba kukugqithisela isicelo ukugcina iiseshini kwi-memcached, iRedis kunye nezisombululo ezifanayo - ngokubanzi, lahla ngokupheleleyo iinketho zefayile.
isiphelo
Izisombululo zeziseko ezingundoqo ezixutyushwayo kwisicatshulwa zifanelekile ukusetyenziswa kuphela kwifomathi "yeentonga" zexeshana (ezivakala zihle kakhulu ngesiNgesi njengendlela yokusebenza). Zinokuba zifanelekileyo kwizigaba zokuqala zokufuduka kwesicelo kwi-Kubernetes, kodwa akufanele zithathe iingcambu.
Indlela eqhelekileyo ecetyiswayo kukuzisusa ngokuthanda uhlengahlengiso loyilo lwesicelo ngokuhambelana noko sele kusaziwa kwabaninzi.
PS
Funda nakwibhlog yethu:
- Β«
Ukwenzela iifayile ezivela kwi-AWS S3 usebenzisa i-nginx "; - Β«
Iindlela ezi-7 ezilungileyo zokusebenzisa izikhongozeli ngokukaGoogle "; - Β«
7 Imigaqo-siseko yokuyila ii-Aplikheshini eziSekwe kwisikhongozeli Β» (esuka kwi-Red Hat); - Β«
Izinto ezi-7 ezingekhoyo kwi-Factor App ye-12 Β».
umthombo: www.habr.com