Gweithredwr Kubernetes yn Python heb fframweithiau a SDK
Ar hyn o bryd mae gan Go fonopoli ar yr ieithoedd rhaglennu y mae pobl yn eu dewis i ysgrifennu datganiadau ar gyfer Kubernetes. Mae rhesymau gwrthrychol am hyn, megis:
Mae fframwaith pwerus ar gyfer datblygu gweithredwyr yn Go - Gweithredwr SDK.
Mae cymwysiadau sy'n newid gemau fel Docker a Kubernetes wedi'u hysgrifennu yn Go. Mae ysgrifennu eich gweithredwr yn Go yn golygu siarad yr un iaith Γ’'r ecosystem.
Perfformiad uchel o geisiadau Go ac offer syml ar gyfer gweithio gyda concurrency allan o'r bocs.
NB: Gyda llaw, sut i ysgrifennu eich datganiad eich hun yn Go, ni a ddisgrifiwyd eisoes yn un o'n cyfieithiadau gan awduron tramor.
Ond beth os cewch eich rhwystro rhag dysgu Ewch oherwydd diffyg amser neu, yn syml, cymhelliant? Mae'r erthygl yn rhoi enghraifft o sut y gallwch chi ysgrifennu datganiad da gan ddefnyddio un o'r ieithoedd mwyaf poblogaidd y mae bron pob peiriannydd DevOps yn ei wybod - Python.
Cyfarfod: CopΓ―wr - gweithredwr copi!
Er enghraifft, ystyriwch ddatblygu datganiad syml wedi'i gynllunio i gopΓ―o ConfigMap naill ai pan fydd gofod enw newydd yn ymddangos neu pan fydd un o ddau endid yn newid: ConfigMap a Secret. O safbwynt ymarferol, gall y gweithredwr fod yn ddefnyddiol ar gyfer diweddaru ffurfweddiadau cymwysiadau mewn swmp (trwy ddiweddaru'r ConfigMap) neu ar gyfer diweddaru data cyfrinachol - er enghraifft, allweddi ar gyfer gweithio gyda Chofrestrfa Docker (wrth ychwanegu Secret i'r gofod enw).
Felly, beth ddylai fod gan weithredwr da:
Cyflawnir rhyngweithio Γ’'r gweithredwr gan ddefnyddio Diffiniadau Adnoddau Personol (cyfeirir ato o hyn ymlaen fel CRD).
Gellir ffurfweddu'r gweithredwr. I wneud hyn, byddwn yn defnyddio baneri llinell orchymyn a newidynnau amgylchedd.
Mae adeiladu'r cynhwysydd Docker a siart Helm wedi'i gynllunio fel y gall defnyddwyr yn hawdd (yn llythrennol gydag un gorchymyn) osod y gweithredwr yn eu clwstwr Kubernetes.
CRD
Er mwyn i'r gweithredwr wybod pa adnoddau i chwilio amdanynt a ble i edrych, mae angen inni osod rheol ar ei gyfer. Bydd pob rheol yn cael ei chynrychioli fel un gwrthrych CRD. Pa feysydd ddylai fod gan y CRD hwn?
Math o adnodd, y byddwn yn edrych amdano (ConfigMap neu Secret).
Rhestr o ofodau enwau, y dylid lleoli'r adnoddau ynddo.
Dewisydd, lle byddwn yn chwilio am adnoddau yn y gofod enwau.
Barod! Nawr mae angen i ni rywsut gael gwybodaeth am ein rheol. Gadewch imi archebu ar unwaith na fyddwn yn ysgrifennu ceisiadau at y Gweinydd API clwstwr ein hunain. I wneud hyn, byddwn yn defnyddio llyfrgell Python parod kubernetes-cleient:
import kubernetes
from contextlib import suppress
CRD_GROUP = 'flant.com'
CRD_VERSION = 'v1'
CRD_PLURAL = 'copyrators'
def load_crd(namespace, name):
client = kubernetes.client.ApiClient()
custom_api = kubernetes.client.CustomObjectsApi(client)
with suppress(kubernetes.client.api_client.ApiException):
crd = custom_api.get_namespaced_custom_object(
CRD_GROUP,
CRD_VERSION,
namespace,
CRD_PLURAL,
name,
)
return {x: crd[x] for x in ('ruleType', 'selector', 'namespace')}
O ganlyniad i redeg y cod hwn, rydym yn cael y canlynol:
Gwych: llwyddasom i gael rheol i'r gweithredwr. Ac yn bwysicaf oll, gwnaethom yr hyn a elwir yn ffordd Kubernetes.
Newidynnau amgylcheddol neu fflagiau? Rydym yn cymryd popeth!
Gadewch i ni symud ymlaen i gyfluniad y prif weithredwr. Mae dau ddull sylfaenol o ffurfweddu cymwysiadau:
defnyddio opsiynau llinell orchymyn;
defnyddio newidynnau amgylchedd.
Mae opsiynau llinell orchymyn yn caniatΓ‘u ichi ddarllen gosodiadau'n fwy hyblyg, gyda chefnogaeth a dilysiad math o ddata. Mae gan lyfrgell safonol Python fodiwl argparser, y byddwn yn ei ddefnyddio. Mae manylion ac enghreifftiau o'i alluoedd ar gael yn dogfennaeth swyddogol.
Yn ein hachos ni, dyma sut olwg fyddai ar enghraifft o sefydlu fflagiau llinell orchymyn darllen:
Ar y llaw arall, gan ddefnyddio newidynnau amgylchedd yn Kubernetes, gallwch chi drosglwyddo gwybodaeth gwasanaeth yn hawdd am y pod y tu mewn i'r cynhwysydd. Er enghraifft, gallwn gael gwybodaeth am y gofod enw y mae'r pod yn rhedeg ynddo gyda'r lluniad canlynol:
Er mwyn deall sut i wahanu dulliau o weithio gyda ConfigMap a Secret, byddwn yn defnyddio mapiau arbennig. Yna gallwn ddeall pa ddulliau sydd eu hangen arnom i olrhain a chreu'r gwrthrych:
Mae'r prif resymeg yn barod! Nawr mae angen i ni becynnu hyn i gyd mewn un pecyn Python. Rydym yn paratoi'r ffeil setup.py, ysgrifennwch feta gwybodaeth am y prosiect yno:
from sys import version_info
from setuptools import find_packages, setup
if version_info[:2] < (3, 5):
raise RuntimeError(
'Unsupported python version %s.' % '.'.join(version_info)
)
_NAME = 'copyrator'
setup(
name=_NAME,
version='0.0.1',
packages=find_packages(),
classifiers=[
'Development Status :: 3 - Alpha',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
],
author='Flant',
author_email='[email protected]',
include_package_data=True,
install_requires=[
'kubernetes==9.0.0',
],
entry_points={
'console_scripts': [
'{0} = {0}.cli:main'.format(_NAME),
]
}
)
NB: Mae gan y cleient kubernetes ar gyfer Python ei fersiwn ei hun. Gellir dod o hyd i ragor o wybodaeth am gydnawsedd rhwng fersiynau cleientiaid a fersiynau Kubernetes yn matricsau cydnawsedd.
Bydd y Dockerfile yn hynod o syml: cymerwch y ddelwedd python-alpaidd sylfaenol a gosodwch ein pecyn. Gadewch i ni ohirio ei optimeiddio tan amseroedd gwell:
FROM python:3.7.3-alpine3.9
ADD . /app
RUN pip3 install /app
ENTRYPOINT ["copyrator"]
Mae lleoli ar gyfer y gweithredwr hefyd yn syml iawn:
Dyna sut, heb ofn, gwaradwydd, neu ddysgu Go, roeddem yn gallu adeiladu ein gweithredwr ein hunain ar gyfer Kubernetes yn Python. Wrth gwrs, mae ganddo le i dyfu o hyd: yn y dyfodol bydd yn gallu prosesu rheolau lluosog, gweithio mewn edafedd lluosog, monitro newidiadau yn ei CRDs yn annibynnol ...
Er mwyn rhoi golwg agosach i chi ar y cod, rydym wedi ei roi i mewn ystorfa gyhoeddus. Os ydych chi eisiau enghreifftiau o weithredwyr mwy difrifol yn cael eu gweithredu gan ddefnyddio Python, gallwch chi droi eich sylw at ddau weithredwr ar gyfer defnyddio mongodb (ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ 2).
PS Ac os ydych chi'n rhy ddiog i ddelio Γ’ digwyddiadau Kubernetes neu os ydych chi'n fwy cyfarwydd Γ’ defnyddio Bash, mae ein cydweithwyr wedi paratoi datrysiad parod ar y ffurf cregyn-weithredwr (Ni cyhoeddi ei fod yn Ebrill).