Kubernetes Operator sa Python nga walay frameworks ug SDK
Ang Go sa pagkakaron adunay monopolyo sa mga programming language nga gipili sa mga tawo nga magsulat og mga pahayag para sa Kubernetes. Adunay mga katuyoan nga hinungdan niini, sama sa:
Adunay usa ka kusgan nga balangkas alang sa pagpalambo sa mga operator sa Go - Operator SDK.
Ang mga aplikasyon nga nagbag-o sa dula sama sa Docker ug Kubernetes gisulat sa Go. Ang pagsulat sa imong operator sa Go nagpasabot sa pagsulti sa samang pinulongan sa ekosistema.
Taas nga pasundayag sa mga aplikasyon sa Go ug yano nga mga himan alang sa pagtrabaho nga adunay panagsama nga wala sa kahon.
NB: By the way, unsaon pagsulat sa imong kaugalingong statement sa Go, kami gihulagway na sa usa sa among mga hubad sa langyaw nga mga awtor.
Apan komosta kon pugngan ka sa pagkat-on Lakaw tungod sa kakulang sa panahon o, sa yanong pagkasulti, kadasig? Naghatag ang artikulo og usa ka pananglitan kung giunsa nimo pagsulat ang usa ka maayong pahayag gamit ang usa sa labing inila nga mga sinultian nga nahibal-an sa halos matag engineer sa DevOps - Python.
Himamata: Copier - copy operator!
Isip usa ka pananglitan, ikonsiderar ang paghimo og usa ka yano nga pahayag nga gidisenyo aron kopyahon ang usa ka ConfigMap kung adunay usa ka bag-ong namespace nga makita o kung ang usa sa duha nga mga entidad mausab: ConfigMap ug Secret. Gikan sa usa ka praktikal nga punto sa panglantaw, ang operator mahimong mapuslanon alang sa kadaghanan nga pag-update sa mga configuration sa aplikasyon (pinaagi sa pag-update sa ConfigMap) o alang sa pag-update sa sekreto nga datos - pananglitan, mga yawe sa pagtrabaho uban sa Docker Registry (kon idugang ang Secret sa namespace).
Ug busa, kung unsa ang kinahanglan sa usa ka maayong operator:
Ang operator mahimong ma-configure. Aron mahimo kini, gamiton namon ang mga bandila sa command line ug mga variable sa palibot.
Ang paghimo sa Docker nga sudlanan ug Helm nga tsart kay gidesinyo aron ang mga tiggamit dali (sa literal nga adunay usa ka sugo) nga ma-install ang operator sa ilang Kubernetes cluster.
CRD
Aron mahibal-an sa operator kung unsang mga kapanguhaan ang pangitaon ug asa pangitaon, kinahanglan namon nga magbutang usa ka lagda alang kaniya. Ang matag lagda irepresentar isip usa ka butang nga CRD. Unsa nga mga natad ang kinahanglan adunay kini nga CRD?
Resource type, nga atong pangitaon (ConfigMap o Sekreto).
Listahan sa mga namespaces, diin kinahanglan mahimutang ang mga kahinguhaan.
Pagpili, diin kita mangita alang sa mga kapanguhaan sa namespace.
Ug ato kining mugnaon dayon yano nga lagda β sa pagpangita sa namespace nga adunay ngalan default tanan nga ConfigMap nga adunay mga label sama sa copyrator: "true":
Andam na! Karon kinahanglan namong makakuha og impormasyon bahin sa among lagda. Tugoti ako nga maghimo dayon og reserbasyon nga dili kami magsulat og mga hangyo sa cluster API Server sa among kaugalingon. Aron mahimo kini, mogamit kami usa ka andam nga librarya sa Python kubernetes-kliyente:
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')}
Isip resulta sa pagpadagan niini nga code, atong makuha ang mosunod:
Maayo: nakakuha kami usa ka lagda alang sa operator. Ug labaw sa tanan, gibuhat namo ang gitawag nga paagi sa Kubernetes.
Mga baryable sa palibot o mga bandera? Gikuha namo ang tanan!
Mopadayon kita sa nag-unang configuration sa operator. Adunay duha ka sukaranan nga mga pamaagi sa pag-configure sa mga aplikasyon:
gamita ang mga opsyon sa command line;
gamita ang environment variables.
Ang mga opsyon sa command line nagtugot kanimo sa pagbasa sa mga setting nga mas flexible, nga adunay suporta ug validation sa tipo sa data. Ang standard library sa Python adunay module argparser, nga atong gamiton. Ang mga detalye ug mga pananglitan sa mga kapabilidad niini anaa sa opisyal nga dokumentasyon.
Alang sa among kaso, kini ang hitsura sa usa ka pananglitan sa pag-set up sa mga flag sa command line sa pagbasa:
Sa laing bahin, gamit ang environment variables sa Kubernetes, dali nimo mabalhin ang impormasyon sa serbisyo bahin sa pod sulod sa sudlanan. Pananglitan, kita makakuha og impormasyon mahitungod sa namespace diin ang pod nagdagan uban sa mosunod nga pagtukod:
Aron masabtan kung giunsa ang pagbulag sa mga pamaagi sa pagtrabaho sa ConfigMap ug Secret, mogamit kami mga espesyal nga mapa. Dayon atong masabtan kung unsa nga mga pamaagi ang atong gikinahanglan sa pagsubay ug paghimo sa butang:
Ang panguna nga lohika andam na! Karon kinahanglan natong i-package kining tanan sa usa ka Python package. Giandam namon ang file setup.py, isulat ang meta nga impormasyon bahin sa proyekto didto:
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: Ang kubernetes nga kliyente alang sa Python adunay kaugalingong bersyon. Dugang nga impormasyon bahin sa pagkaangay tali sa mga bersyon sa kliyente ug mga bersyon sa Kubernetes makita sa compatibility matrices.
Ang Dockerfile mahimong labi ka yano: kuhaa ang base nga python-alpine nga imahe ug i-install ang among package. Atong i-postpone ang pag-optimize niini hangtod sa mas maayong mga panahon:
FROM python:3.7.3-alpine3.9
ADD . /app
RUN pip3 install /app
ENTRYPOINT ["copyrator"]
Ingon niana, sa walay kahadlok, pagsaway, o pagkat-on sa Go, nakahimo kami sa paghimo sa among kaugalingon nga operator alang sa Kubernetes sa Python. Siyempre, aduna pa kini'y lawak nga motubo: sa umaabot kini makahimo sa pagproseso sa daghang mga lagda, pagtrabaho sa daghang mga hilo, independente nga pagmonitor sa mga pagbag-o sa mga CRD niini...
Aron mahatagan ka ug dugang nga pagtan-aw sa code, among gibutang kini publiko nga repositoryo. Kung gusto nimo ang mga pananglitan sa labi ka seryoso nga mga operator nga gipatuman gamit ang Python, mahimo nimong ipunting ang imong atensyon sa duha nga mga operator alang sa pag-deploy sa mongodb (ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ang ikaduha).
PS Ug kung tapolan ka kaayo sa pag-atubang sa mga panghitabo sa Kubernetes o mas naanad ka sa paggamit sa Bash, ang among mga kauban nag-andam usa ka andam nga solusyon sa porma shell-operator (Kami gipahibalo niadtong Abril).