"DevOps-т зориулсан Kubernetes" ном

"DevOps-т зориулсан Kubernetes" ном Сайн байна уу, Khabro хотын оршин суугчид! Кубернетес бол орчин үеийн үүлний экосистемийн гол элементүүдийн нэг юм. Энэхүү технологи нь чингэлэг виртуалчлалын найдвартай байдал, өргөтгөх чадвар, уян хатан байдлыг хангадаг. Жон Арундел, Жастин Домингус нар Кубернетес экосистемийн тухай ярьж, өдөр тутмын асуудалд батлагдсан шийдлүүдийг танилцуулж байна. Та алхам алхмаар өөрийн үүлэн хэрэглээний программыг бүтээж, түүнийг дэмжих дэд бүтцийг бий болгож, дараагийн програмууд дээрээ ажиллахад тань туслах хөгжлийн орчин, тасралтгүй байршуулах шугамыг бий болгоно.

• Контейнер болон Kubernetes-ийг анхан шатнаас нь эхлүүлээрэй: сэдвийг сурахад тусгай туршлага шаардлагагүй. • Өөрийн кластераа ажиллуулах эсвэл Amazon, Google гэх мэтээс удирддаг Kubernetes үйлчилгээг сонгох. • Кубернетесийг ашиглан контейнерийн ашиглалтын мөчлөг болон нөөцийн хэрэглээг удирдах боломжтой. • Зардал, гүйцэтгэл, уян хатан байдал, хүч чадал, өргөтгөх чадварт үндэслэн кластеруудыг оновчтой болгох. • Програмаа хөгжүүлэх, турших, ашиглах шилдэг хэрэгслүүдийг сур. • Аюулгүй байдал, хяналтыг хангахын тулд салбарын өнөөгийн туршлагыг ашиглах. • Хөгжлийн багууд илүү уян хатан, хурдан, үр дүнтэй ажиллахын тулд DevOps зарчмуудыг компанидаа хэрэгжүүл.

Ном хэнд зориулагдсан бэ?

Энэхүү ном нь сервер, аппликейшн, үйлчилгээ хариуцсан удирдлагын хэлтсийн ажилтнууд, мөн шинэ үүлэн үйлчилгээ бий болгох, эсвэл одоо байгаа програмуудыг Kubernetes болон Cloud руу шилжүүлэхэд оролцдог хөгжүүлэгчдэд хамгийн их хамааралтай юм. Санаа зоволтгүй, та Kubernetes эсвэл контейнертэй хэрхэн ажиллахаа мэдэх шаардлагагүй - бид танд бүх зүйлийг заах болно.

Туршлагатай Kubernetes хэрэглэгчид RBAC, тасралтгүй байршуулалт, мэдрэмтгий өгөгдлийн менежмент, ажиглалт зэрэг сэдвүүдийг гүнзгий хамрах зэргээр маш их үнэ цэнийг олох болно. Номын хуудсууд нь таны ур чадвар, туршлагаас үл хамааран танд сонирхолтой зүйлийг агуулсан байх болно гэж найдаж байна.

Ном ямар асуултанд хариулдаг вэ?

Номыг төлөвлөж, бичиж байхдаа бид олон зуун хүмүүстэй үүлэн технологи, Кубернетесийн талаар ярилцаж, салбарын удирдагчид, мэргэжилтнүүд болон шинэхэн хүмүүстэй ярилцсан. Энэ нийтлэлд хариулт авахыг хүсч буй асуултуудыг доороос сонгов.

  • “Та яагаад энэ технологид цаг зарцуулах ёстойг би сонирхож байна. Энэ нь надад болон манай багт ямар асуудлыг шийдвэрлэхэд туслах вэ?"
  • “Кубернетес сонирхолтой мэт боловч нэвтрэхэд нэлээд өндөр саадтай. Энгийн жишээ бэлтгэх нь тийм ч хэцүү биш боловч цаашдын удирдлага, дибаг хийх нь маш хэцүү байдаг. Бид бодит ертөнцөд хүмүүс Кубернетес кластеруудыг хэрхэн удирдаж, ямар асуудалтай тулгарах талаар найдвартай зөвлөгөө авахыг хүсч байна."
  • "Субъектив зөвлөгөө тустай байх болно. Кубернетес экосистем нь шинэ багуудад сонгоход хэтэрхий олон сонголтыг өгдөг. Нэг зүйлийг хийх хэд хэдэн арга байгаа бол аль нь хамгийн сайн болохыг яаж мэдэх вэ? Хэрхэн сонголт хийх вэ?

Магадгүй бүх асуултын хамгийн чухал нь:

  • "Би компанидаа саад учруулахгүйгээр Кубернетесийг хэрхэн ашиглах вэ?"

Ишлэл. Тохиргоо ба нууц объектууд

Kubernetes програмын логикийг түүний тохиргооноос (өөрөөр хэлбэл цаг хугацааны явцад өөрчлөгдөж болох аливаа утга, тохиргооноос) салгах чадвар нь маш хэрэгтэй. Тохиргооны утгууд нь ихэвчлэн хүрээлэн буй орчны тохиргоо, гуравдагч талын үйлчилгээний DNS хаягууд болон баталгаажуулалтын итгэмжлэлүүдийг агуулдаг.

Мэдээжийн хэрэг, энэ бүгдийг код руу шууд оруулж болох боловч энэ арга нь хангалттай уян хатан биш юм. Жишээлбэл, тохиргооны утгыг өөрчилснөөр кодыг дахин бүтээж, ашиглах шаардлагатай болно. Илүү сайн шийдэл бол тохиргоог кодоос салгаж файл эсвэл орчны хувьсагчаас унших явдал юм.

Kubernetes нь тохиргоог удирдах хэд хэдэн өөр аргыг санал болгодог. Нэгдүгээрт, та утгыг програмын сав баглаа боодлын үзүүлэлтэд заасан орчны хувьсагчаар дамжуулж болно ("Орчны хувьсагч"-ыг 192-р хуудаснаас үзнэ үү). Хоёрдугаарт, ConfigMap болон Secret объектуудыг ашиглан тохиргооны өгөгдлийг шууд Kubernetes-д хадгалах боломжтой.

Энэ бүлэгт бид эдгээр объектуудыг нарийвчлан судалж, демо програм ашиглан тохиргоо болон эмзэг өгөгдлийг удирдах зарим практик аргуудыг авч үзэх болно.

Тохиргоо өөрчлөгдөх үед хонгилын бүрхүүлийг шинэчилж байна

Таны кластерт байршуулалт байгаа бөгөөд түүний ConfigMap дээрх зарим утгыг өөрчлөхийг хүсч байна гэж төсөөлөөд үз дээ. Хэрэв та Helm диаграмыг ашиглавал ("Helm: Kubernetes-д зориулсан багц менежер"-ийг 102-р хуудаснаас үзнэ үү) та тохиргооны өөрчлөлтийг автоматаар илрүүлж, нэг л энгийн заль мэхийг ашиглан pod бүрхүүлээ дахин ачаалах боломжтой. Өөрийн байршуулалтын тодорхойлолтод дараах тайлбарыг нэмнэ үү:

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

Байршуулах загвар нь одоо тохиргооны параметрүүдийн хяналтын нийлбэрийг агуулж байна: хэрэв параметрүүд өөрчлөгдсөн бол нийлбэр шинэчлэгдэх болно. Хэрэв та жолооны шинэчлэлтийг ажиллуулбал Helm байршуулалтын үзүүлэлт өөрчлөгдсөнийг илрүүлж, бүх pod бүрхүүлийг дахин эхлүүлнэ.

Kubernetes дахь эмзэг өгөгдөл

ConfigMap объект нь кластер дахь тохиргооны өгөгдлийг хадгалах, хандах уян хатан механизмаар хангадаг гэдгийг бид аль хэдийн мэддэг болсон. Гэсэн хэдий ч ихэнх програмууд нь нууц үг эсвэл API түлхүүр гэх мэт эмзэг, эмзэг мэдээлэлтэй байдаг. Үүнийг мөн ConfigMap-д хадгалах боломжтой боловч энэ шийдэл нь тийм ч тохиромжтой биш юм.

Үүний оронд Кубернетес нууц мэдээллийг хадгалах зориулалттай тусгай төрлийн объектыг санал болгодог: Нууц. Дараа нь энэ объектыг манай демо програмд ​​хэрхэн ашиглаж болох жишээг харцгаая.

Эхлэхийн тулд Нууц объектын Кубернетес манифестийг харна уу (hello-secret-env/k8s/secret.yaml-г үзнэ үү):

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

Энэ жишээнд magicWord хувийн түлхүүр нь xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)) юм. Xyzzy гэдэг үг ерөнхийдөө компьютерийн ертөнцөд маш хэрэгтэй байдаг. ConfigMap-тай адилаар та нууц объектод олон түлхүүр, утгыг хадгалах боломжтой. Энд энгийн болгох үүднээс бид зөвхөн нэг түлхүүр-утга хосыг ашигладаг.

Нууц объектуудыг орчны хувьсагч болгон ашиглах

ConfigMap-ийн нэгэн адил Нууц объектыг контейнерт орчны хувьсагч эсвэл дискэн дээрх файл хэлбэрээр ашиглах боломжтой. Дараах жишээнд бид Secret-ийн утгад орчны хувьсагчийг оноох болно.

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

Манифестуудыг ашиглахын тулд демо репозитор дээр дараах тушаалыг ажиллуулна уу:

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

Үр дүнг хөтөч дээрээ харахын тулд өмнөх шигээ локал портыг байршуулалт руу шилжүүлнэ үү:

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

Хаяг нээх үед тестлээрэй:9999/ та дараах зүйлийг харах ёстой.

The magic word is "xyzzy"

Нууц объектуудыг файлд бичих

Энэ жишээнд бид Нууц объектыг контейнерт файл болгон хавсаргах болно. Код нь демо репозиторын hello-secret-file хавтсанд байрладаг.

Secret-ийг файл болгон холбохын тулд бид дараах байршуулалтыг ашиглана.

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 объектуудаас тохиргооны файлуудыг үүсгэх" дэд хэсэгт байгаа шиг. 240, бид эзлэхүүнийг (энэ тохиолдолд demo-secret-bolume) үүсгэж, тодорхойлолтын volumeMounts хэсэгт байгаа саванд холбоно. mountPath талбар нь /нууцууд тул Кубернетес Нууц объектод тодорхойлсон түлхүүр/утга хос бүрт энэ хавтсанд нэг файл үүсгэх болно.

Бидний жишээн дээр бид magicWord нэртэй зөвхөн нэг түлхүүр-утга хосыг тодорхойлсон тул манифест нь зөвхөн уншигдах боломжтой /secrets/magicWord файлыг чингэлэг доторх эмзэг өгөгдөлтэй үүсгэх болно.

Хэрэв та энэ манифестыг өмнөх жишээтэй ижил аргаар хэрэглэвэл ижил үр дүнд хүрэх болно:

The magic word is "xyzzy"

Нууц объектуудыг унших

Өмнөх хэсэгт бид ConfigMap-ийн агуулгыг харуулахын тулд kubectl describe командыг ашигласан. Secret-тэй ижил зүйлийг хийж болох уу?

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

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

Data
====
magicWord: 5   bytes

Өгөгдөл нь өөрөө харагдахгүй байгааг анхаарна уу. Kubernetes дахь нууц объектууд нь Opaque төрлийнх бөгөөд энэ нь тэдгээрийн агуулгыг kubectl тайлбарлах гаралт, бүртгэлийн оруулгууд эсвэл терминал дээр харуулдаггүй тул эмзэг мэдээллийг санамсаргүйгээр илрүүлэх боломжгүй болгодог.

Эмзэг өгөгдлийн кодлогдсон YAML хувилбарыг үзэхийн тулд kubectl get командыг ашиглана уу:

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

base64

Бидний анхны утгаас тэс өөр eHl6enk= гэж юу вэ? Энэ нь үнэндээ base64 кодчилолд дүрслэгдсэн Нууц объект юм. Base64 нь дурын хоёртын өгөгдлийг тэмдэгтийн мөр болгон кодлох схем юм.

Мэдрэмжтэй мэдээлэл нь гаралт биш хоёртын хувилбар байж болох тул (TLS шифрлэлтийн түлхүүртэй адил) нууц объектуудыг үргэлж base64 форматаар хадгалдаг.

beHl6enk= текст нь манай xyzzy нууц үгийн base64 кодлогдсон хувилбар юм. Та үүнийг терминал дээр base64 — декод тайлах командыг ажиллуулж баталгаажуулж болно:

echo "eHl6enk=" | base64 --decode
xyzzy

Тиймээс Кубернетес нь таныг терминал эсвэл лог файлууд дахь эмзэг өгөгдлийг санамсаргүйгээр гаргахаас хамгаалдаг ч хэрэв та тодорхой нэрийн талбар дахь Нууц объектууд дээр унших зөвшөөрөлтэй бол тэдгээр өгөгдлийг үндсэн64 болгож, дараа нь тайлж болно.

Хэрэв та base64-д зарим текстийг кодлох шаардлагатай бол (жишээ нь, Нууц дотор оруулахын тулд) base64 командыг аргументгүйгээр ашиглаарай:

echo xyzzy | base64
eHl6enkK

Нууц объектуудад хандах

Нууц объектуудыг хэн уншиж, засварлаж чадах вэ? Үүнийг хандалтын хяналтын механизм болох RBAC тодорхойлдог (бид үүнийг 258-р хуудасны “Үүрэгт суурилсан хандалтын удирдлагын танилцуулга” дэд хэсэгт дэлгэрэнгүй авч үзэх болно). Хэрэв та RBAC-гүй эсвэл идэвхжээгүй кластер ажиллуулж байгаа бол таны бүх Нууц объектыг ямар ч хэрэглэгч болон контейнер ашиглах боломжтой (бид дараа нь танд RBAC-гүй үйлдвэрлэлийн кластер байх ёсгүй гэдгийг тайлбарлах болно).

Өгөгдлийн идэвхгүй шифрлэлт

Kubernetes-ийн бүх мэдээллийг хадгалдаг etcd мэдээллийн санд хандах эрхтэй хүмүүс яах вэ? Тэд API-ээр дамжуулан Нууц объектуудыг унших зөвшөөрөлгүйгээр нууц мэдээллийг уншиж чадах уу?

1.7 хувилбараас хойш Kubernetes идэвхгүй өгөгдөл шифрлэлтийг дэмждэг. Энэ нь etcd доторх нууц мэдээлэл нь дискэн дээр шифрлэгдсэн байдаг бөгөөд мэдээллийн санд шууд ханддаг хүмүүс ч унших боломжгүй гэсэн үг юм. Үүнийг тайлахын тулд танд зөвхөн Kubernetes API серверт байдаг түлхүүр хэрэгтэй. Зөв тохируулсан кластерт идэвхгүй шифрлэлтийг идэвхжүүлсэн байх ёстой.

Та өөрийн кластерт идэвхгүй шифрлэлт ажиллаж байгаа эсэхийг дараах байдлаар шалгаж болно:

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

Хэрэв та туршилтын-шифрлэлт-үйлүүлэгч-тохируулгын тугийг харахгүй байгаа бол идэвхгүй шифрлэлт идэвхжээгүй байна. Google Kubernetes Engine эсвэл бусад Kubernetes удирдлагын үйлчилгээг ашиглах үед таны өгөгдөл өөр механизм ашиглан шифрлэгдсэн тул туг байхгүй болно. etcd контент шифрлэгдсэн эсэхийг мэдэхийн тулд Kubernetes борлуулагчаасаа шалгана уу.

Нууц мэдээллийг хадгалах

Маш мэдрэмтгий Нууц объектууд гэх мэт кластераас хэзээ ч устгаж болохгүй Kubernetes нөөцүүд байдаг. Та Helm менежерийн өгсөн тэмдэглэгээг ашиглан нөөцийг устгахаас хамгаалж болно:

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

Нууц объектын менежментийн стратеги

Өмнөх хэсгийн жишээнд, нууц мэдээллийг кластерт хадгалсны дараа шууд зөвшөөрөлгүй нэвтрэхээс хамгаалсан. Гэхдээ манифест файлд тэдгээрийг энгийн текст хэлбэрээр хадгалсан.

Хувилбарын удирдлагад байгаа файлуудад нууц мэдээллийг хэзээ ч бүү байрлуул. Та Кубернетес кластерт ашиглахаасаа өмнө энэ мэдээллийг хэрхэн аюулгүйгээр удирдаж, хадгалах вэ?

Та өөрийн аппликешн дэх эмзэг өгөгдөлтэй ажиллах ямар ч хэрэгсэл, стратегийг сонгож болно, гэхдээ та дор хаяж дараах асуултуудад хариулах шаардлагатай хэвээр байна.

  • Эмзэг мэдээллийг өндөр хүртээмжтэй байлгахын тулд хаана хадгалах ёстой вэ?
  • Идэвхтэй програмууддаа нууц мэдээллийг хэрхэн ашиглах боломжтой болгох вэ?
  • Та нууц мэдээллийг солих эсвэл засах үед таны програмд ​​юу тохиолдох вэ?

Зохиогчдын тухай

Жон Арундел компьютерийн салбарт 30 жил ажилласан туршлагатай зөвлөх юм. Тэрээр хэд хэдэн ном бичиж, өөр өөр орны олон компаниудтай хамтран ажиллаж, үүлэн дэд бүтэц, Кубернетесийн талаар зөвлөгөө өгдөг. Чөлөөт цагаараа серфинг хийх дуртай, гар буугаар сайн хардаг, сонирхогчийн хувьд төгөлдөр хуур тоглодог. Английн Корнуолл дахь үлгэрийн зуслангийн байшинд амьдардаг.

Жастин Домингус — Kubernetes болон үүлэн технологи бүхий DevOps орчинд ажилладаг системийн удирдлагын инженер. Тэрээр гадаа цагийг өнгөрөөх, кофе уух, хавчлах, компьютерийн ард суух дуртай. Вашингтоны Сиэтл хотод гайхалтай муур, түүнээс ч гайхалтай эхнэр, хамгийн сайн найз Адриентэй хамт амьдардаг.

» Номын талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой нийтлэгчийн вэбсайт
» Агуулга
» Ишлэл

Khabrozhiteley-ийн хувьд купон ашиглан 25% хөнгөлөлт - Kubernetes

Номын цаасан хувилбарыг төлсний дараа цахим номыг цахим шуудангаар илгээнэ.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх