M dere na nso nso a
Ihe ndabere maka ajụjụ a bụ nke a: n'otu oge, e nwere otu ọrụ, na mbụ ọ bụ obere monolith na ihe eji eme ihe na ihe odide, ma ka oge na-aga, ọ na-eto eto, kewara n'ime ọrụ, nke n'aka nke ya malitere ikewa ya na microservices, na wee bulie elu. Na mbụ, a na-eme ihe niile na VPS efu, usoro nke ịtọlite na ntinye koodu nke ejiri ya mee ihe na-akpaghị aka, na-ejikọta ọrụ ọ bụla na YAML config na ntọala na igodo dị mkpa, na-eji faịlụ nhazi yiri ya. mmalite mpaghara, nke dị nnọọ mma, n'ihi na .k a na-ebunye nhazi a n'ime ihe zuru ụwa ọnụ, nke a na-enweta site na ebe ọ bụla na ọrụ ahụ.
Otú ọ dị, uto na ọnụ ọgụgụ nke microservices, njikọ ha, na
N'akụkụ a, a gbanwere usoro iji wuo ihe nhazi ka ị nwee ike iji faịlụ nhazi oge ochie yana ihe nzuzo sitere na Kuber rụọ ọrụ. A kọwakwara usoro nhazi siri ike karị, n'asụsụ Python nke atọ, dịka ndị a:
Dict[str, Dict[str, Union[str, int, float]]]
Ya bụ, cogfig ikpeazụ bụ akwụkwọ ọkọwa okwu nwere ngalaba aha, nke ọ bụla bụ akwụkwọ ọkọwa okwu nwere ụkpụrụ sitere na ụdị dị mfe. Na ngalaba na-akọwa nhazi na ịnweta akụrụngwa nke otu ụdị. Ọmụmaatụ nke mpempe nhazi anyị:
adminka:
django_secret: "ExtraLongAndHardCode"
db_main:
engine: mysql
host: 256.128.64.32
user: cool_user
password: "SuperHardPassword"
redis:
host: 256.128.64.32
pw: "SuperHardPassword"
port: 26379
smtp:
server: smtp.gmail.com
port: 465
email: [email protected]
pw: "SuperHardPassword"
N'otu oge ahụ, ubi engine
Enwere ike itinye ọdụ data na SQLite, yana redis
setịpụrụ na mock
, na-akọwapụtakwa aha faịlụ ahụ iji chekwaa - a na-amata paramita ndị a nke ọma ma hazie ya, nke na-eme ka ọ dị mfe ịme koodu na mpaghara maka nbipu, nyocha otu na mkpa ọ bụla ọzọ. Nke a dị anyị mkpa karịsịa n'ihi na enwere ọtụtụ mkpa ndị ọzọ - akụkụ nke koodu anyị bụ maka ngụkọ nyocha dị iche iche, ọ na-agba ọsọ ọ bụghị naanị na sava na orchesteration, kamakwa na edemede dị iche iche, yana na kọmputa nke ndị nyocha chọrọ ịrụ ọrụ site na ya. na debug mgbagwoju data nhazi pipeline na-enweghị nchegbu backend okwu. Site n'ụzọ, ọ gaghị ewute gị ịkekọrịta na etinyere na ngwaọrụ anyị bụ isi, gụnyere koodu nhazi nhazi setup.py
- ọnụ nke a na-ejikọta koodu anyị ka ọ bụrụ otu gburugburu ebe obibi, na-adabere na ikpo okwu na usoro eji eme ihe.
Nkọwa nke Kubernetes pod dị ka nke a:
containers:
- name : enter-api
image: enter-api:latest
ports:
- containerPort: 80
volumeMounts:
- name: db-main-secret-volume
mountPath: /etc/secrets/db-main
volumes:
- name: db-main-secret-volume
secret:
secretName: db-main-secret
Ya bụ, ihe nzuzo ọ bụla na-akọwa otu akụkụ. A na-emepụta ihe nzuzo n'onwe ha dị ka ndị a:
apiVersion: v1
kind: Secret
metadata:
name: db-main-secret
type: Opaque
stringData:
db_main.yaml: |
engine: sqlite
filename: main.sqlite3
Ọnụ nke a na-arụpụta imepụta faịlụ YAML n'akụkụ ụzọ ahụ /etc/secrets/db-main/section_name.yaml
Na maka mmalite mpaghara, a na-eji nhazi ahụ, nke dị na ndekọ mgbọrọgwụ nke ọrụ ahụ ma ọ bụ n'akụkụ ụzọ akọwapụtara na mgbanwe gburugburu ebe obibi. Enwere ike ịhụ koodu na-ahụ maka ịdị mma ndị a na onye na-emebi ihe.
nhazi.py
__author__ = 'AivanF'
__copyright__ = 'Copyright 2020, AivanF'
import os
import yaml
__all__ = ['config']
PROJECT_DIR = os.path.abspath(__file__ + 3 * '/..')
SECRETS_DIR = '/etc/secrets'
KEY_LOG = '_config_log'
KEY_DBG = 'debug'
def is_yes(value):
if isinstance(value, str):
value = value.lower()
if value in ('1', 'on', 'yes', 'true'):
return True
else:
if value in (1, True):
return True
return False
def update_config_part(config, key, data):
if key not in config:
config[key] = data
else:
config[key].update(data)
def parse_big_config(config, filename):
'''
Parse YAML config with multiple section
'''
if not os.path.isfile(filename):
return False
with open(filename) as f:
config_new = yaml.safe_load(f.read())
for key, data in config_new.items():
update_config_part(config, key, data)
config[KEY_LOG].append(filename)
return True
def parse_tiny_config(config, key, filename):
'''
Parse YAML config with a single section
'''
with open(filename) as f:
config_tiny = yaml.safe_load(f.read())
update_config_part(config, key, config_tiny)
config[KEY_LOG].append(filename)
def combine_config():
config = {
# To debug config load code
KEY_LOG: [],
# To debug other code
KEY_DBG: is_yes(os.environ.get('DEBUG')),
}
# For simple local runs
CONFIG_SIMPLE = os.path.join(PROJECT_DIR, 'config.yaml')
parse_big_config(config, CONFIG_SIMPLE)
# For container's tests
CONFIG_ENVVAR = os.environ.get('CONFIG')
if CONFIG_ENVVAR is not None:
if not parse_big_config(config, CONFIG_ENVVAR):
raise ValueError(
f'No config file from EnvVar:n'
f'{CONFIG_ENVVAR}'
)
# For K8s secrets
for path, dirs, files in os.walk(SECRETS_DIR):
depth = path[len(SECRETS_DIR):].count(os.sep)
if depth > 1:
continue
for file in files:
if file.endswith('.yaml'):
filename = os.path.join(path, file)
key = file.rsplit('.', 1)[0]
parse_tiny_config(config, key, filename)
return config
def build_config():
config = combine_config()
# Preprocess
for key, data in config.items():
if key.startswith('db_'):
if data['engine'] == 'sqlite':
data['filename'] = os.path.join(PROJECT_DIR, data['filename'])
# To verify correctness
if config[KEY_DBG]:
print(f'** Loaded config:n{yaml.dump(config)}')
else:
print(f'** Loaded config from: {config[KEY_LOG]}')
return config
config = build_config()
Echiche ebe a dị nnọọ mfe: anyị na-ejikọta nnukwu nhazi site na ndekọ ọrụ na ụzọ site na mgbanwe gburugburu ebe obibi, na obere akụkụ nhazi site na nzuzo Kuber, wee dozie ha ntakịrị. gbakwunyere ụfọdụ mgbanwe. Achọpụtara m na mgbe ị na-achọ faịlụ site na nzuzo, a na-eji njedebe omimi mee ihe, n'ihi na K8 na-emepụta nchekwa zoro ezo na nzuzo ọ bụla ebe a na-echekwa ihe nzuzo ahụ n'onwe ya, na naanị njikọ dị na ọkwa dị elu.
Enwere m olileanya na ihe akọwara ga-abara mmadụ uru :) A nabatara okwu ọ bụla na ndụmọdụ gbasara nchekwa ma ọ bụ mpaghara ndị ọzọ maka mmelite. Echiche ndị obodo na-atọkwa ụtọ, ikekwe ọ bara uru ịgbakwunye nkwado maka ConfigMaps (ọrụ anyị anaghị eji ha eme ihe) na ibipụta koodu na GitHub / PyPI? Onwe m, echere m na ihe ndị dị otú ahụ dị oke n'otu n'otu maka ọrụ ga-abụ eluigwe na ala, na ntakịrị peeking na mmejuputa ndị ọzọ, dị ka nke e nyere ebe a, na mkparịta ụka nke nuances, ndụmọdụ na omume kachasị mma, nke m na-atụ anya ịhụ na nkwupụta. , ezuola 😉
Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a.
Ekwesịrị m ibipụta dị ka oru ngo/ ọba akwụkwọ?
-
0,0%Ee, m ga-eji /contribution0
-
33,3%Ee, nke ahụ dị mma4
-
41,7%Mba, onye kwesịrị ime ya n'onwe ha n'ụdị nke ha na iji gboo mkpa ha5
-
25,0%M ga-ezere ịza3
Ndị ọrụ 12 tụrụ vootu. Ndị ọrụ 3 anabataghị.
isi: www.habr.com