Te whirihoranga kaupapa ki roto me waho o Kubernetes

No tata nei ahau i tuhi whakautu mo te oranga kaupapa i Docker me te whakakore i te waehere kei waho atu, i korero poto ia ka taea e koe te hanga i a koe ake punaha whirihoranga kia pai te mahi o te ratonga ki Kuber, ka kumea nga mea ngaro, ka rere pai ki te rohe, ahakoa ki waho o Docker katoa. Kaore he mea uaua, engari ko te "tohanga" kua whakaahuatia ka whai hua pea ki tetahi :) Kei te Python te waehere, engari kaore te arorau e herea ki te reo.

Te whirihoranga kaupapa ki roto me waho o Kubernetes

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 te hiahia mo te rakaraka me te aro turuki, i tohu i te neke ki Kuber, kei te haere tonu. I te taha o te awhina ki te whakatau i nga raru kua whakahuahia ake nei, ka tukuna e Kubernetes ana huarahi ki te whakahaere hanganga, tae atu ki e kiia nei ko nga mea ngaro и huarahi ki te mahi ki a ratou. He paerewa, he pono hoki te tikanga, no reira he hara te kore e whakamahia! Engari i te wa ano, ka hiahia ahau ki te pupuri i taku whakatakotoranga o naianei mo te mahi me te whirihora: tuatahi, kia rite te whakamahi i roto i nga momo miihini rereke o te kaupapa, tuarua, kia taea ai te whakahaere i te waehere ki runga i te miihini o te rohe ma te whakamahi i tetahi mea ngawari. kōnae whirihora.

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. Waitohu maitēnā.

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

Tāpiri i te kōrero