Operator Kubernetes ing Python tanpa kerangka lan SDK
Go saiki duwe monopoli ing basa pemrograman sing dipilih wong kanggo nulis pernyataan kanggo Kubernetes. Ana alasan objektif, kayata:
Ana kerangka kuat kanggo ngembangake operator ing Go - Operator SDK.
Aplikasi sing ngganti game kaya Docker lan Kubernetes ditulis ing Go. Nulis operator sampeyan ing Go tegese nganggo basa sing padha karo ekosistem.
Kinerja dhuwur saka aplikasi Go lan alat prasaja kanggo nggarap concurrency metu saka kothak.
NB: Miturut cara, carane nulis statement dhewe ing Go, kita wis diterangake ing salah sawijining terjemahan kita dening penulis asing.
Nanging apa yen sampeyan ora bisa sinau Go amarga ora duwe wektu utawa, kanthi gampang, motivasi? Artikel kasebut menehi conto carane sampeyan bisa nulis statement sing apik nggunakake salah sawijining basa sing paling populer sing meh kabeh insinyur DevOps ngerti - Python.
Meet: Copier - copy operator!
Contone, nimbang ngembangake statement prasaja sing dirancang kanggo nyalin ConfigMap nalika ana spasi jeneng anyar utawa nalika salah siji saka rong entitas diganti: ConfigMap lan Secret. Saka sudut pandang praktis, operator bisa migunani kanggo nganyari konfigurasi aplikasi kanthi akeh (kanthi nganyari ConfigMap) utawa kanggo nganyari data rahasia - contone, tombol kanggo nggarap Registry Docker (nalika nambahake Rahasia menyang ruang jeneng).
Operator bisa diatur. Kanggo nindakake iki, kita bakal nggunakake panji baris printah lan variabel lingkungan.
Pangwangunan wadhah Docker lan bagan Helm dirancang supaya pangguna bisa kanthi gampang (secara harfiah karo siji printah) nginstal operator menyang kluster Kubernetes.
CRD
Supaya operator ngerti apa sumber daya kanggo nggoleki lan ngendi kanggo katon, kita kudu nyetel aturan kanggo wong. Saben aturan bakal dituduhake minangka obyek CRD siji. Apa lapangan sing kudu diduweni CRD iki?
jinis sumber daya, sing bakal kita goleki (ConfigMap utawa Secret).
Dhaptar namespaces, ing ngendi sumber daya kudu dumunung.
Selector, sing bakal kita goleki sumber daya ing ruang jeneng.
Lan kita bakal nggawe langsung aturan sing gampang - kanggo nelusuri ing namespace karo jeneng default kabeh ConfigMap karo label kaya copyrator: "true":
Apik: kita bisa njaluk aturan kanggo operator. Lan sing paling penting, kita nindakake apa sing diarani cara Kubernetes.
Variabel lingkungan utawa gendera? We njupuk kabeh!
Ayo pindhah menyang konfigurasi operator utama. Ana rong pendekatan dhasar kanggo ngatur aplikasi:
nggunakake opsi baris printah;
nggunakake variabel lingkungan.
Opsi baris printah ngidini sampeyan maca setelan kanthi luwih fleksibel, kanthi dhukungan lan validasi jinis data. perpustakaan standar Python wis modul argparser, sing bakal kita gunakake. Rincian lan conto kemampuane kasedhiya ing dokumentasi resmi.
Kanggo kasus kita, iki minangka conto nyetel panji baris perintah maca:
Ing sisih liya, nggunakake variabel lingkungan ing Kubernetes, sampeyan bisa kanthi gampang nransfer informasi layanan babagan pod ing wadhah kasebut. Contone, kita bisa entuk informasi babagan ruang jeneng ing ngendi pod mlaku kanthi konstruksi ing ngisor iki:
Kanggo mangerteni carane misahake cara kanggo nggarap ConfigMap lan Secret, kita bakal nggunakake peta khusus. Banjur kita bisa ngerti cara apa sing kudu dilacak lan nggawe obyek kasebut:
Logika utama wis siyap! Saiki kita kudu ngemas kabeh iki dadi siji paket Python. Kita nyiapake file setup.py, tulis informasi meta babagan proyek ing kana:
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: Klien kubernetes kanggo Python duwe versi dhewe. Informasi liyane babagan kompatibilitas antarane versi klien lan versi Kubernetes bisa ditemokake ing matriks kompatibilitas.
Mangkono, tanpa wedi, cela, utawa sinau Go, kita bisa mbangun operator dhewe kanggo Kubernetes ing Python. Mesthi wae, isih duwe ruang kanggo tuwuh: ing mangsa ngarep bakal bisa ngolah pirang-pirang aturan, bisa digunakake ing pirang-pirang utas, kanthi mandiri ngawasi owah-owahan ing CRDs ...
PS Lan yen sampeyan kesed kanggo ngatasi acara Kubernetes utawa sampeyan mung luwih biasa nggunakake Bash, kanca-kanca wis nyiapake solusi sing wis siap ing wangun cangkang-operator (We diumumake ing April).