"DevOps üçün Kubernetes" kitabı

"DevOps üçün Kubernetes" kitabı Salam, Khabro sakinləri! Kubernetes müasir bulud ekosisteminin əsas elementlərindən biridir. Bu texnologiya konteyner virtualizasiyasına etibarlılıq, miqyaslılıq və davamlılıq təmin edir. John Arundel və Justin Domingus Kubernetes ekosistemi haqqında danışır və gündəlik problemlərə sübut edilmiş həllər təqdim edir. Addım-addım, siz öz bulud-doğma tətbiqinizi quracaqsınız və onu dəstəkləmək üçün infrastruktur yaradacaqsınız, inkişaf mühiti və növbəti proqramlarınız üzərində işləyərkən sizə kömək edəcək davamlı yerləşdirmə boru kəməri yaradacaqsınız.

• Konteynerlər və Kubernetlərlə əsaslardan başlayın: mövzunu öyrənmək üçün xüsusi təcrübə tələb olunmur. • Öz klasterlərinizi idarə edin və ya Amazon, Google və s.-dən idarə olunan Kubernetes xidmətini seçin. • Konteynerin həyat dövrünü və resurs istehlakını idarə etmək üçün Kubernetes-dən istifadə edin. • Xərc, performans, dayanıqlılıq, güc və miqyaslılıq əsasında klasterləri optimallaşdırın. • Tətbiqlərinizi inkişaf etdirmək, sınaqdan keçirmək və yerləşdirmək üçün ən yaxşı alətləri öyrənin. • Təhlükəsizlik və nəzarəti təmin etmək üçün mövcud sənaye təcrübələrindən istifadə edin. • İnkişaf qruplarının daha çevik, tez və səmərəli fəaliyyət göstərməsi üçün DevOps prinsiplərini bütün şirkətinizdə tətbiq edin.

Kitab kimin üçündür?

Kitab serverlərə, proqramlara və xidmətlərə cavabdeh olan idarəetmə departamentlərinin işçiləri, həmçinin yeni bulud xidmətlərinin qurulması və ya mövcud proqramların Kubernetes və buludlara köçürülməsi ilə məşğul olan tərtibatçılar üçün ən uyğundur. Narahat olmayın, Kubernetes və ya konteynerlərlə necə işləməyi bilmək lazım deyil - biz sizə hər şeyi öyrədəcəyik.

Təcrübəli Kubernetes istifadəçiləri də RBAC, davamlı yerləşdirmə, həssas məlumatların idarə edilməsi və müşahidə oluna bilmə kimi mövzuları dərindən əhatə etməklə çox dəyər tapacaqlar. Ümid edirik ki, kitabın səhifələrində bacarıqlarınızdan və təcrübənizdən asılı olmayaraq mütləq sizin üçün maraqlı bir şey olacaq.

Kitab hansı suallara cavab verir?

Kitabı planlaşdırarkən və yazarkən biz bulud texnologiyası və Kubernetes-i yüzlərlə insanla müzakirə etdik, sənaye liderləri və ekspertlərlə, eləcə də tam yeni başlayanlarla danışdıq. Aşağıda onların bu nəşrdə cavabını görmək istədikləri seçilmiş suallar verilmişdir.

  • “Mənə maraqlıdır ki, niyə bu texnologiyaya vaxt sərf etməlisiniz. Bu, mənə və komandama hansı problemləri həll etməyə kömək edəcək?”
  • “Kubernetes maraqlı görünür, lakin giriş üçün kifayət qədər yüksək maneə var. Sadə bir nümunə hazırlamaq çətin deyil, lakin sonrakı idarə və sazlama çətin olur. İnsanların real dünyada Kubernetes klasterlərini necə idarə etmələri və hansı problemlərlə qarşılaşacağımız barədə etibarlı məsləhət almaq istərdik."
  • “Subyektiv məsləhət faydalı olardı. Kubernetes ekosistemi yeni komandalara seçmək üçün çoxlu seçimlər verir. Eyni şeyi etmənin bir neçə yolu olduqda, hansının daha yaxşı olduğunu necə bilirsiniz? Seçimi necə etmək olar?

Və bəlkə də bütün suallardan ən vacibi:

  • "Şirkətimi pozmadan Kubernetes-dən necə istifadə edə bilərəm?"

Çıxarış. Konfiqurasiya və Gizli obyektlər

Kubernetes tətbiqinin məntiqini onun konfiqurasiyasından (yəni zamanla dəyişə biləcək hər hansı dəyər və ya parametrlərdən) ayırmaq bacarığı çox faydalıdır. Konfiqurasiya dəyərlərinə adətən ətraf mühitə xas parametrlər, üçüncü tərəf xidmətinin DNS ünvanları və autentifikasiya etimadnaməsi daxildir.

Əlbəttə ki, bütün bunları birbaşa koda daxil etmək olar, lakin bu yanaşma kifayət qədər çevik deyil. Məsələn, konfiqurasiya dəyərinin dəyişdirilməsi kodunuzu yenidən qurmağınızı və yerləşdirməyinizi tələb edəcək. Daha yaxşı bir həll konfiqurasiyanı koddan ayırmaq və onu fayldan və ya mühit dəyişənlərindən oxumaq olardı.

Kubernetes konfiqurasiyanı idarə etmək üçün bir neçə fərqli yol təqdim edir. Birincisi, siz dəyərləri pod sarğı spesifikasiyasında göstərilən mühit dəyişənləri vasitəsilə tətbiqə ötürə bilərsiniz (bax: “Ətraf mühit dəyişənləri” səhifə 192). İkincisi, konfiqurasiya məlumatları ConfigMap və Secret obyektlərindən istifadə edərək birbaşa Kubernetes-də saxlanıla bilər.

Bu fəsildə biz bu obyektləri təfərrüatı ilə araşdırırıq və demo proqramdan istifadə edərək konfiqurasiya və həssas məlumatları idarə etmək üçün bəzi praktik yanaşmalara baxırıq.

Konfiqurasiya dəyişdikdə pod qabıqlarının yenilənməsi

Təsəvvür edin ki, klasterinizdə bir yerləşdirmə var və onun ConfigMap-də bəzi dəyərləri dəyişdirmək istəyirsiniz. Helm diaqramından istifadə etsəniz (bax: “Helm: Kubernetes üçün Paket Meneceri” səhifə 102), siz avtomatik olaraq konfiqurasiya dəyişikliyini aşkar edə və bir səliqəli hiylə ilə pod qabıqlarınızı yenidən yükləyə bilərsiniz. Yerləşdirmə spesifikasiyasına aşağıdakı qeydi əlavə edin:

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

Yerləşdirmə şablonu indi konfiqurasiya parametrlərinin yoxlama cəmini ehtiva edir: parametrlər dəyişdirilərsə, cəmi yenilənəcək. Sükan təkmilləşdirməsini işə salsanız, Helm yerləşdirmə spesifikasiyasının dəyişdiyini aşkar edəcək və bütün pod qabıqlarını yenidən işə salacaq.

Kubernetes-də həssas məlumatlar

Biz artıq bilirik ki, ConfigMap obyekti klasterdə konfiqurasiya məlumatlarını saxlamaq və əldə etmək üçün çevik mexanizm təmin edir. Bununla belə, əksər proqramlarda parollar və ya API açarları kimi həssas və həssas məlumatlar var. O, həmçinin ConfigMap-də saxlanıla bilər, lakin bu həll ideal deyil.

Bunun əvəzinə, Kubernetes həssas məlumatları saxlamaq üçün nəzərdə tutulmuş xüsusi bir obyekt növü təklif edir: Gizli. Sonra, bu obyektin demo tətbiqimizdə necə istifadə oluna biləcəyinə dair bir nümunəyə baxaq.

Başlamaq üçün Gizli obyekt üçün Kubernetes manifestinə nəzər salın (bax: hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

Bu nümunədə magicWord şəxsi açarı xyzzy-dir (en.wikipedia.org/wiki/Xyzzy_(hesablama)). Xyzzy sözü ümumiyyətlə kompüter dünyasında çox faydalıdır. ConfigMap kimi, siz Gizli obyektdə çoxlu açar və dəyərlər saxlaya bilərsiniz. Burada sadəlik üçün biz yalnız bir açar-dəyər cütlüyündən istifadə edirik.

Gizli Obyektlərin Ətraf Dəyişənlər kimi İstifadəsi

ConfigMap kimi, Gizli obyekt də konteynerdə mühit dəyişənləri və ya diskindəki fayl kimi təqdim edilə bilər. Aşağıdakı misalda biz Secretdən dəyərə mühit dəyişəni təyin edəcəyik:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

Manifestləri tətbiq etmək üçün demo deposunda aşağıdakı əmri işlədin:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

Əvvəlki kimi, nəticəni brauzerinizdə görmək üçün yerli portu yerləşdirməyə yönləndirin:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

Ünvan açarkən localhost:9999/ aşağıdakıları görməlisiniz:

The magic word is "xyzzy"

Fayllara Gizli Obyektlərin Yazılması

Bu nümunədə biz Gizli obyekti konteynerə fayl kimi əlavə edəcəyik. Kod demo deposunun salam-gizli fayl qovluğunda yerləşir.

Gizli faylı birləşdirmək üçün aşağıdakı yerləşdirmədən istifadə edəcəyik:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

Səh.-dəki “ConfigMap obyektlərindən konfiqurasiya fayllarının yaradılması” alt bölməsində olduğu kimi. 240, biz bir həcm yaradırıq (bu halda demo-gizli-həcm) və onu spesifikasiyanın volumeMounts bölməsində konteynerə quraşdırırıq. mountPath sahəsi /secrets-dir, ona görə də Kubernetes Gizli obyektdə müəyyən edilmiş hər açar/dəyər cütü üçün bu qovluqda bir fayl yaradacaq.

Nümunəmizdə magicWord adlı yalnız bir açar-dəyər cütünü təyin etdik, ona görə də manifest konteynerdə həssas məlumatlarla tək oxunaqlı /secrets/magicWord faylı yaradacaq.

Bu manifesti əvvəlki nümunə ilə eyni şəkildə tətbiq etsəniz, eyni nəticəni almalısınız:

The magic word is "xyzzy"

Gizli obyektləri oxumaq

Əvvəlki bölmədə biz ConfigMap-in məzmununu göstərmək üçün kubectl describe əmrindən istifadə etdik. Eyni şeyi Secret ilə etmək olarmı?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

Nəzərə alın ki, məlumatların özü göstərilmir. Kubernetes-dəki gizli obyektlər Opaque tiplidir, yəni onların məzmunu kubectl təsviri çıxışda, log girişlərində və ya terminalda göstərilmir və bu, həssas məlumatların təsadüfən aşkar edilməsini qeyri-mümkün edir.

Həssas məlumatların kodlaşdırılmış YAML versiyasına baxmaq üçün kubectl get əmrindən istifadə edin:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

İlkin dəyərimizdən tamamilə fərqli olan eHl6enk= nədir? Bu, əslində base64 kodlaşdırmasında təmsil olunan Gizli obyektdir. Base64 simvollar sətri kimi ixtiyari ikili verilənlərin kodlaşdırılması sxemidir.

Həssas məlumat ikili ola bilər və çıxmaya bilər (TLS şifrələmə açarında olduğu kimi), gizli obyektlər həmişə base64 formatında saxlanılır.

beHl6enk= mətni xyzzy gizli sözümüzün base64 kodlu versiyasıdır. Bunu terminalda base64 —decode əmrini işlətməklə yoxlaya bilərsiniz:

echo "eHl6enk=" | base64 --decode
xyzzy

Beləliklə, Kubernetes sizi terminalda və ya log fayllarında həssas məlumatların təsadüfən çıxarılmasından qorusa da, əgər siz xüsusi ad məkanında Gizli obyektlərdə oxumaq icazələriniz varsa, bu məlumatlar baza64laşdırıla və sonra deşifrə edilə bilər.

Əgər sizə base64-ə bəzi mətni kodlaşdırmaq lazımdırsa (məsələn, onu Sirrə qoymaq üçün), arqumentlər olmadan base64 əmrindən istifadə edin:

echo xyzzy | base64
eHl6enkK

Gizli obyektlərə giriş

Gizli obyektləri kim oxuya və redaktə edə bilər? Bu, girişə nəzarət mexanizmi olan RBAC tərəfindən müəyyən edilir (biz bunu səhifə 258-dəki “Rol əsaslı giriş nəzarətinə giriş” alt bölməsində ətraflı müzakirə edəcəyik). Əgər siz RBAC-ı olmayan və ya aktivləşdirilməmiş bir klaster işlədirsinizsə, bütün Gizli obyektləriniz istənilən istifadəçilər və konteynerlər üçün əlçatandır (daha sonra izah edəcəyik ki, RBAC olmadan heç bir istehsal klasteriniz olmamalıdır).

Passiv məlumat şifrələməsi

Kubernetes-in bütün məlumatlarını saxladığı etcd verilənlər bazasına girişi olanlar haqqında nə demək olar? API vasitəsilə Gizli obyektləri oxumaq icazəsi olmadan həssas məlumatları oxuya bilərlərmi?

1.7 versiyasından bəri Kubernetes passiv məlumat şifrələməsini dəstəkləyir. Bu o deməkdir ki, etcd daxilində həssas məlumatlar diskdə şifrələnmiş şəkildə saxlanılır və hətta verilənlər bazasına birbaşa çıxışı olanlar tərəfindən oxuna bilməz. Şifrəni açmaq üçün sizə yalnız Kubernetes API serverində olan açar lazımdır. Düzgün konfiqurasiya edilmiş klasterdə passiv şifrələmə aktivləşdirilməlidir.

Siz passiv şifrələmənin klasterinizdə işlədiyini bu şəkildə yoxlaya bilərsiniz:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Eksperimental-şifrələmə-provayder-konfiqurasiya bayrağını görmürsünüzsə, passiv şifrələmə aktiv deyil. Google Kubernetes Engine və ya digər Kubernetes idarəetmə xidmətlərindən istifadə edərkən, məlumatlarınız fərqli mexanizmdən istifadə etməklə şifrələnir, beləliklə, bayraq mövcud olmayacaq. etcd məzmununun şifrələndiyini görmək üçün Kubernetes satıcınızla yoxlayın.

Məxfi məlumatların saxlanması

Bəzi Kubernetes resursları var ki, onlar heç vaxt klasterdən çıxarılmamalıdır, məsələn, yüksək həssas Gizli obyektlər. Siz Helm meneceri tərəfindən verilən annotasiyadan istifadə edərək resursu silinməkdən qoruya bilərsiniz:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

Gizli Obyekt İdarəetmə Strategiyaları

Əvvəlki bölmənin nümunəsində həssas məlumatlar klasterdə saxlandıqdan dərhal sonra icazəsiz girişdən qorunurdu. Lakin manifest fayllarında onlar düz mətn kimi saxlanılırdı.

Siz heç vaxt məxfi məlumatı versiya nəzarətində olan fayllara yerləşdirməməlisiniz. Kubernetes klasterinizə tətbiq etməzdən əvvəl bu məlumatı necə təhlükəsiz idarə edə və saxlaya bilərsiniz?

Tətbiqlərinizdə həssas məlumatların idarə edilməsi üçün istənilən alət və ya strategiya seçə bilərsiniz, lakin yenə də ən azı aşağıdakı suallara cavab verməli olacaqsınız.

  • Həssas məlumatlar yüksək dərəcədə əlçatan olması üçün harada saxlanmalıdır?
  • Həssas məlumatları aktiv tətbiqləriniz üçün necə əlçatan etmək olar?
  • Həssas məlumatları dəyişdirdiyiniz və ya redaktə etdiyiniz zaman tətbiqlərinizlə nə baş verməlidir?

Müəlliflər haqqında

Con Arundel kompüter sənayesində 30 illik təcrübəyə malik məsləhətçidir. O, bir neçə kitab yazıb və müxtəlif ölkələrdən bir çox şirkətlərlə işləyir, onlara bulud-doğma infrastruktur və Kubernetes mövzusunda məsləhətlər verir. Boş vaxtlarında sörfinqlə məşğul olur, yaxşı tapança atır və həvəskar kimi pianoda ifa edir. İngiltərənin Kornuoll şəhərində nağıl kottecində yaşayır.

Justin Domingus — Kubernetes və bulud texnologiyaları ilə DevOps mühitində işləyən sistemlərin idarə edilməsi üzrə mühəndis. O, açıq havada vaxt keçirməkdən, kofe içməkdən, yemək yeməkdən və kompüter arxasında oturmaqdan zövq alır. Sietldə, Vaşinqtonda gözəl pişik və daha da gözəl həyat yoldaşı və ən yaxşı dostu Adrienne ilə yaşayır.

» Kitab haqqında ətraflı məlumat üçün müraciət edin nəşriyyat saytı
» Mündəricat
» Çıxarış

Khabrozhiteli üçün kuponda 25% endirim - Kubernetes

Kitabın kağız versiyasının ödənişi edildikdən sonra elektron kitab e-poçta göndərilir.

Mənbə: www.habr.com

Добавить комментарий