No tata nei ahau i tuhi
Ko te papamuri o te patai ko tenei: i tetahi wa kotahi te kaupapa, i te tuatahi he monolith iti me nga taputapu me nga tuhinga, engari i te wa ka tipu, ka wehewehea ki nga ratonga, katahi ka timata te wehewehe ki nga ratonga miihini, a katahi ka piki ake. I te tuatahi, i mahia enei mea katoa i runga i te VPS kore, ko nga tikanga mo te whakatuu me te tuku i nga waehere i mahia aunoa ma te whakamahi i te Ansible, a ko ia ratonga i whakahiatohia me te whirihora YAML me nga tautuhinga me nga taviri e tika ana, me te konae whirihora rite i whakamahia mo Ko nga whakarewatanga o te rohe, he tino watea, na te mea .k ka utaina tenei whirihora ki tetahi mea o te ao, ka uru mai i nga waahi katoa o te kaupapa.
Engari, ko te tipu o te maha o nga ratonga miihini, o raatau hononga, me
I runga i tenei whakaaro, i whakarereketia te tikanga mo te hanga ahanoa whirihoranga kia taea ai te mahi tahi me ta maatau konae whirihora matarohia me nga mea ngaro mai i a Kuber. I tohua ano he hanganga whirihora pakari ake, i roto i te reo o te Python tuatoru, penei:
Dict[str, Dict[str, Union[str, int, float]]]
Arā, ko te cogfig whakamutunga he papakupu me nga waahanga kua whakaingoatia, ko ia he papakupu me nga uara mai i nga momo ngawari. A ko nga waahanga e whakaatu ana i te whirihoranga me te uru ki nga rauemi o tetahi momo. He tauira o tetahi waahanga o ta maatau whirihora:
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"
I te wa ano, ko te mara engine
Ka taea te whakauru i nga papaunga raraunga ki SQLite, me redis
whakaturia ki mock
, me te tohu ano i te ingoa o te konae hei tiaki - ka mohiohia, ka tukatukahia enei tawhā, he mea ngawari ki te whakahaere i te waehere ki te rohe mo te patuiro, whakamatautau wae me etahi atu hiahia. He mea tino nui tenei mo matou na te mea he maha atu nga hiahia - ko tetahi waahanga o ta matou waehere he mea mo nga momo tatauranga tātari, ka rere i runga i nga kaitoro me nga mahi whakahiato, engari me nga momo tuhinga, me nga rorohiko a nga kaitātari e hiahia ana ki te mahi. me te patuiro i nga paipa tukatuka raraunga matatini me te kore e awangawanga i nga take o muri. Ma te ara, kaore he kino ki te whakapuaki ko o maatau taputapu matua, tae atu ki te waehere whakatakotoranga whirihora, kua whakauruhia ma setup.py
– ka whakakotahi tenei i to tatou waehere ki te puunaha rauwiringa kaiao kotahi, motuhake i te turanga me te tikanga whakamahi.
Ko te whakaahuatanga o te Pod Kubernetes penei te ahua:
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
Arā, ko ia mea ngaro e whakaatu ana i tetahi waahanga. Ko nga mea ngaro ano i hangaia penei:
apiVersion: v1
kind: Secret
metadata:
name: db-main-secret
type: Opaque
stringData:
db_main.yaml: |
engine: sqlite
filename: main.sqlite3
Ko tenei ka hua i te hanganga o nga konae YAML i te huarahi /etc/secrets/db-main/section_name.yaml
A, mo nga whakarewatanga o te rohe, ka whakamahia te whirihora, kei roto i te whaiaronga pakiaka o te kaupapa, i te huarahi ranei i tohua i roto i te taurangi taiao. Ko te waehere whai mana mo enei mahi ka kitea i roto i te kaipahua.
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()
He tino ngawari te arorau: ka whakakotahihia e matou nga whirihora nui mai i te raarangi kaupapa me nga huarahi ma te taurangi taiao, me nga waahanga whirihora iti mai i nga mea ngaro a Kuber, katahi ka tukatukahia he iti. Me etahi taurangi. Ka kite ahau i te wa e rapu ana i nga konae mai i nga mea ngaro, ka whakamahia he herenga hohonu, na te mea ka hangaia e K8 he kōpaki huna i ia mea ngaro kei te rongoa nga mea ngaro, a he hononga noa kei te taumata teitei ake.
Ko te tumanako ka whai hua nga korero kua whakaahuatia ki tetahi :) Ka whakaaehia nga korero me nga taunakitanga mo te haumarutanga me etahi atu waahanga hei whakapai ake. He mea whakamere hoki te whakaaro o te hapori, tera pea he pai te taapiri tautoko mo te ConfigMaps (kaore ano ta maatau kaupapa e whakamahi) me te whakaputa i te waehere ki runga i te GitHub / PyPI? Ko ahau ake, ki taku whakaaro he mea takitahi rawa enei mea mo nga kaupapa ki te ao katoa, me te titiro iti ki nga whakatinanatanga a etahi atu, penei i te korero i konei, me te korerorero mo nga ahuatanga, nga tohutohu me nga mahi pai, e tumanako ana ahau ka kite i roto i nga korero. , kua nui 😉
Ko nga kaiwhakamahi kua rehita anake ka uru ki te rangahau.
Me whakaputa ahau hei kaupapa/whare pukapuka?
-
0,0 orauAe, ka whakamahi ahau /contribution0
-
33,3 orauAe, he rawe tera4
-
41,7 orauKao, ma wai ano e mahi i runga i tana ake whakatakotoranga me te pai ki o raatau hiahia5
-
25,0 orauKa kore au e whakautu3
12 nga kaiwhakamahi i pooti. 3 nga kaiwhakamahi i aukati.
Source: will.com