Codsiyada beddela ciyaarta sida Docker iyo Kubernetes waxay ku qoran yihiin Go. Ku qoritaanka hawl wadeenkaaga Go waxay la macno tahay inaad isla luqad kula hadasho nidaamka deegaanka.
Waxqabadka sare ee codsiyada Go iyo aaladaha fudud ee la shaqaynta isdhaafsiga ee sanduuqa.
NBBy the way, sida loo qoro bayaan adiga kuu gaar ah in Go, annagu hore u tilmaamay mid ka mid ah turjumaadayada ay qoreen qorayaasha ajnabiga ah.
Laakiin ka waran haddii lagaa ilaaliyo inaad wax barato Go waqti la'aan ama, si fudud loo dhigo, dhiirigelin? Maqaalku wuxuu bixiyaa tusaale sida aad u qori karto bayaan wanaagsan adoo isticmaalaya mid ka mid ah luqadaha ugu caansan ee ku dhawaad ββββinjineer kasta oo DevOps ah uu yaqaan - Python.
La kulan: Copier - koobi wadayaasha!
Tusaale ahaan, ka fiirso horumarinta qoraal fudud oo loogu talagalay in lagu koobiyo ConfigMap marka magac cusubi soo baxo ama marka labada hay'adood midkood isbeddelo: ConfigMap iyo Secret. Marka laga eego aragtida dhabta ah, hawlwadeenku wuxuu faa'iido u yeelan karaa cusboonaysiinta guud ee habaynta codsiyada (adigoo cusboonaysiinaya ConfigMap) ama cusboonaysiinta xogta sirta ah - tusaale ahaan, furayaasha la shaqaynta Diiwaanka Docker (marka lagu daro siraha magaca).
Sidaas waxa uu leeyahay hawlwadeenka wanaagsan:
Isdhexgalka lala yeesho hawlwadeenka waxaa lagu fuliyaa iyadoo la isticmaalayo Qeexitaannada Kheyraadka Gaarka ah (kadibna loo yaqaan CRD).
Hawlwadeenka waa la habayn karaa. Si tan loo sameeyo, waxaan isticmaali doonaa calanka khadka taliska iyo doorsoomayaasha deegaanka.
Dhismaha weelka Docker iyo jaantuska Helm waxaa loo qaabeeyey si ay isticmaalayaashu si fudud (macno ahaan hal amar wata) ugu rakibaan hawlwadeenka kutladooda Kubernetes.
CRD
Si uu hawlwadeenku u ogaado agabka uu raadinayo iyo halka uu eegayo, waxa aanu u baahanahay in aanu u dejino xeer. Xeer kastaa waxa loo metelayaa hal shay oo CRD ah. Goobahee waa in CRD-dan ay lahaataa?
Nooca kheyraadka, kaas oo aan raadin doono (ConfigMap ama Secret).
Liiska magacyada meelaha, kaas oo ay tahay in kheyraadku ku jiro.
Selector, kaas oo aan ku raadin doonno kheyraadka magaca goobta.
Diyaar! Hadda waxaan u baahanahay inaan si uun u helno macluumaadka ku saabsan xeerkeena. Aan isla markaaba ballan-qaado in aanan u qori doonin codsiyada kooxda API Server nafteena. Si tan loo sameeyo, waxaan isticmaali doonaa maktabad Python oo diyaarsan kubernetes-macmiil:
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')}
Natiijada socodsiinta koodkan, waxaanu helnaa kuwa soo socda:
Dhanka kale, adoo isticmaalaya doorsoomayaasha deegaanka ee Kubernetes, waxaad si fudud u wareejin kartaa macluumaadka adeega ee ku saabsan boodhka gudaha weelka. Tusaale ahaan, waxaan ka heli karnaa macluumaadka ku saabsan goobta magaceed ee boodhku ku socdo dhismaha soo socda:
Si loo fahmo sida loo kala saaro hababka loogu shaqeeyo ConfigMap iyo Secret, waxaan isticmaali doonaa maab gaar ah. Markaa waxaan fahmi karnaa hababka aan u baahanahay si aan ula socono oo aan u abuurno shayga:
Caqliga ugu weyn waa diyaar! Hadda waxaan u baahanahay inaan waxaas oo dhan ku xirno hal xirmo Python ah. Waxaan diyaarineynaa faylka setup.py, ku qor macluumaadka meta ee ku saabsan mashruuca halkaas:
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: Macmiilka kubernetes ee Python wuxuu leeyahay nuqul u gaar ah. Macluumaad dheeraad ah oo ku saabsan waafaqid ka dhexeeya noocyada macmiilka iyo noocyada Kubernetes ayaa laga heli karaa jaantusyada ku habboon.
Dockerfile-ku wuxuu noqon doonaa mid si cajiib ah u fudud: qaado sawirka hoose ee python-alpine oo ku rakib xirmadayada. Aynu dib u dhigno tayaynteeda ilaa waqtiyo ka wanaagsan:
FROM python:3.7.3-alpine3.9
ADD . /app
RUN pip3 install /app
ENTRYPOINT ["copyrator"]
Gelida hawlwadeenku sidoo kale aad buu u fudud yahay:
Taasi waa sida, annagoo aan cabsi, canaan, ama baran Go, waxaan awoodnay inaan u dhisno hawlwadeenkeena Kubernetes ee Python. Dabcan, wali waxay haysataa meel ay ku koraan: mustaqbalka waxay awoodi doontaa inay socodsiiso xeerar kala duwan, ka shaqeyso mawduucyo badan, si madax banaan ula socoto isbeddelada CRDs.
Si aan si dhow kuugu eegno koodka, waanu gelinay kaydka dadweynaha. Haddii aad rabto tusaalayaal hawl wadeenno ka sii daran oo la hirgeliyo iyadoo la adeegsanayo Python, waxaad u jeedin kartaa dareenkaaga laba hawl wadeen si loo geeyo mongodb (ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ labaad).
PS Oo haddii aad caajis u tahay inaad wax ka qabato dhacdooyinka Kubernetes ama aad si fudud u caadaysatay isticmaalka Bash, asxaabteena waxay diyaariyeen xal diyaar ah oo foomka ah. qolof-shaqaale (Anaga lagu dhawaaqay bishii April).