குபெர்னெட்டிற்கான ஆபரேட்டர்கள்: ஸ்டேட்ஃபுல் அப்ளிகேஷன்களை எப்படி இயக்குவது

குபெர்னெட்ஸில் உள்ள மாநில பயன்பாடுகளில் சிக்கல்

நிலையற்றவை என வகைப்படுத்தப்படும் வழக்குகள் வரும்போது, ​​பயன்பாடுகள் மற்றும் சேவைகளை உள்ளமைத்தல், தொடங்குதல் மற்றும் மேலும் அளவிடுதல் எளிதானது, அதாவது. தரவு சேமிக்காமல். குபெர்னெட்ஸில், அதன் நிலையான APIகளைப் பயன்படுத்தி, அத்தகைய சேவைகளை இயக்குவது வசதியானது, ஏனென்றால் எல்லாமே "பெட்டிக்கு வெளியே" நடக்கும்: நிலையான உள்ளமைவுகளின்படி, எந்த விவரங்களும் அல்லது மந்திரமும் இல்லாமல்.

எளிமையாகச் சொன்னால், PHP/Ruby/Python இல் பேக்கெண்டின் மேலும் ஐந்து நகல்களை கன்டெய்னர்களின் தொகுப்பில் தொடங்க, நீங்கள் ஒரு புதிய சேவையகத்தை 5 முறை அமைத்து ஆதாரங்களை நகலெடுக்க வேண்டும். மூலக் குறியீடு மற்றும் init ஸ்கிரிப்ட் இரண்டும் படத்தில் இருப்பதால், நிலையற்ற பயன்பாட்டை அளவிடுவது முற்றிலும் அடிப்படையானது. கொள்கலன்கள் மற்றும் மைக்ரோ சர்வீஸ் கட்டிடக்கலை ரசிகர்களுக்கு நன்கு தெரியும், சிரமம் தொடங்குகிறது மாநில பயன்பாடுகள், அதாவது தரவுத்தளங்கள் மற்றும் தற்காலிக சேமிப்புகள் (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...) போன்ற தரவு நிலைத்தன்மையுடன் இது தனித்தனியாக கோரம் கிளஸ்டரைச் செயல்படுத்தும் மென்பொருள் (உதாரணமாக, Percona XtraDB மற்றும் Cassandra) மற்றும் தனித்தனி மேலாண்மைப் பயன்பாடுகள் தேவைப்படும் மென்பொருள் (Redis, MySQL, PostgreSQL... போன்றவை) ஆகிய இரண்டிற்கும் பொருந்தும்.

மூலக் குறியீடு மற்றும் சேவையைத் தொடங்குவது போதாது என்பதால் சிரமங்கள் எழுகின்றன - நீங்கள் இன்னும் சில படிகளைச் செய்ய வேண்டும். குறைந்தபட்சம், தரவை நகலெடுக்கவும் மற்றும்/அல்லது கிளஸ்டரில் சேரவும். இன்னும் துல்லியமாக, இந்தச் சேவைகளுக்கு தரவு இழப்பு அல்லது தற்காலிகக் கிடைக்காத தன்மை இல்லாமல் அவற்றை எவ்வாறு சரியாக அளவிடுவது, புதுப்பித்தல் மற்றும் மறுகட்டமைப்பது பற்றிய புரிதல் தேவைப்படுகிறது. இந்த தேவைகளை கணக்கில் எடுத்துக்கொள்வது "செயல்பாட்டு அறிவு" என்று அழைக்கப்படுகிறது.

CoreOS ஆபரேட்டர்கள்

செயல்பாட்டு அறிவை "நிரல்" செய்வதற்காக, கடந்த ஆண்டு இறுதியில் CoreOS திட்டம் சமர்ப்பிக்க Kubernetes இயங்குதளத்திற்கான "ஒரு புதிய வகை மென்பொருள்" - ஆபரேட்டர்கள் (ஆங்கிலத்தில் இருந்து "செயல்பாடு", அதாவது "செயல்பாடு").

ஆபரேட்டர்கள் குபெர்னெட்ஸின் முக்கிய திறன்களைப் பயன்படுத்துதல் மற்றும் விரிவாக்குதல் (உள்ளடக்கம். ஸ்டேட்ஃபுல் செட்ஸ், கீழே உள்ள வித்தியாசத்தைப் பார்க்கவும்) பயன்பாட்டுக் குறியீட்டில் செயல்பாட்டு அறிவைச் சேர்க்க DevOps நிபுணர்களை அனுமதிக்கவும்.

ஆபரேட்டரின் நோக்கம் - குபெர்னெட்டஸ் கிளஸ்டரில் உள்ள பல ஸ்டேட்ஃபுல் அப்ளிகேஷன் நிறுவனங்களை நிர்வகிக்க உங்களை அனுமதிக்கும் API ஐ பயனருக்கு வழங்கவும் ) உண்மையில், ஆபரேட்டர் க்ளஸ்டருக்குள் உள்ள பயன்பாட்டுடன் பணியை எளிமைப்படுத்த வடிவமைக்கப்பட்டுள்ளது, முன்பு கைமுறையாக தீர்க்க வேண்டிய செயல்பாட்டு பணிகளை தானியங்குபடுத்துகிறது.

ஆபரேட்டர்கள் எப்படி வேலை செய்கிறார்கள்

பிரதிசெட்டுகள் குபெர்னெட்டஸ் நீங்கள் விரும்பிய எண்ணிக்கையிலான இயங்கும் காய்களைக் குறிப்பிட அனுமதிக்கிறது, மேலும் கட்டுப்படுத்திகள் அவற்றின் எண்ணிக்கை பராமரிக்கப்படுவதை உறுதி செய்கின்றன (காய்களை உருவாக்கி நீக்குவதன் மூலம்). ஒரு ஆபரேட்டர் இதே வழியில் செயல்படுகிறார், ஒரு நிலையான குபெர்னெட்ஸ் வளம் மற்றும் கட்டுப்படுத்திக்கு செயல்பாட்டு அறிவின் தொகுப்பைச் சேர்த்து, தேவையான எண்ணிக்கையிலான பயன்பாட்டு நிறுவனங்களை ஆதரிக்க கூடுதல் செயல்களைச் செய்ய உங்களை அனுமதிக்கிறது.

இது எப்படி வேறுபட்டது ஸ்டேட்ஃபுல் செட்ஸ், தரவு சேமிப்பு அல்லது நிலையான ஐபிகள் போன்ற நிலையான ஆதாரங்களை வழங்குவதற்கு கிளஸ்டர் தேவைப்படும் பயன்பாடுகளுக்காக வடிவமைக்கப்பட்டதா? அத்தகைய பயன்பாடுகளுக்கு, ஆபரேட்டர்கள் பயன்படுத்தலாம் ஸ்டேட்ஃபுல் செட்ஸ் (அதற்கு பதிலாக பிரதிசெட்டுகள்) ஒரு அடிப்படையாக, வழங்குதல் கூடுதல் ஆட்டோமேஷன்: செயலிழப்புகள் ஏற்பட்டால் தேவையான செயல்களைச் செய்யவும், காப்புப்பிரதிகளை உருவாக்கவும், உள்ளமைவைப் புதுப்பிக்கவும்.

எனவே இதெல்லாம் எப்படி வேலை செய்கிறது? ஆபரேட்டர் ஒரு மேலாளர் டீமான்:

  1. Kubernetes இல் நிகழ்வு API க்கு குழுசேர்கிறது;
  2. அதிலிருந்து கணினியைப் பற்றிய தரவைப் பெறுகிறது (அதைப் பற்றி பிரதிசெட்டுகள், காய்களுடன், சேவைகள் மற்றும் பல.);
  3. பற்றிய தரவுகளைப் பெறுகிறது மூன்றாம் தரப்பு வளங்கள் (கீழே உள்ள எடுத்துக்காட்டுகளைப் பார்க்கவும்);
  4. தோற்றம்/மாற்றத்திற்கு எதிர்வினையாற்றுகிறது மூன்றாம் தரப்பு வளங்கள் (உதாரணமாக, அளவை மாற்ற, பதிப்பை மாற்ற, மற்றும் பல);
  5. அமைப்பின் நிலையில் ஏற்படும் மாற்றங்களுக்கு எதிர்வினையாற்றுகிறது (அதைப் பற்றி பிரதிசெட்டுகள், காய்களுடன், சேவைகள் மற்றும் பல.);
  6. மிக முக்கியமானது:
    1. Kubernetes API க்கு தேவையான அனைத்தையும் உருவாக்க அழைக்கிறது (மீண்டும், அதன் சொந்தம் பிரதிசெட்டுகள், காய்களுடன், சேவைகள்...),
    2. சில மேஜிக்கைச் செய்கிறது (எளிமைப்படுத்த, ஆபரேட்டர் காய்களுக்குள் சென்று கட்டளைகளை அழைப்பதாக நீங்கள் நினைக்கலாம், எடுத்துக்காட்டாக, ஒரு கிளஸ்டரில் சேர அல்லது பதிப்பைப் புதுப்பிக்கும்போது தரவு வடிவமைப்பை மேம்படுத்த).

குபெர்னெட்டிற்கான ஆபரேட்டர்கள்: ஸ்டேட்ஃபுல் அப்ளிகேஷன்களை எப்படி இயக்குவது
உண்மையில், படத்தில் இருந்து பார்க்க முடிந்தால், குபெர்னெட்டஸில் ஒரு தனி பயன்பாடு சேர்க்கப்பட்டது (வழக்கமானது பயன்படுத்தல் с பிரதிசெட்), இது ஆபரேட்டர் என்று அழைக்கப்படுகிறது. இது ஒரு சாதாரண நெற்றுக்குள் வாழ்கிறது (பொதுவாக ஒன்று மட்டுமே) மற்றும், ஒரு விதியாக, அதற்கு மட்டுமே பொறுப்பு நேம்பேஸ். இந்த ஆபரேட்டர் பயன்பாடு அதன் API ஐ செயல்படுத்துகிறது - நேரடியாக இல்லாவிட்டாலும், ஆனால் அதன் மூலம் மூன்றாம் தரப்பு வளங்கள் குபெர்னெட்டஸில்.

இவ்வாறு, நாம் உருவாக்கிய பிறகு நேம்பேஸ் ஆபரேட்டர், நாம் அதை சேர்க்கலாம் மூன்றாம் தரப்பு வளங்கள்.

முதலியன உதாரணம் (விவரங்களுக்கு கீழே பார்க்கவும்):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

மீள் தேடலுக்கான எடுத்துக்காட்டு:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

ஆபரேட்டர்களுக்கான தேவைகள்

CoreOS ஆபரேட்டர்களில் பணிபுரியும் போது பொறியாளர்களால் பெறப்பட்ட முக்கிய வடிவங்களை உருவாக்கியது. அனைத்து ஆபரேட்டர்களும் தனிப்பட்டவர்கள் (அதன் சொந்த பண்புகள் மற்றும் தேவைகளுடன் ஒரு குறிப்பிட்ட பயன்பாட்டிற்காக உருவாக்கப்பட்டது) என்ற போதிலும், அவர்களின் உருவாக்கம் பின்வரும் தேவைகளை விதிக்கும் ஒரு வகையான கட்டமைப்பின் அடிப்படையில் இருக்க வேண்டும்:

  1. ஒற்றை மூலம் நிறுவல் செய்யப்பட வேண்டும் பயன்படுத்தல்: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - மற்றும் கூடுதல் செயல்கள் தேவையில்லை.
  2. Kubernetes இல் ஒரு ஆபரேட்டரை நிறுவும் போது, ​​ஒரு புதிய மூன்றாம் தரப்பு வகை உருவாக்கப்பட வேண்டும் (மூன்றாம் தரப்பு வளம்). பயன்பாட்டு நிகழ்வுகளை (கிளஸ்டர் நிகழ்வுகள்) தொடங்க மற்றும் அவற்றை மேலும் நிர்வகிக்க (பதிப்புகளைப் புதுப்பித்தல், மறுஅளவிடுதல் போன்றவை), பயனர் இந்த வகையைப் பயன்படுத்துவார்.
  3. முடிந்தவரை, குபெர்னெட்ஸில் கட்டமைக்கப்பட்ட பழமையானவற்றை நீங்கள் பயன்படுத்த வேண்டும் சேவைகள் и பிரதிசெட்டுகள்நன்கு சோதிக்கப்பட்ட மற்றும் புரிந்துகொள்ளக்கூடிய குறியீட்டைப் பயன்படுத்தவும்.
  4. ஆபரேட்டர்களின் பின்தங்கிய இணக்கத்தன்மை மற்றும் பயனர் உருவாக்கிய ஆதாரங்களின் பழைய பதிப்புகளுக்கான ஆதரவு தேவை.
  5. ஆபரேட்டர் அகற்றப்பட்டால், பயன்பாடு மாறாமல் தொடர்ந்து செயல்பட வேண்டும்.
  6. பயனர்கள் விரும்பிய பயன்பாட்டுப் பதிப்பை வரையறுக்க முடியும் மற்றும் பயன்பாட்டு பதிப்பு புதுப்பிப்புகளை ஒழுங்கமைக்க முடியும். மென்பொருள் புதுப்பிப்புகள் இல்லாதது செயல்பாட்டு மற்றும் பாதுகாப்பு சிக்கல்களின் பொதுவான ஆதாரமாகும், எனவே ஆபரேட்டர்கள் இந்த விஷயத்தில் பயனர்களுக்கு உதவ வேண்டும்.
  7. கேயாஸ் குரங்கு போன்ற ஒரு கருவி மூலம் ஆபரேட்டர்கள் சோதிக்கப்பட வேண்டும், இது காய்கள், உள்ளமைவுகள் மற்றும் நெட்வொர்க்கில் சாத்தியமான தோல்விகளை அடையாளம் காட்டுகிறது.

etcd ஆபரேட்டர்

ஆபரேட்டர் அமலாக்க எடுத்துக்காட்டு - etcd ஆபரேட்டர், தயார் இந்த கருத்து அறிவிக்கப்பட்ட நாளில். கோரத்தை பராமரிக்க வேண்டிய அவசியம், கிளஸ்டர் உறுப்பினர்களை மறுகட்டமைக்க வேண்டிய அவசியம், காப்புப்பிரதிகளை உருவாக்குதல் போன்றவற்றின் காரணமாக etcd கிளஸ்டர் உள்ளமைவு சிக்கலானதாக இருக்கலாம். எடுத்துக்காட்டாக, ஒரு etcd கிளஸ்டரை கைமுறையாக அளவிடுவது என்பது ஒரு புதிய கிளஸ்டர் உறுப்பினருக்கு DNS பெயரை உருவாக்க வேண்டும், புதிய etcd நிறுவனத்தைத் தொடங்க வேண்டும் மற்றும் புதிய உறுப்பினரைப் பற்றி கிளஸ்டருக்கு எச்சரிக்க வேண்டும் (etcdctl உறுப்பினர் சேர்க்க) ஆபரேட்டரைப் பொறுத்தவரை, பயனர் கிளஸ்டர் அளவை மட்டுமே மாற்ற வேண்டும் - மற்ற அனைத்தும் தானாகவே நடக்கும்.

CoreOS இல் etcd உருவாக்கப்பட்டதால், அதன் ஆபரேட்டர் முதலில் தோன்றுவதைப் பார்ப்பது மிகவும் தர்க்கரீதியானது. அவர் எப்படி வேலை செய்கிறார்? ஆபரேட்டர் லாஜிக் போன்றவை மூன்று கூறுகளால் தீர்மானிக்கப்படுகிறது:

  1. கவனிக்கவும். Kubernetes API ஐப் பயன்படுத்தி கிளஸ்டரின் நிலையை இயக்குபவர் கண்காணிக்கிறார்.
  2. பகுப்பாய்வு. தற்போதைய நிலைக்கும் விரும்பிய நிலைக்கும் இடையே உள்ள வேறுபாடுகளைக் கண்டறியும் (பயனர் உள்ளமைவால் வரையறுக்கப்படுகிறது).
  3. செயல். etcd மற்றும்/அல்லது Kubernetes சேவை APIகளைப் பயன்படுத்தி கண்டறியப்பட்ட வேறுபாடுகளைத் தீர்க்கிறது.

குபெர்னெட்டிற்கான ஆபரேட்டர்கள்: ஸ்டேட்ஃபுல் அப்ளிகேஷன்களை எப்படி இயக்குவது

இந்த தர்க்கத்தை செயல்படுத்த, ஆபரேட்டரில் செயல்பாடுகள் தயார் செய்யப்பட்டுள்ளன உருவாக்கவும்/அழிக்கவும் (etcd கிளஸ்டர் உறுப்பினர்களை உருவாக்குதல் மற்றும் நீக்குதல்) மற்றும் அளவை (கிளஸ்டர் உறுப்பினர்களின் எண்ணிக்கையில் மாற்றம்). அதன் செயல்பாட்டின் சரியான தன்மை Netflix இலிருந்து கேயாஸ் குரங்கு போல உருவாக்கப்பட்ட பயன்பாட்டைப் பயன்படுத்தி சரிபார்க்கப்பட்டது, அதாவது. தற்செயலாக etcd காய்களை கொல்கிறது.

etcd இன் முழு செயல்பாட்டிற்கு, ஆபரேட்டர் கூடுதல் அம்சங்களை வழங்குகிறது: காப்பு (தானாக மற்றும் பயனர்களுக்குக் கண்ணுக்குத் தெரியாத காப்பு பிரதிகளை உருவாக்குதல் - கட்டமைப்பில் அவற்றை எவ்வளவு அடிக்கடி உருவாக்குவது மற்றும் எத்தனை சேமிப்பது - மற்றும் அவற்றிலிருந்து தரவைத் தொடர்ந்து மீட்டமைத்தல்) மற்றும் மேம்படுத்தல் (வேலையில்லாமலேயே etcd நிறுவல்களைப் புதுப்பித்தல்).

ஒரு ஆபரேட்டருடன் பணிபுரிவது எப்படி இருக்கும்?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

etcd ஆபரேட்டரின் தற்போதைய நிலை பீட்டா பதிப்பாகும், இது இயங்குவதற்கு Kubernetes 1.5.3+ மற்றும் etcd 3.0+ தேவைப்படுகிறது. மூல குறியீடு மற்றும் ஆவணங்கள் (பயன்பாட்டிற்கான வழிமுறைகள் உட்பட) கிடைக்கின்றன மகிழ்ச்சியா.

CoreOS இலிருந்து மற்றொரு எடுத்துக்காட்டு செயல்படுத்தல் உருவாக்கப்பட்டது - ப்ரோமிதியஸ் ஆபரேட்டர், ஆனால் இது இன்னும் ஆல்பா பதிப்பில் உள்ளது (திட்டமிடப்பட்ட அனைத்து அம்சங்களும் செயல்படுத்தப்படவில்லை).

நிலை மற்றும் வாய்ப்புகள்

Kubernetes ஆபரேட்டர்கள் அறிவிக்கப்பட்டு 5 மாதங்கள் கடந்துவிட்டன. அதிகாரப்பூர்வ CoreOS களஞ்சியத்தில் ( etcd மற்றும் Prometheus க்கு) இன்னும் இரண்டு செயலாக்கங்கள் மட்டுமே உள்ளன. இருவரும் இன்னும் தங்கள் நிலையான பதிப்புகளை அடையவில்லை, ஆனால் தினசரி அடிப்படையில் உறுதிகள் கடைபிடிக்கப்படுகின்றன.

டெவலப்பர்கள் "பயனர்கள் தங்கள் குபெர்னெட்டஸ் கிளஸ்டர்களில் Postgres Operators, Cassandra ஆபரேட்டர்கள் அல்லது Redis ஆபரேட்டர்களை நிறுவும் எதிர்காலம் மற்றும் நிலையற்ற வலை பயன்பாடுகளின் பிரதிகளை வரிசைப்படுத்துவது போல் எளிதாக இந்த பயன்பாடுகளின் அளவிடக்கூடிய நிறுவனங்களுடன் பணிபுரியும் எதிர்காலம்" என்று கருதுகின்றனர். முதலில் மூன்றாம் தரப்பு டெவலப்பர்களிடமிருந்து ஆபரேட்டர்கள் உண்மையில் தோன்ற ஆரம்பித்தது:

பிப்ரவரி 2017 இல் பிரஸ்ஸல்ஸில் நடந்த மிகப்பெரிய ஐரோப்பிய இலவச மென்பொருள் மாநாட்டில் FOSDEM இல், CoreOS இன் ஜோஷ் வூட் ஆபரேட்டர்களை அறிவித்தார். அறிக்கை (இணைப்பில் ஒரு வீடியோ உள்ளது!), இது பரந்த திறந்த மூல சமூகத்தில் இந்த கருத்தின் பிரபலத்தின் வளர்ச்சிக்கு பங்களிக்க வேண்டும்.

சோசலிஸ்ட் கட்சி கட்டுரையில் உங்கள் ஆர்வத்திற்கு நன்றி! எங்கள் மையத்திற்கு குழுசேரவும், DevOps மற்றும் GNU/Linux சிஸ்டம் நிர்வாகத்தில் புதிய பொருட்கள் மற்றும் சமையல் குறிப்புகளை தவறவிடாமல் இருக்க - நாங்கள் அவற்றை தொடர்ந்து வெளியிடுவோம்!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்