ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

ሰላም ሁላችሁም! ከጥቂት ወራት በፊት አዲሱን የክፍት ምንጭ ፕሮጄክታችንን ወደ ምርት ጀመርን - የግራፋና ፕለጊን ኩበርኔትስን ለመቆጣጠር የጠራነውን DevOpsProdigy KubeGraf. የተሰኪው ምንጭ ኮድ በ ላይ ይገኛል። GitHub ላይ የህዝብ ማከማቻ. እና በዚህ ጽሑፍ ውስጥ ፕለጊኑን እንዴት እንደፈጠርን ፣ ምን አይነት መሳሪያዎች እንደተጠቀምን እና በእድገት ሂደት ውስጥ ምን ችግሮች እንዳጋጠሙን ታሪክ ልንነግርዎ እንፈልጋለን። እንሂድ!

ክፍል 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 ውስጥ የራስዎን የፊት ገፅ አፕሊኬሽን እንዲገነቡ፣ የእራስዎን የኤችቲኤምኤል ገፆች እንዲፈጥሩ እና የውሂብ ምንጩን በእጅ በመዳረስ የተለያዩ መረጃዎችን እንዲመለከቱ የሚያስችልዎ ፕለጊን ነው። እንዲሁም የሌሎች ዓይነቶች ተሰኪዎች (የውሂብ ምንጭ፣ ፓኔል) እና የተለያዩ ዳሽቦርዶች እንደ ጥገኛ ሆነው ሊያገለግሉ ይችላሉ።

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ
የፕለጊን ጥገኞች ምሳሌ ከአይነት=መተግበሪያ ጋር.

ሁለቱንም ጃቫ ስክሪፕት እና ታይፕ ስክሪፕት እንደ ፕሮግራሚንግ ቋንቋ መጠቀም ይችላሉ (እኛ መርጠናል)። ለሄሎ-አለም ፕለጊኖች ማንኛውንም አይነት ማድረግ የምትችለውን ዝግጅት አገናኙን ያግኙ: ይህ ማከማቻ ብዙ ቁጥር ያላቸው የጀማሪ ጥቅሎችን ይዟል (በReact ውስጥ ያለው የፕለጊን የሙከራ ምሳሌ እንኳን አለ) አስቀድሞ የተጫኑ እና የተዋቀሩ ግንበኞች ያሉት።

ክፍል 2: የአካባቢውን አካባቢ ማዘጋጀት

በፕለጊን ለመስራት በተፈጥሮ ሁሉም ቀድሞ የተጫኑ መሳሪያዎች ያሉት የ kubernetes ክላስተር እንፈልጋለን፡- ፕሮሜቴየስ፣ ኖድ-ላኪ፣ ኩቤ-ስቴት-ሜትሪክስ፣ ግራፋና። አካባቢው በፍጥነት፣ በቀላሉ እና በተፈጥሮ መዘጋጀት አለበት፣ እና ትኩስ-ዳግም መጫንን ለማረጋገጥ የግራፋና ዳታ ማውጫ በቀጥታ ከገንቢው ማሽን ላይ መጫን አለበት።

በጣም ምቹ መንገድ, በእኛ አስተያየት, ከ kubernetes ጋር በአካባቢው ለመስራት ሚኒኩቤ. ቀጣዩ ደረጃ ፕሮሜቲየስ-ኦፕሬተርን በመጠቀም የፕሮሜቲየስ + ግራፋና ጥምረት መጫን ነው። ውስጥ ይህ ዓምድ ሚኒኩቤ ላይ ፕሮሜቲየስ-ኦፕሬተርን የመትከል ሂደት በዝርዝር ተብራርቷል። ጽናት ለማንቃት መለኪያውን ማዘጋጀት አለብህ ጽናት: እውነት በ charts/grafana/values.yaml ፋይል ውስጥ የራስዎን PV እና PVC ይጨምሩ እና በቋሚ የይገባኛል ጥያቄ ግቤት ውስጥ ይግለጹ።

የእኛ የመጨረሻ ሚኒኩቤ ማስጀመሪያ ስክሪፕት ይህን ይመስላል።

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 ስታንዳርድ) በመጠቀም መዳረሻን የማዋቀር ችሎታን ተግባራዊ ለማድረግ ትንሽ ማስተካከያ ማድረግ ነበረብን።

ይህንን ችግር ለመፍታት አብሮ የተሰራውን የግራፋና "ፕለጊን መስመሮች" ዘዴን መጠቀም ይችላሉ (ተጨማሪ ዝርዝሮች በ ኦፊሴላዊ ሰነዶች ገጽ). በመረጃ ምንጫችን ቅንጅቶች ውስጥ በግራፋና ተኪ አገልጋይ የሚስተናገዱ የማዘዋወር ደንቦችን ማወጅ እንችላለን። ለምሳሌ፣ ለእያንዳንዱ የመጨረሻ ነጥብ ራስጌዎችን ወይም ዩአርኤሎችን ማቀናበር ይቻላል፣ ውሂብ ለመቅረጽ ከ jsonData እና ደህንነቱ የተጠበቀ የJsonData መስኮች (የይለፍ ቃል ወይም ቶከኖች በተመሰጠረ ቅጽ) ሊወሰዱ ይችላሉ። በምሳሌአችን ውስጥ እንደ መጠይቆች /__proxy/api/v1/ስም ቦታዎች ከቅጹ ዩአርኤል ጋር ተኪ ይሆናል።
/api/v8/ስም ቦታዎች ከፍቃዱ ጋር፡ ተሸካሚ ራስጌ።

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

በተፈጥሮ ፣ ከ k8s ኤፒአይ አገልጋይ ጋር ለመስራት ተነባቢ ብቻ መዳረሻ ያለው ተጠቃሚ እንፈልጋለን ፣ ለመፍጠርም እርስዎም ሊያገኙት ይችላሉ ። ተሰኪ ምንጭ ኮድ.

ክፍል 5፡ መልቀቅ

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

አንዴ የእራስዎን የግራፋና ፕለጊን ከፃፉ፣በተፈጥሮ በይፋ እንዲገኝ ማድረግ ይፈልጋሉ። በ Grafana ይህ እዚህ የሚገኙ ተሰኪዎች ቤተ-መጽሐፍት ነው። grafana.com/grafana/plugins

ተሰኪዎ በኦፊሴላዊው መደብር ላይ እንዲገኝ፣ PR ን መስራት ያስፈልግዎታል ይህ ማከማቻይህን የመሰለ ይዘት ወደ repo.json ፋይል በማከል፡-

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

ስሪቱ የፕለጊንዎ ስሪት በሆነበት፣ ዩአርኤል ወደ ማከማቻው የሚያገናኝ ነው፣ እና መፈጸም የተወሰነ የፕለጊን ስሪት የሚገኝበት የቁርጥ ቀን ሃሽ ነው።

እና በውጤቱ ላይ እንደዚህ ያለ አስደናቂ ምስል ታያለህ-

ለግራፋና ተሰኪ ልማት፡ የትልቅ ፎቶዎች ታሪክ

የእሱ ውሂብ በራስ-ሰር ከእርስዎ Readme.md፣ Changelog.md እና plugin.json ፋይል ከተሰኪው መግለጫ ጋር ይያዛል።

ክፍል 6: ከመደምደሚያ ይልቅ

ከተለቀቀ በኋላ የእኛን ተሰኪ ማዘጋጀታችንን አላቆምንም። እና አሁን የክላስተር ኖዶችን ሀብቶች አጠቃቀም በትክክል በመከታተል ፣ UX ን ለማሻሻል አዳዲስ ባህሪዎችን በማስተዋወቅ እና እንዲሁም ተሰኪውን ከደንበኞቻችን እና በ GitHub ላይ ካሉ ሰዎች (ከለቀቁ) የተቀበሉትን ከፍተኛ መጠን ያለው ግብረመልስ እየሰራን ነው። የእርስዎ ጉዳይ ወይም የመሳብ ጥያቄ፣ በጣም ደስተኛ እሆናለሁ :)

ይህ ጽሑፍ እንደ Grafana ያለ አስደናቂ መሣሪያ እንዲረዱ እና ምናልባትም የእራስዎን ፕለጊን እንዲጽፉ ይረዳዎታል ብለን ተስፋ እናደርጋለን።

አመሰግናለሁ!)

ምንጭ: hab.com

አስተያየት ያክሉ