ሰላም ሁላችሁም! ከጥቂት ወራት በፊት አዲሱን የክፍት ምንጭ ፕሮጄክታችንን ወደ ምርት ጀመርን - የግራፋና ፕለጊን ኩበርኔትስን ለመቆጣጠር የጠራነውን
ክፍል 0 - መግቢያ፡ እንዴት እዚህ ደረጃ ላይ ደረስን?
ለግራፋን የራሳችንን ፕለጊን የመፃፍ ሀሳብ በአጋጣሚ ወደ እኛ መጣ። ድርጅታችን ከ10 ዓመታት በላይ ውስብስብነት ያላቸውን የተለያየ ደረጃ ያላቸውን የድር ፕሮጄክቶችን ሲከታተል ቆይቷል። በዚህ ጊዜ ውስጥ ከፍተኛ መጠን ያለው እውቀት፣አስደሳች ጉዳዮች እና የተለያዩ የክትትል ስርዓቶችን በመጠቀም ልምድ ሰብስበናል። እና በአንድ ወቅት እራሳችንን ጠየቅን: - "Kubernetes ለመከታተል አስማታዊ መሳሪያ አለ, ስለዚህም እነሱ እንደሚሉት "አቀናጅተው ይረሱት?" .. k8 ዎችን ለመቆጣጠር የኢንዱስትሪው መስፈርት እርግጥ ነው, ለረጅም ጊዜ ቆይቷል. Prometheus + Grafana ጥምረት. እና ለዚህ ቁልል ዝግጁ-የተዘጋጁ መፍትሄዎች, ትልቅ ስብስብ አለ የተለያዩ አይነቶች መሳሪያዎች-ፕሮሜቲየስ-ኦፕሬተር, የ kubernetes-mixin ዳሽቦርዶች ስብስብ, ግራፋና-ኩበርኔትስ-መተግበሪያ.
የግራፋና-ኩበርኔትስ-መተግበሪያ ፕለጊን ለእኛ በጣም አስደሳች አማራጭ መስሎ ነበር፣ ነገር ግን ከአንድ አመት በላይ አልተደገፈም እና በተጨማሪ፣ ከአዲሶቹ የኖድ-ላኪ እና የኩቤ-ግዛት-ሜትሪክስ ስሪቶች ጋር መስራት አይችልም። እናም በአንድ ወቅት “የራሳችንን ውሳኔ ማድረግ የለብንም?” ብለን ወሰንን።
በእኛ ፕለጊን ውስጥ ተግባራዊ ለማድረግ የወሰንን ሀሳቦች
- የ "መተግበሪያ ካርታ" ምስላዊ: በክላስተር ውስጥ ያሉ አፕሊኬሽኖች ምቹ አቀራረብ, በስም ቦታዎች ተመድበው, ማሰማራት ...;
- እንደ "ማሰማራት - አገልግሎት (+ ወደቦች)" ያሉ ግንኙነቶችን ማየት.
- በክላስተር ኖዶች ላይ የክላስተር አፕሊኬሽኖችን ስርጭትን ማየት።
- የመለኪያዎች ስብስብ እና መረጃ ከብዙ ምንጮች፡- ፕሮሜቴየስ እና k8s api አገልጋይ።
- የሁለቱም የመሠረተ ልማት ክፍሎችን መከታተል (የሲፒዩ ጊዜ ፣ ማህደረ ትውስታ ፣ የዲስክ ንዑስ ስርዓት ፣ አውታረ መረብ) እና የትግበራ አመክንዮ - የጤና-ሁኔታ ፖድ ፣ የሚገኙ ቅጂዎች ብዛት ፣ ስለ መኖር / ዝግጁነት ፈተናዎች ማለፍ።
ክፍል 1፡ "Grafana plugin" ምንድን ነው?
ከቴክኒካል እይታ አንጻር የግራፋና ፕለጊን በግራፋና መረጃ ማውጫ ውስጥ የተከማቸ የማዕዘን መቆጣጠሪያ ነው (/var/grafana/plugins/ /dist/module.js) እና እንደ SystemJS ሞጁል ሊጫኑ ይችላሉ. እንዲሁም በዚህ ማውጫ ውስጥ ስለ ተሰኪዎ ሁሉንም ሜታ መረጃ የያዘ plugin.json ፋይል መኖር አለበት፡ ስም፣ ስሪት፣ የተሰኪ አይነት፣ ወደ ማከማቻው/ጣቢያ/ፍቃድ የሚወስዱ አገናኞች፣ ጥገኞች እና የመሳሰሉት።
module.ts
plugin.json
በቅጽበታዊ ገጽ እይታው ላይ እንደሚታየው plugin.type = መተግበሪያን ገልጸናል። ምክንያቱም የ Grafana ፕለጊኖች ከሶስት ዓይነቶች ሊሆኑ ይችላሉ፡
ፓነል: በጣም የተለመደው ተሰኪ አይነት - የተለያዩ ዳሽቦርዶችን ለመገንባት የሚያገለግል ማንኛውንም መለኪያዎችን ለማሳየት ፓነል ነው።
የመረጃ ምንጭተሰኪ ማገናኛ ወደ አንዳንድ የውሂብ ምንጭ (ለምሳሌ፡ Prometheus-datasource፣ ClickHouse-datasource፣ ElasticSearch-datasource)።
መተግበሪያ: በ Grafana ውስጥ የራስዎን የፊት ገፅ አፕሊኬሽን እንዲገነቡ፣ የእራስዎን የኤችቲኤምኤል ገፆች እንዲፈጥሩ እና የውሂብ ምንጩን በእጅ በመዳረስ የተለያዩ መረጃዎችን እንዲመለከቱ የሚያስችልዎ ፕለጊን ነው። እንዲሁም የሌሎች ዓይነቶች ተሰኪዎች (የውሂብ ምንጭ፣ ፓኔል) እና የተለያዩ ዳሽቦርዶች እንደ ጥገኛ ሆነው ሊያገለግሉ ይችላሉ።
የፕለጊን ጥገኞች ምሳሌ ከአይነት=መተግበሪያ ጋር.
ሁለቱንም ጃቫ ስክሪፕት እና ታይፕ ስክሪፕት እንደ ፕሮግራሚንግ ቋንቋ መጠቀም ይችላሉ (እኛ መርጠናል)። ለሄሎ-አለም ፕለጊኖች ማንኛውንም አይነት ማድረግ የምትችለውን ዝግጅት
ክፍል 2: የአካባቢውን አካባቢ ማዘጋጀት
በፕለጊን ለመስራት በተፈጥሮ ሁሉም ቀድሞ የተጫኑ መሳሪያዎች ያሉት የ kubernetes ክላስተር እንፈልጋለን፡- ፕሮሜቴየስ፣ ኖድ-ላኪ፣ ኩቤ-ስቴት-ሜትሪክስ፣ ግራፋና። አካባቢው በፍጥነት፣ በቀላሉ እና በተፈጥሮ መዘጋጀት አለበት፣ እና ትኩስ-ዳግም መጫንን ለማረጋገጥ የግራፋና ዳታ ማውጫ በቀጥታ ከገንቢው ማሽን ላይ መጫን አለበት።
በጣም ምቹ መንገድ, በእኛ አስተያየት, ከ kubernetes ጋር በአካባቢው ለመስራት
የእኛ የመጨረሻ ሚኒኩቤ ማስጀመሪያ ስክሪፕት ይህን ይመስላል።
minikube start --kubernetes-version=v1.13.4 --memory=4096 --bootstrapper=kubeadm --extra-config=scheduler.address=0.0.0.0 --extra-config=controller-manager.address=0.0.0.0
minikube mount
/home/sergeisporyshev/Projects/Grafana:/var/grafana --gid=472 --uid=472 --9p-version=9p2000.L
ክፍል 3: ትክክለኛ እድገት
የነገር ሞዴል
ተሰኪውን ለመተግበር በመዘጋጀት እኛ የምንሰራቸውን ሁሉንም የኩበርኔትስ አካላት በTyScript ክፍሎች መልክ ለመግለጽ ወስነናል-ፖድ ፣ ማሰማራት ፣ ዳሞንሴት ፣ ስቴትፉልሴት ፣ ሥራ ፣ ክሮንጆብ ፣ አገልግሎት ፣ መስቀለኛ መንገድ ፣ የስም ቦታ። እያንዳንዳቸው እነዚህ ክፍሎች ገንቢውን ፣ አጥፊውን ፣ ታይነትን የማዘመን እና የመቀየር ዘዴዎችን ከሚገልጸው የጋራ BaseModel ክፍል ይወርሳሉ። እያንዳንዱ ክፍል ከሌሎች አካላት ጋር የተቆራኙ ግንኙነቶችን ይገልፃል ፣ ለምሳሌ ፣ ለአንድ አካል ማሰማራት የፖድ ዝርዝር።
import {Pod} from "./pod";
import {Service} from "./service";
import {BaseModel} from './traits/baseModel';
export class Deployment extends BaseModel{
pods: Array<Pod>;
services: Array<Service>;
constructor(data: any){
super(data);
this.pods = [];
this.services = [];
}
}
በጌተሮች እና ሰጣሪዎች እገዛ የምንፈልገውን የህጋዊ አካል መለኪያዎችን በሚያመች እና ሊነበብ በሚችል መልኩ ማሳየት ወይም ማዘጋጀት እንችላለን። ለምሳሌ፣ ሊመደብ የሚችል የሲፒዩ ኖዶች ቅርጸት ያለው ውፅዓት፡-
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}
ገጾች
የሁሉም ተሰኪ ገጾቻችን ዝርዝር በመጀመሪያ በእኛ pluing.json በጥገኛ ክፍል ውስጥ ተገልጿል፡
በእያንዳንዱ ገጽ ብሎክ ውስጥ የገጽ ስምን መጠቆም አለብን (ከዚያ ይህ ገጽ ወደሚገኝበት slug ይቀየራል)። ለዚህ ገጽ ሥራ ኃላፊነት ያለው አካል ስም (የአካል ክፍሎች ዝርዝር ወደ module.ts ይላካል); ከዚህ ገጽ ጋር የሚሠራው የተጠቃሚ ሚና እና የጎን አሞሌው የአሰሳ ቅንብሮችን ያሳያል።
ለገጹ አሠራር ኃላፊነት ባለው አካል ውስጥ ወደ ኤችቲኤምኤል ፋይል የሚወስደውን መንገድ በምልክት በማለፍ አብነት ዩአርኤልን ማዘጋጀት አለብን። በመቆጣጠሪያው ውስጥ፣ በጥገኝነት መርፌ እስከ 2 የሚደርሱ አስፈላጊ የማዕዘን አገልግሎቶችን ማግኘት እንችላለን፡-
- backendSrv - ከ Grafana API አገልጋይ ጋር መስተጋብር የሚያቀርብ አገልግሎት;
- datasourceSrv - በእርስዎ Grafana ውስጥ ከተጫኑ ሁሉም የውሂብ ምንጮች ጋር አካባቢያዊ መስተጋብርን የሚያቀርብ አገልግሎት (ለምሳሌ የ.getAll() ዘዴ - ሁሉንም የተጫኑ የውሂብ ምንጮች ዝርዝር ይመልሳል፤ .get() ) - የአንድ የተወሰነ የውሂብ ምንጭ ምሳሌ ነገርን ይመልሳል።
ክፍል 4፡ የመረጃ ምንጭ
ከግራፋና እይታ አንጻር የመረጃ ምንጭ ከሌሎቹ ጋር አንድ አይነት ፕለጊን ነው፡ የራሱ የመግቢያ ነጥብ module.js አለው፡ ከሜታ መረጃ plugin.json ጋር ፋይል አለ። ፕለጊን ከአይነት = መተግበሪያ ጋር ስንሰራ ከሁለቱም ካሉ የመረጃ ምንጮች (ለምሳሌ ፕሮሜቲየስ-ዳታ ምንጭ) እና ከራሳችን ጋር መስተጋብር መፍጠር እንችላለን፣ ይህም በቀጥታ በፕለጊን ማውጫ ውስጥ (dist/datasource/*) ማከማቸት ወይም እንደ ጥገኝነት መጫን እንችላለን። በእኛ ሁኔታ የመረጃ ምንጭ ከተሰኪው ኮድ ጋር አብሮ ይመጣል። እንዲሁም የconfig.html አብነት እና የConfigCtrl መቆጣጠሪያ እንዲኖርዎት ያስፈልጋል፣ ይህም ለዳታ ምንጭ ምሳሌ ውቅረት ገጽ እና የውሂብ ምንጭዎ ሎጂክን ለሚተገበረው የውሂብ ምንጭ መቆጣጠሪያ።
በ KubeGraf ፕለጊን ውስጥ ከተጠቃሚ በይነገጽ እይታ አንጻር የመረጃ ምንጩ የሚከተሉትን ችሎታዎች የሚተገብር የ kubernetes ክላስተር ምሳሌ ነው (የምንጭ ኮድ አለ
- ከ k8s api-server መረጃን መሰብሰብ (የስም ቦታዎችን ዝርዝር ማግኘት፣ ማሰማራት...)
- ለፕሮሜቴየስ-ዳታ ምንጭ (በፕለጊን መቼቶች ውስጥ ለእያንዳንዱ ልዩ ክላስተር የተመረጠ) ፕሮክሲ ማድረግ እና ምላሾችን በቋሚ ገፆች እና በዳሽቦርድ ውስጥ ለመጠቀም ምላሾችን መቅረጽ።
- በስታቲክ ፕለጊን ገፆች ላይ መረጃን ማዘመን (በተቀመጠው የማደስ ፍጥነት)።
- በ grafana-dashboards (metriFindQuery() ዘዴ) ውስጥ የአብነት ሉህ ለማመንጨት ጥያቄዎችን በማዘጋጀት ላይ
- የግንኙነት ሙከራ ከመጨረሻው k8s ስብስብ ጋር።
testDatasource(){
let url = '/api/v1/namespaces';
let _url = this.url;
if(this.accessViaToken)
_url += '/__proxy';
_url += url;
return this.backendSrv.datasourceRequest({
url: _url,
method: "GET",
headers: {"Content-Type": 'application/json'}
})
.then(response => {
if (response.status === 200) {
return {status: "success", message: "Data source is OK", title: "Success"};
}else{
return {status: "error", message: "Data source is not OK", title: "Error"};
}
}, error => {
return {status: "error", message: "Data source is not OK", title: "Error"};
})
}
የተለየ ትኩረት የሚስብ ነጥብ, በእኛ አስተያየት, የውሂብ ምንጭ የማረጋገጫ እና የፍቃድ ዘዴን መተግበር ነው. በተለምዶ፣ ከሳጥኑ ውጭ፣ የመጨረሻውን የውሂብ ምንጭ መዳረሻን ለማዋቀር አብሮ የተሰራውን የግራፋና አካል ዳታ ምንጭHttpSettingsን መጠቀም እንችላለን። ይህንን አካል በመጠቀም የዩአርኤል እና መሰረታዊ የማረጋገጫ/ፈቃድ ቅንጅቶችን፡ መግቢያ-ፓስዎርድ ወይም ደንበኛ-ሰርት/ደንበኛ-ቁልፍን በመግለጽ የhttp ዳታ ምንጭ መዳረሻን ማዋቀር እንችላለን። በ bearer token (የ k8s ስታንዳርድ) በመጠቀም መዳረሻን የማዋቀር ችሎታን ተግባራዊ ለማድረግ ትንሽ ማስተካከያ ማድረግ ነበረብን።
ይህንን ችግር ለመፍታት አብሮ የተሰራውን የግራፋና "ፕለጊን መስመሮች" ዘዴን መጠቀም ይችላሉ (ተጨማሪ ዝርዝሮች በ
/api/v8/ስም ቦታዎች ከፍቃዱ ጋር፡ ተሸካሚ ራስጌ።
በተፈጥሮ ፣ ከ k8s ኤፒአይ አገልጋይ ጋር ለመስራት ተነባቢ ብቻ መዳረሻ ያለው ተጠቃሚ እንፈልጋለን ፣ ለመፍጠርም እርስዎም ሊያገኙት ይችላሉ ።
ክፍል 5፡ መልቀቅ
አንዴ የእራስዎን የግራፋና ፕለጊን ከፃፉ፣በተፈጥሮ በይፋ እንዲገኝ ማድረግ ይፈልጋሉ። በ Grafana ይህ እዚህ የሚገኙ ተሰኪዎች ቤተ-መጽሐፍት ነው።
ተሰኪዎ በኦፊሴላዊው መደብር ላይ እንዲገኝ፣ PR ን መስራት ያስፈልግዎታል
ስሪቱ የፕለጊንዎ ስሪት በሆነበት፣ ዩአርኤል ወደ ማከማቻው የሚያገናኝ ነው፣ እና መፈጸም የተወሰነ የፕለጊን ስሪት የሚገኝበት የቁርጥ ቀን ሃሽ ነው።
እና በውጤቱ ላይ እንደዚህ ያለ አስደናቂ ምስል ታያለህ-
የእሱ ውሂብ በራስ-ሰር ከእርስዎ Readme.md፣ Changelog.md እና plugin.json ፋይል ከተሰኪው መግለጫ ጋር ይያዛል።
ክፍል 6: ከመደምደሚያ ይልቅ
ከተለቀቀ በኋላ የእኛን ተሰኪ ማዘጋጀታችንን አላቆምንም። እና አሁን የክላስተር ኖዶችን ሀብቶች አጠቃቀም በትክክል በመከታተል ፣ UX ን ለማሻሻል አዳዲስ ባህሪዎችን በማስተዋወቅ እና እንዲሁም ተሰኪውን ከደንበኞቻችን እና በ GitHub ላይ ካሉ ሰዎች (ከለቀቁ) የተቀበሉትን ከፍተኛ መጠን ያለው ግብረመልስ እየሰራን ነው። የእርስዎ ጉዳይ ወይም የመሳብ ጥያቄ፣ በጣም ደስተኛ እሆናለሁ :)
ይህ ጽሑፍ እንደ Grafana ያለ አስደናቂ መሣሪያ እንዲረዱ እና ምናልባትም የእራስዎን ፕለጊን እንዲጽፉ ይረዳዎታል ብለን ተስፋ እናደርጋለን።
አመሰግናለሁ!)
ምንጭ: hab.com