"DevOps uchun Kubernetes" kitobi

"DevOps uchun Kubernetes" kitobi Salom, Khabro aholisi! Kubernetes zamonaviy bulut ekotizimining asosiy elementlaridan biridir. Ushbu texnologiya konteyner virtualizatsiyasiga ishonchlilik, masshtablilik va chidamlilikni ta'minlaydi. Jon Arundel va Jastin Domingus Kubernetes ekotizimlari haqida gapiradi va kundalik muammolarga isbotlangan echimlarni taqdim etadi. Bosqichma-bosqich siz o'zingizning bulutli ilovangizni yaratasiz va uni qo'llab-quvvatlash uchun infratuzilmani yaratasiz, keyingi ilovalaringizda ishlashda sizga yordam beradigan ishlab chiqish muhiti va uzluksiz joylashtirish quvurini o'rnatasiz.

• Konteynerlar va Kubernetes bilan asoslardan boshlang: mavzuni o‘rganish uchun maxsus tajriba talab qilinmaydi. • O‘z klasterlaringizni ishga tushiring yoki Amazon, Google va boshqalardan boshqariladigan Kubernetes xizmatini tanlang. • Konteynerning ishlash davri va resurslar sarfini boshqarish uchun Kubernetes’dan foydalaning. • Klasterlarni xarajat, unumdorlik, chidamlilik, quvvat va masshtablilik asosida optimallashtiring. • Ilovalaringizni ishlab chiqish, sinab ko'rish va joylashtirish uchun eng yaxshi vositalarni o'rganing. • Xavfsizlik va nazoratni ta'minlash uchun joriy sanoat amaliyotlaridan foydalaning. • Rivojlanish guruhlari yanada moslashuvchan, tez va samarali harakat qilishlari uchun DevOps tamoyillarini butun kompaniyangizda tatbiq eting.

Kitob kim uchun?

Kitob serverlar, ilovalar va xizmatlar uchun mas'ul bo'lgan ma'muriyat bo'limlari xodimlari, shuningdek, yangi bulut xizmatlarini yaratish yoki mavjud ilovalarni Kubernetes va bulutga ko'chirish bilan shug'ullanadigan ishlab chiquvchilar uchun eng dolzarbdir. Xavotir olmang, Kubernetes yoki konteynerlar bilan qanday ishlashni bilishingiz shart emas - biz sizga hamma narsani o'rgatamiz.

Tajribali Kubernetes foydalanuvchilari, shuningdek, RBAC, uzluksiz joylashtirish, nozik ma'lumotlarni boshqarish va kuzatuvchanlik kabi mavzularni chuqur yoritish bilan juda ko'p qiymat topadilar. Umid qilamizki, kitob sahifalarida sizning mahoratingiz va tajribangizdan qat'i nazar, siz uchun qiziqarli narsalarni albatta o'z ichiga oladi.

Kitob qanday savollarga javob beradi?

Kitobni rejalashtirish va yozishda biz bulut texnologiyasi va Kubernetesni yuzlab odamlar bilan muhokama qildik, soha rahbarlari va mutaxassislari, shuningdek, yangi boshlanuvchilar bilan suhbatlashdik. Quyida ular ushbu nashrda javob olishni istagan savollar tanlangan.

  • “Meni nima uchun bu texnologiyaga vaqt sarflashingiz kerakligi qiziqtiradi. Bu menga va jamoamga qanday muammolarni hal qilishga yordam beradi?”
  • "Kubernetes qiziqarli ko'rinadi, lekin kirish uchun juda yuqori to'siq bor. Oddiy misolni tayyorlash qiyin emas, ammo keyingi boshqaruv va disk raskadrovka juda qiyin. Biz odamlar haqiqiy dunyoda Kubernetes klasterlarini qanday boshqarishi va qanday muammolarga duch kelishimiz haqida ishonchli maslahat olmoqchimiz."
  • “Subyektiv maslahat foydali bo'lardi. Kubernetes ekotizimi yangi jamoalarga tanlash uchun juda ko'p imkoniyatlarni beradi. Xuddi shu narsani qilishning bir necha yo'li mavjud bo'lsa, qaysi biri eng yaxshi ekanligini qanday bilasiz? Qanday qilib tanlov qilish kerak?

Va, ehtimol, barcha savollarning eng muhimi:

  • "Kubernetes-dan kompaniyamga xalaqit bermasdan qanday foydalanishim mumkin?"

Ko'chirma. Konfiguratsiya va maxfiy ob'ektlar

Kubernetes ilovasining mantig'ini uning konfiguratsiyasidan (ya'ni vaqt o'tishi bilan o'zgarishi mumkin bo'lgan har qanday qiymatlar yoki sozlamalardan) ajratish qobiliyati juda foydali. Konfiguratsiya qiymatlari odatda atrof-muhitga xos sozlamalar, uchinchi tomon xizmatining DNS manzillari va autentifikatsiya hisob ma'lumotlarini o'z ichiga oladi.

Albatta, bularning barchasi to'g'ridan-to'g'ri kodga kiritilishi mumkin, ammo bu yondashuv etarlicha moslashuvchan emas. Misol uchun, konfiguratsiya qiymatini o'zgartirish kodingizni qayta qurish va joylashtirishni talab qiladi. Konfiguratsiyani koddan ajratish va uni fayl yoki muhit o'zgaruvchilaridan o'qish yaxshiroq yechim bo'ladi.

Kubernetes konfiguratsiyani boshqarishning bir necha xil usullarini taqdim etadi. Birinchidan, siz qiymatlarni podrapper spetsifikatsiyasida ko'rsatilgan muhit o'zgaruvchilari orqali ilovaga o'tkazishingiz mumkin (qarang: “Atrof-muhit o'zgaruvchilari” 192-bet). Ikkinchidan, konfiguratsiya ma'lumotlari ConfigMap va Secret ob'ektlari yordamida bevosita Kubernetesda saqlanishi mumkin.

Ushbu bobda biz ushbu ob'ektlarni batafsil ko'rib chiqamiz va demo ilova yordamida konfiguratsiya va nozik ma'lumotlarni boshqarishning ba'zi amaliy yondashuvlarini ko'rib chiqamiz.

Konfiguratsiya o'zgarganda pod qobiqlarini yangilash

Tasavvur qiling-a, sizning klasteringizda joylashtirishingiz bor va siz uning ConfigMap-dagi ba'zi qiymatlarni o'zgartirmoqchisiz. Agar siz Helm diagrammasidan foydalansangiz (102-betdagi “Helm: Kubernetes uchun paketlar menejeri” ga qarang), siz avtomatik ravishda konfiguratsiya o‘zgarishini aniqlab olishingiz va bitta hiyla-nayrang bilan pod qobiqlaringizni qayta yuklashingiz mumkin. Joylashtirish spetsifikatsiyasiga quyidagi izohni qo'shing:

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

Joylashtirish shablonida endi konfiguratsiya parametrlarining nazorat yig'indisi mavjud: agar parametrlar o'zgartirilsa, yig'indi yangilanadi. Agar siz rulni yangilashni boshlasangiz, Helm joylashtirish spetsifikatsiyasi o'zgarganligini aniqlaydi va barcha pod qobiqlarini qayta ishga tushiradi.

Kubernetesdagi maxfiy maʼlumotlar

Biz allaqachon bilamizki, ConfigMap ob'ekti klasterdagi konfiguratsiya ma'lumotlarini saqlash va ularga kirish uchun moslashuvchan mexanizmni ta'minlaydi. Biroq, ko'pgina ilovalarda parollar yoki API kalitlari kabi nozik va sezgir ma'lumotlar mavjud. U ConfigMap-da ham saqlanishi mumkin, ammo bu yechim ideal emas.

Buning o'rniga, Kubernetes nozik ma'lumotlarni saqlash uchun mo'ljallangan maxsus turdagi ob'ektni taklif qiladi: Secret. Keyinchalik, ushbu ob'ektni bizning demo ilovamizda qanday ishlatish mumkinligi haqidagi misolni ko'rib chiqamiz.

Boshlash uchun Maxfiy ob'ekt uchun Kubernetes manifestini ko'rib chiqing (hello-secret-env/k8s/secret.yaml ga qarang):

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

Bu misolda magicWord shaxsiy kaliti xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Xyzzy so'zi odatda kompyuterlar dunyosida juda foydali. ConfigMap-ga o'xshab, siz maxfiy ob'ektda bir nechta kalit va qiymatlarni saqlashingiz mumkin. Bu erda soddalik uchun biz faqat bitta kalit-qiymat juftligidan foydalanamiz.

Maxfiy ob'ektlarni muhit o'zgaruvchilari sifatida ishlatish

ConfigMap kabi, Secret ob'ekti konteynerda muhit o'zgaruvchilari yoki uning diskidagi fayl sifatida mavjud bo'lishi mumkin. Quyidagi misolda biz Secret qiymatiga muhit o'zgaruvchisini tayinlaymiz:

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

Manifestlarni qo'llash uchun demo omborida quyidagi buyruqni bajaring:

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

Avvalgidek, brauzeringizda natijani ko'rish uchun mahalliy portni joylashtirishga yo'naltiring:

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

Manzil ochilganda localhost:9999/ siz quyidagilarni ko'rishingiz kerak:

The magic word is "xyzzy"

Fayllarga maxfiy ob'ektlarni yozish

Ushbu misolda biz maxfiy ob'ektni konteynerga fayl sifatida biriktiramiz. Kod demo omborining salom-secret-file papkasida joylashgan.

Secretni fayl sifatida ulash uchun biz quyidagi joylashtirishdan foydalanamiz:

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

"ConfigMap ob'ektlaridan konfiguratsiya fayllarini yaratish" bo'limida bo'lgani kabi, p. 240, biz hajmni yaratamiz (bu holda demo-secret-volume) va uni spetsifikatsiyaning volumeMounts bo'limidagi konteynerga o'rnatamiz. mountPath maydoni /secrets, shuning uchun Kubernetes maxfiy ob'ektda belgilangan har bir kalit/qiymat juftligi uchun ushbu jildda bitta fayl yaratadi.

Bizning misolimizda biz magicWord deb nomlangan faqat bitta kalit-qiymat juftligini aniqladik, shuning uchun manifest konteynerdagi nozik ma'lumotlar bilan faqat o'qish uchun /secrets/magicWord faylini yaratadi.

Agar siz ushbu manifestni avvalgi misol bilan bir xil tarzda qo'llasangiz, xuddi shunday natijani olishingiz kerak:

The magic word is "xyzzy"

Yashirin ob'ektlarni o'qish

Oldingi bo'limda biz ConfigMap tarkibini ko'rsatish uchun kubectl describe buyrug'idan foydalanganmiz. Xuddi shu narsani Secret bilan qilish mumkinmi?

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

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

Data
====
magicWord: 5   bytes

E'tibor bering, ma'lumotlarning o'zi ko'rsatilmaydi. Kubernetes-dagi maxfiy ob'ektlar Opaque turiga ega, ya'ni ularning mazmuni kubectl tavsifida chiqish, jurnal yozuvlari yoki terminalda ko'rsatilmaydi, bu esa tasodifiy nozik ma'lumotlarni oshkor qilishni imkonsiz qiladi.

Nozik ma'lumotlarning kodlangan YAML versiyasini ko'rish uchun kubectl get buyrug'idan foydalaning:

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

base64

Bizning asl qiymatimizdan butunlay farq qiladigan eHl6enk= nima? Bu, aslida, base64 kodlashda taqdim etilgan maxfiy ob'ekt. Base64 - bu ixtiyoriy ikkilik ma'lumotlarni belgilar qatori sifatida kodlash sxemasi.

Maxfiy ma'lumotlar ikkilik bo'lishi va chiqarilmasligi mumkinligi sababli (TLS shifrlash kalitida bo'lgani kabi), maxfiy ob'ektlar har doim base64 formatida saqlanadi.

BeHl6enk= matni xyzzy maxfiy so'zimizning base64 kodlangan versiyasidir. Buni terminalda base64 —decode buyrug'ini ishga tushirish orqali tekshirishingiz mumkin:

echo "eHl6enk=" | base64 --decode
xyzzy

Shunday qilib, Kubernetes sizni terminalda yoki jurnal fayllarida maxfiy ma'lumotlarni tasodifan chiqarishdan himoya qilsa-da, agar siz ma'lum bir nom maydonidagi maxfiy ob'ektlarda o'qish ruxsatiga ega bo'lsangiz, bu ma'lumotlar bazaviy 64-sonli dekodlanishi va keyinchalik dekodlanishi mumkin.

Agar siz base64-ni ba'zi matnlarni kodlashingiz kerak bo'lsa (masalan, uni sirga qo'yish uchun), argumentlarsiz base64 buyrug'idan foydalaning:

echo xyzzy | base64
eHl6enkK

Maxfiy ob'ektlarga kirish

Maxfiy ob'ektlarni kim o'qiy oladi va tahrirlay oladi? Bu kirishni boshqarish mexanizmi bo'lgan RBAC tomonidan aniqlanadi (biz buni 258-betdagi "Rolga asoslangan kirishni boshqarishga kirish" kichik bo'limida batafsil muhokama qilamiz). Agar siz RBAC-ga ega bo'lmagan yoki yoqilmagan klasterda ishlayotgan bo'lsangiz, barcha maxfiy ob'ektlaringiz har qanday foydalanuvchilar va konteynerlar uchun mavjud bo'ladi (keyinchalik sizda RBACsiz ishlab chiqarish klasterlari bo'lmasligi kerakligini tushuntiramiz).

Passiv ma'lumotlarni shifrlash

Kubernetes o'zining barcha ma'lumotlarini saqlaydigan etcd ma'lumotlar bazasiga kirish huquqiga ega bo'lganlar haqida nima deyish mumkin? API orqali maxfiy ob'ektlarni o'qishga ruxsatisiz ular nozik ma'lumotlarni o'qiy oladimi?

1.7 versiyasidan boshlab Kubernetes passiv ma'lumotlarni shifrlashni qo'llab-quvvatlaydi. Bu shuni anglatadiki, etcd ichidagi maxfiy ma'lumotlar diskda shifrlangan holda saqlanadi va hatto ma'lumotlar bazasiga to'g'ridan-to'g'ri kirish huquqiga ega bo'lganlar ham o'qib bo'lmaydi. Uning shifrini ochish uchun sizga faqat Kubernetes API serverida bo'lgan kalit kerak bo'ladi. To'g'ri sozlangan klasterda passiv shifrlash yoqilgan bo'lishi kerak.

Klasteringizda passiv shifrlash shu tarzda ishlashini tekshirishingiz mumkin:

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

Agar tajriba-shifrlash-provayder-konfiguratsiya bayrog'ini ko'rmasangiz, passiv shifrlash yoqilmagan. Google Kubernetes Engine yoki boshqa Kubernetes boshqaruv xizmatlaridan foydalanganda maʼlumotlaringiz boshqa mexanizm yordamida shifrlanadi, shuning uchun bayroq koʻrinmaydi. etcd kontenti shifrlanganligini bilish uchun Kubernetes sotuvchisi bilan tekshiring.

Maxfiy ma'lumotlarni saqlash

Ba'zi Kubernetes resurslari mavjud, ular hech qachon klasterdan olib tashlanmasligi kerak, masalan, o'ta sezgir Secret ob'ektlari. Helm menejeri tomonidan taqdim etilgan izoh yordamida resursni o'chirishdan himoya qilishingiz mumkin:

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

Yashirin ob'ektlarni boshqarish strategiyalari

Oldingi bo'limdagi misolda, maxfiy ma'lumotlar klasterda saqlanganidan so'ng darhol ruxsatsiz kirishdan himoyalangan. Lekin manifest fayllarda ular oddiy matn sifatida saqlangan.

Hech qachon maxfiy ma'lumotlarni versiya nazorati ostidagi fayllarga joylashtirmasligingiz kerak. Ushbu ma'lumotni Kubernetes klasteringizga qo'llashdan oldin qanday qilib xavfsiz boshqarishingiz va saqlashingiz mumkin?

Ilovalaringizdagi maxfiy ma'lumotlarni qayta ishlash uchun har qanday vosita yoki strategiyani tanlashingiz mumkin, ammo baribir kamida quyidagi savollarga javob berishingiz kerak bo'ladi.

  • Maxfiy ma'lumotlarga kirish imkoni bo'lishi uchun ularni qayerda saqlash kerak?
  • Faol ilovalaringiz uchun maxfiy ma'lumotlarni qanday ochish mumkin?
  • Maxfiy ma'lumotlarni almashtirganingizda yoki tahrirlaganingizda ilovalaringizga nima bo'lishi kerak?

Mualliflar haqida

Jon Arundel kompyuter sanoatida 30 yillik tajribaga ega maslahatchi. U bir nechta kitoblar yozgan va turli mamlakatlardagi ko'plab kompaniyalar bilan ishlaydi, ularga bulutli mahalliy infratuzilma va Kubernetes bo'yicha maslahat beradi. U bo'sh vaqtlarida serfingni yaxshi ko'radi, to'pponchadan yaxshi otadi va havaskor sifatida pianino chaladi. Angliyaning Kornuoll shahridagi ertakdagi kottejda yashaydi.

Jastin Domingus — Kubernetes va bulutli texnologiyalar bilan DevOps muhitida ishlaydigan tizim boshqaruvi muhandisi. U ochiq havoda vaqt o'tkazishni, qahva ichishni, qisqichbaqa qilishni va kompyuterda o'tirishni yaxshi ko'radi. Vashingtonning Sietl shahrida ajoyib mushuk va undan ham ajoyib xotini va eng yaxshi do'sti Adrienne bilan yashaydi.

» Kitob haqida batafsil ma’lumotni quyidagi manzildan olishingiz mumkin nashriyot sayti
» Mundarija
» Parcha

Xabrozhiteley uchun kupondan foydalangan holda 25% chegirma - Kubernetes

Kitobning qog'oz versiyasi uchun to'lov amalga oshirilgandan so'ng, elektron kitob elektron pochta orqali yuboriladi.

Manba: www.habr.com

a Izoh qo'shish