Kubernetes Operator hauv Python tsis muaj lub hauv paus thiab SDK
Mus tam sim no muaj kev ywj pheej ntawm cov lus programming tib neeg xaiv los sau nqe lus rau Kubernetes. Muaj cov laj thawj rau qhov no, xws li:
Muaj lub hauv paus muaj zog rau kev tsim cov neeg ua haujlwm hauv Go - OS SDK.
Kev hloov pauv kev ua si xws li Docker thiab Kubernetes tau sau rau hauv Go. Sau koj tus neeg teb xov tooj hauv Go txhais tau tias hais lus tib yam nrog lub ecosystem.
Kev ua haujlwm siab ntawm Go daim ntawv thov thiab cov cuab yeej yooj yim rau kev ua haujlwm nrog concurrency tawm ntawm lub thawv.
NB: Los ntawm txoj kev, yuav ua li cas sau koj tus kheej nqe lus hauv Go, peb twb piav nyob rau hauv ib qho ntawm peb translations los ntawm txawv teb chaws sau ntawv.
Tab sis yuav ua li cas yog tias koj raug tiv thaiv los ntawm kev kawm Mus los ntawm tsis muaj sij hawm los yog, yooj yim muab, kev txhawb siab? Cov kab lus muab ib qho piv txwv ntawm yuav ua li cas koj tuaj yeem sau cov lus zoo siv ib hom lus nrov tshaj plaws uas yuav luag txhua tus kws ua haujlwm DevOps paub - Nab hab sej.
Ntsib: Luam theej duab - tus neeg teb xov tooj!
Ua piv txwv, xav txog kev tsim cov lus yooj yim uas tsim los luam tawm ConfigMap txawm tias thaum lub npe tshiab tshwm sim lossis thaum ib qho ntawm ob lub koom haum hloov pauv: ConfigMap thiab zais cia. Los ntawm qhov ua tau zoo ntawm qhov pom, tus neeg teb xov tooj tuaj yeem muaj txiaj ntsig zoo rau kev hloov kho ntau ntawm daim ntawv thov teeb tsa (los ntawm kev hloov kho ConfigMap) lossis hloov kho cov ntaub ntawv zais cia - piv txwv li, cov yuam sij rau kev ua haujlwm nrog Docker Registry (thaum ntxiv zais zais rau lub npe chaw).
Thiab yog li ntawd, dab tsi tus neeg ua haujlwm zoo yuav tsum muaj:
Kev sib tham nrog tus neeg teb xov tooj yog ua los ntawm kev siv Custom Resource Txhais (tom qab no hu ua CRD).
Tus neeg teb xov tooj tuaj yeem teeb tsa. Txhawm rau ua qhov no, peb yuav siv cov kab hais kom ua kab chij thiab ib puag ncig hloov pauv.
Kev tsim ntawm Docker thawv thiab Helm daim ntawv yog tsim los kom cov neeg siv tau yooj yim (hais nrog ib qho lus txib) nruab tus neeg teb xov tooj rau hauv lawv cov Kubernetes pawg.
CRD
Yuav kom tus neeg teb xov tooj paub txog cov peev txheej twg los nrhiav thiab saib qhov twg, peb yuav tsum tau teeb tsa txoj cai rau nws. Txhua txoj cai yuav raug sawv cev ua ib qho khoom CRD. CRD no yuav tsum muaj dab tsi?
Hom kev pab, uas peb yuav nrhiav (ConfigMap lossis zais cia).
Daim ntawv teev npe, nyob rau hauv uas cov kev pab yuav tsum tau nyob.
Xaiv, los ntawm qhov uas peb yuav tshawb nrhiav cov peev txheej hauv lub npe.
Npaj txhij! Tam sim no peb yuav tsum tau txais cov ntaub ntawv hais txog peb txoj cai. Cia kuv ua qhov tshwj xeeb tam sim ntawd tias peb yuav tsis sau ntawv thov rau pawg API Server peb tus kheej. Ua li no, peb yuav siv lub tsev qiv ntawv Python npaj txhij kubernetes-neeg:
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')}
Raws li kev khiav qhov chaws no, peb tau txais cov hauv qab no:
Txhawm rau nkag siab yuav ua li cas cais txoj hauv kev ua haujlwm nrog ConfigMap thiab zais cia, peb yuav siv daim duab qhia tshwj xeeb. Tom qab ntawd peb tuaj yeem nkag siab txog cov txheej txheem uas peb xav tau los taug qab thiab tsim cov khoom:
Lub ntsiab logic yog npaj txhij! Tam sim no peb yuav tsum tau ntim tag nrho cov no rau hauv ib pob Python. Peb npaj cov ntaub ntawv setup.py, sau cov ntaub ntawv meta txog qhov project muaj:
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),
]
}
)
Dockerfile yuav yooj yim heev: nqa lub hauv paus python-alpine duab thiab nruab peb pob. Cia peb ncua nws qhov kev ua kom zoo kom txog thaum lub sijhawm zoo:
FROM python:3.7.3-alpine3.9
ADD . /app
RUN pip3 install /app
ENTRYPOINT ["copyrator"]
Kev xa mus rau tus neeg teb xov tooj kuj tseem yooj yim heev: