Nhazi oru ngo n'ime na n'èzí Kubernetes

M dere na nso nso a zaa maka ndụ oru ngo na Docker na koodu debugging na mpụga ya, Ebe o kwuru na nkenke na ị nwere ike ịme usoro nhazi nke gị ka ọrụ ahụ na-arụ ọrụ nke ọma na Kuber, na-ewepụta ihe nzuzo, ma na-agba ọsọ na mpaghara, ọbụna n'èzí Docker kpamkpam. Ọ dịghị ihe gbagwojuru anya, ma "nchịkọta ntụziaka" a kọwara nwere ike ịba uru nye mmadụ :) Koodu dị na Python, mana ejikọtaghị echiche ahụ na asụsụ ahụ.

Nhazi oru ngo n'ime na n'èzí Kubernetes

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 mkpa nke centralized osisi na nlekota oru, na-ese onyinyo ịkwaga Kuber, nke ka na-aga n'ihu. Yana enyemaka na-edozi nsogbu ndị a kpọtụrụ aha, Kubernetes na-enye ụzọ ya maka njikwa akụrụngwa, gụnyere nke a na-akpọ Nzuzo и ụzọ na-arụ ọrụ na ha. Usoro ahụ bụ ọkọlọtọ na ntụkwasị obi, ya mere ọ bụ n'ezie mmehie ịghara iji ya! Ma n'otu oge ahụ, ọ ga-amasị m idobe usoro m ugbu a maka ịrụ ọrụ na nhazi: nke mbụ, iji ya n'otu n'otu na microservices dị iche iche nke ọrụ ahụ, na nke abụọ, iji nwee ike iji otu dị mfe na-agba ọsọ koodu na igwe mpaghara. config faịlụ.

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. banye, Biko.

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

Tinye a comment