Ke sa tsoa ngola
Semelo sa potso ke sena: ka nako e 'ngoe ho ne ho e-na le morero o le mong, qalong e ne e le monolith e nyenyane e nang le lisebelisoa le li-scripts, empa ha nako e ntse e ea e ile ea hōla, ea aroloa ka litšebeletso, tse ileng tsa qala ho aroloa ka li-microservices, le yaba e nyolohile. Qalong, sena sohle se ne se etsoa ka VPS e se nang letho, lits'ebetso tsa ho theha le ho tsamaisa khoutu eo ho eona ho neng ho sebelisoa Ansible, 'me tšebeletso e' ngoe le e 'ngoe e ne e hlophisitsoe ka tlhophiso ea YAML e nang le litlhophiso le linotlolo tse hlokahalang, mme faele e tšoanang ea config e ne e sebelisetsoa. ho qalisoa ha lehae, ho neng ho le bonolo haholo, hobane .k tlhophiso ena e kentsoe nthong ea lefats'e, e fumanehang ho tsoa kae kapa kae morerong.
Leha ho le joalo, kholo ea palo ea li-microservices, likhokahano tsa tsona, le
Tabeng ena, mochine oa ho haha ntho e hlophisitsoeng o ile oa fetoloa hore o khone ho sebetsa ka bobeli ka faele ea rona ea khale ea config le ka liphiri tse tsoang Kuber. Sebopeho se thata haholoanyane se ile sa hlalosoa, ka puo ea Python ea boraro, ka tsela e latelang:
Dict[str, Dict[str, Union[str, int, float]]
Ke hore, cogfig ea ho qetela ke dikishinari e nang le likarolo tse bitsoang, e 'ngoe le e' ngoe e le buka e hlalosang mantsoe e nang le litekanyetso tse tsoang mefuteng e bonolo. 'Me likarolo li hlalosa tlhophiso le phihlello ea lisebelisoa tsa mofuta o itseng. Mohlala oa karolo ea config ea rona:
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"
Ka nako e tšoanang, tšimo engine
li-database li ka kenngoa ho SQLite, le redis
set to mock
, e hlalosang hape lebitso la faele e lokelang ho bolokoa - litekanyo tsena li tsejoa ka nepo le ho sebetsoa, e leng se etsang hore ho be bonolo ho tsamaisa khoutu sebakeng sa heno bakeng sa ho lokisa liphoso, tlhahlobo ea yuniti le litlhoko tse ling. Sena ke sa bohlokoa haholo ho rona hobane ho na le litlhoko tse ling tse ngata - karolo ea khoutu ea rona e etselitsoe lipalo tse fapaneng tsa tlhahlobo, ha e sebetse feela ho li-server tse nang le orchestration, empa hape le ka lingoloa tse fapaneng, le likhomphutha tsa bahlahlobisisi ba lokelang ho sebetsa. le ho lokisa lipeipi tse rarahaneng tsa ts'ebetso ea data ntle le ho tšoenyeha ka litaba tsa morao-rao. Ka tsela, ho ne ho ke ke ha utloisa bohloko ho arolelana hore lisebelisoa tsa rona tsa mantlha, ho kenyeletsoa le khoutu ea sebopeho sa config, li kentsoe ka setup.py
– mmoho sena se kopanya khoutu ya rona hore e be ecosystem e le nngwe, e ikemetseng ho sethala le mokgwa wa tshebediso.
Tlhaloso ea Kubernetes pod e shebahala tjena:
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
Ke hore, sephiri ka seng se hlalosa karolo e le 'ngoe. Liphiri ka botsona li entsoe ka tsela ena:
apiVersion: v1
kind: Secret
metadata:
name: db-main-secret
type: Opaque
stringData:
db_main.yaml: |
engine: sqlite
filename: main.sqlite3
Ka kopanelo sena se fella ka ho theoa ha lifaele tsa YAML tseleng /etc/secrets/db-main/section_name.yaml
'Me bakeng sa ho qalisoa ha lehae, ho sebelisoa config, e fumanehang mohloling oa motso oa morero kapa tseleng e boletsoeng ho feto-fetoha ha tikoloho. Khoutu e ikarabellang bakeng sa boiketlo bona e ka bonoa ho mofosi.
config.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()
Monahano o bonolo haholo: re kopanya li-configs tse kholo ho tsoa bukeng ea projeke le litsela ka ho feto-fetoha ha tikoloho, le likarolo tse nyane tsa tlhophiso ho tsoa liphiring tsa Kuber, ebe re li lokisa hanyane. Le tse ling tse fapaneng. Kea hlokomela hore ha u batla lifaele ho tloha liphiring, ho sebelisoa moeli o tebileng, hobane K8s e etsa folda e patiloeng sephiring se seng le se seng moo liphiri ka botsona li bolokiloeng teng, 'me sehokelo feela se fumaneha boemong bo phahameng.
Ke tšepa hore se hlalositsoeng se tla ba molemo ho motho e mong :) Maikutlo le litlhahiso leha e le life mabapi le tšireletso kapa libaka tse ling tsa ntlafatso li amoheloa. Maikutlo a sechaba a boetse a thahasellisa, mohlomong ho bohlokoa ho eketsa tšehetso bakeng sa ConfigMaps (morero oa rona ha o e-so e sebelise) le ho phatlalatsa khoutu ho GitHub / PyPI? Ka bonna, ke nahana hore lintho tse joalo ke tsa motho ka mong hore merero e ke ke ea e-ba teng hohle, 'me ke sheba hanyenyane ts'ebetsong ea batho ba bang, joalo ka e fanoeng mona, le puisano ea li-nuances, malebela le mekhoa e metle, eo ke tšepang ho e bona litlhalosong. , ho lekane 😉
Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong.
Na ke lokela ho phatlalatsa joalo ka morero/laeborari?
-
0,0%Ee, nka sebelisa /contribution0
-
33,3%E, hoo ho utloahala ho le monate4
-
41,7%Che, ke mang ea lokelang ho e etsa ka bobona ka mokhoa oa bona le ho lumellana le litlhoko tsa bona5
-
25,0%Ke tla ithiba ho araba3
Basebelisi ba 12 ba ile ba khetha. Basebelisi ba 3 ba hanne.
Source: www.habr.com