«Kubernetes for DevOps» кітабы

«Kubernetes for DevOps» кітабы Сәлем, Хабро тұрғындары! Кубернетес заманауи бұлттық экожүйенің негізгі элементтерінің бірі болып табылады. Бұл технология контейнерлік виртуализацияның сенімділігін, ауқымдылығын және тұрақтылығын қамтамасыз етеді. Джон Арундел мен Джастин Домингус Кубернетес экожүйесі туралы әңгімелейді және күнделікті мәселелердің дәлелденген шешімдерін ұсынады. Қадам сайын сіз өзіңіздің жеке бұлттық қолданбаңызды жасайсыз және оны қолдау үшін инфрақұрылым жасайсыз, әзірлеу ортасын және келесі қолданбаларда жұмыс істеуге көмектесетін үздіксіз орналастыру құбырын орнатасыз.

• Контейнерлер мен Кубернеттерді негіздерден бастаңыз: тақырыпты үйрену үшін арнайы тәжірибе қажет емес. • Жеке кластерлеріңізді іске қосыңыз немесе Amazon, Google, т.б. басқарылатын Kubernetes қызметін таңдаңыз. • Контейнердің өмірлік циклін және ресурстарды тұтынуды басқару үшін Kubernetes пайдаланыңыз. • Құн, өнімділік, тұрақтылық, қуат және масштабтау негізінде кластерлерді оңтайландыру. • Қолданбаларды әзірлеу, сынау және орналастыру үшін ең жақсы құралдарды үйреніңіз. • Қауіпсіздік пен бақылауды қамтамасыз ету үшін ағымдағы салалық тәжірибелерді пайдаланыңыз. • Әзірлеу топтары икемді, жылдам және тиімдірек әрекет ете алуы үшін DevOps принциптерін бүкіл компанияңызға енгізіңіз.

Кітап кімге арналған?

Кітап серверлерге, қолданбаларға және қызметтерге жауапты әкімшілік бөлімшелерінің қызметкерлері үшін, сондай-ақ жаңа бұлттық қызметтерді құрумен немесе бұрыннан бар қолданбаларды Kubernetes және бұлтқа көшірумен айналысатын әзірлеушілер үшін өте маңызды. Уайымдамаңыз, сізге Kubernetes немесе контейнерлермен қалай жұмыс істеу керектігін білудің қажеті жоқ - біз сізге бәрін үйретеміз.

Тәжірибелі Kubernetes пайдаланушылары сонымен қатар RBAC, үздіксіз орналастыру, сезімтал деректерді басқару және бақылау мүмкіндігі сияқты тақырыптарды терең қамту арқылы көп құндылықты табады. Кітап беттерінде сіздің дағдыларыңыз бен тәжірибеңізге қарамастан, сіз үшін міндетті түрде қызықты нәрсе болады деп үміттенеміз.

Кітап қандай сұрақтарға жауап береді?

Кітапты жоспарлау және жазу кезінде біз бұлттық технологиялар мен Кубернетесті жүздеген адамдармен талқыладық, сала жетекшілерімен және сарапшылармен, сондай-ақ жаңадан бастағандармен сөйлестік. Төменде олар осы жарияланымда жауап көргісі келетін таңдалған сұрақтар берілген.

  • «Мені неге бұл технологияға уақыт бөлу керек екендігі қызықтырады. Бұл маған және менің командама қандай мәселелерді шешуге көмектеседі?»
  • «Кубернетес қызықты болып көрінеді, бірақ кіруге өте жоғары кедергі бар. Қарапайым мысалды дайындау қиын емес, бірақ одан әрі басқару және жөндеу қиын. Біз адамдар Кубернетес кластерлерін нақты әлемде қалай басқаратыны және қандай мәселелерге тап болуымыз мүмкін екендігі туралы сенімді кеңес алғымыз келеді ».
  • «Субъективті кеңес пайдалы болар еді. Kubernetes экожүйесі жаңа командаларға таңдау үшін тым көп мүмкіндіктер береді. Бір нәрсені жасаудың бірнеше жолы болған кезде, қайсысы жақсы екенін қайдан білуге ​​болады? Қалай таңдау жасауға болады?

Және барлық сұрақтардың ішіндегі ең маңыздысы:

  • «Мен Kubernetes-ті компаниямды бұзбай қалай пайдалана аламын?»

Үзінді. Конфигурация және құпия нысандар

Kubernetes қолданбасының логикасын оның конфигурациясынан (яғни уақыт өте келе өзгеруі мүмкін кез келген мәндерден немесе параметрлерден) бөлу мүмкіндігі өте пайдалы. Конфигурация мәндері әдетте ортаға тән параметрлерді, үшінші тарап қызметінің DNS мекенжайларын және аутентификация тіркелгі деректерін қамтиды.

Әрине, мұның барлығын тікелей кодқа енгізуге болады, бірақ бұл тәсіл жеткілікті икемді емес. Мысалы, конфигурация мәнін өзгерту кодты қайта құруды және орналастыруды талап етеді. Конфигурацияны кодтан бөліп, оны файлдан немесе орта айнымалыларынан оқу әлдеқайда жақсы шешім болар еді.

Kubernetes конфигурацияны басқарудың бірнеше түрлі жолдарын ұсынады. Біріншіден, мәндерді қосымша қаптаманың спецификациясында көрсетілген орта айнымалы мәндері арқылы жіберуге болады («Қоршаған ортаның айнымалы мәндері» 192-бетте қараңыз). Екіншіден, конфигурация деректерін ConfigMap және Secret нысандарын пайдаланып тікелей Kubernetes ішінде сақтауға болады.

Бұл тарауда біз осы нысандарды егжей-тегжейлі зерттейміз және демонстрациялық қолданба арқылы конфигурация мен құпия деректерді басқарудың кейбір практикалық тәсілдерін қарастырамыз.

Конфигурация өзгерген кезде подкладка қабықшаларын жаңарту

Кластеріңізде орналастыру бар және оның ConfigMap ішіндегі кейбір мәндерді өзгерткіңіз келетінін елестетіп көріңіз. Helm диаграммасын пайдалансаңыз («Helm: Kubernetes үшін пакет менеджері» 102-беттен қараңыз), конфигурацияның өзгеруін автоматты түрде анықтап, бір ұқыпты трюкпен қосқыш қабықтарыңызды қайта жүктей аласыз. Орналастыру сипаттамасына келесі аннотацияны қосыңыз:

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

Қолдану үлгісі енді конфигурация параметрлерінің бақылау сомасын қамтиды: егер параметрлер өзгертілсе, сома жаңартылады. Егер сіз штурвалды жаңартуды іске қоссаңыз, Helm орналастыру спецификациясының өзгергенін анықтайды және барлық подкаст қабықшаларын қайта іске қосады.

Kubernetes ішіндегі құпия деректер

Біз ConfigMap нысаны кластердегі конфигурация деректерін сақтау және оған қол жеткізу үшін икемді механизмді қамтамасыз ететінін білеміз. Дегенмен, қолданбалардың көпшілігінде құпия сөздер немесе API кілттері сияқты сезімтал және сезімтал ақпарат бар. Оны ConfigMap ішінде де сақтауға болады, бірақ бұл шешім идеалды емес.

Оның орнына Kubernetes құпия деректерді сақтауға арналған арнайы нысан түрін ұсынады: Құпия. Әрі қарай, бұл нысанды біздің демонстрациялық қосымшамызда қалай қолдануға болатынын мысалға келтірейік.

Бастау үшін Құпия нысанға арналған Кубернетес манифестін қараңыз (hello-secret-env/k8s/secret.yaml қараңыз):

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

Бұл мысалда magicWord жеке кілті xyzzy (en.wikipedia.org/wiki/Xyzzy_(есептеу)) болып табылады. 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 қалтасында орналасқан.

Құпияны файл ретінде қосу үшін біз келесі орналастыруды қолданамыз:

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, біз көлемді жасаймыз (бұл жағдайда демо-құпия-том) және оны спецификацияның volumeMounts бөліміндегі контейнерге орнатамыз. mountPath өрісі /secrets болып табылады, сондықтан Kubernetes құпия нысанда анықталған әрбір кілт/мән жұбы үшін осы қалтада бір файл жасайды.

Біздің мысалда біз magicWord деп аталатын бір ғана кілт-мән жұбын анықтадық, сондықтан манифест контейнердегі құпия деректері бар жалғыз оқуға арналған /secrets/magicWord файлын жасайды.

Бұл манифестті алдыңғы мысалдағыдай қолдансаңыз, бірдей нәтиже алуыңыз керек:

The magic word is "xyzzy"

Құпия объектілерді оқу

Алдыңғы бөлімде ConfigMap мазмұнын көрсету үшін kubectl describe пәрменін пайдаландық. Секретпен де солай жасауға болады ма?

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

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

Data
====
magicWord: 5   bytes

Деректердің өзі көрсетілмейтінін ескеріңіз. Kubernetes-тегі құпия нысандар мөлдір емес, яғни олардың мазмұны kubectl сипаттау шығысында, журнал жазбаларында немесе терминалда көрсетілмейді, сондықтан құпия ақпаратты кездейсоқ ашу мүмкін емес.

Сезімтал деректердің кодталған YAML нұсқасын көру үшін kubectl get пәрменін пайдаланыңыз:

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

негіз 64

Біздің бастапқы мәнімізден мүлде басқа eHl6enk= дегеніміз не? Бұл шын мәнінде base64 кодтауында ұсынылған Құпия нысан. Base64 - символдар тізбегі ретінде ерікті екілік деректерді кодтауға арналған схема.

Сезімтал ақпарат екілік болуы мүмкін және шығарылмауы мүмкін болғандықтан (TLS шифрлау кілті сияқты), құпия нысандар әрқашан base64 пішімінде сақталады.

beHl6enk= мәтіні xyzzy құпия сөзіміздің base64 кодталған нұсқасы болып табылады. Терминалдағы base64 —decode пәрменін іске қосу арқылы мұны тексеруге болады:

echo "eHl6enk=" | base64 --decode
xyzzy

Сонымен, Kubernetes сізді құпия деректерді терминалда немесе журнал файлдарында байқаусызда шығарудан қорғағанымен, егер сізде белгілі бір аттар кеңістігіндегі Құпия нысандарда оқу рұқсаттары болса, бұл деректер базалық 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

Құпия объектілерді басқару стратегиялары

Алдыңғы бөлімдегі мысалда құпия деректер кластерде сақталғаннан кейін бірден рұқсатсыз кіруден қорғалған. Бірақ манифест файлдарында олар кәдімгі мәтін ретінде сақталды.

Ешқашан құпия ақпаратты нұсқаларды басқарудағы файлдарға қоймаңыз. Бұл ақпаратты Kubernetes кластеріне қолданбас бұрын қалай қауіпсіз басқаруға және сақтауға болады?

Қолданбаларыңызда құпия деректерді өңдеуге арналған кез келген құралдарды немесе стратегияларды таңдауға болады, бірақ кем дегенде келесі сұрақтарға жауап беру қажет болады.

  • Құпия деректер қол жетімді болуы үшін қайда сақталуы керек?
  • Белсенді қолданбаларға құпия деректерді қалай қолжетімді етуге болады?
  • Құпия деректерді ауыстырған немесе өңдеген кезде қолданбаларға не болуы керек?

Авторлар туралы

Джон Арундел компьютерлік индустрияда 30 жылдық тәжірибесі бар кеңесші. Ол бірнеше кітаптар жазды және әртүрлі елдердің көптеген компанияларымен жұмыс істейді, оларға бұлттық инфрақұрылым және Кубернетес туралы кеңес береді. Бос уақытында серфингті ұнатады, тапаншадан жақсы атқыш және әуесқой ретінде пианинода ойнайды. Корнуоллдағы, Англиядағы ертегідегі коттеджде тұрады.

Джастин Домингус — Kubernetes және бұлттық технологиялармен DevOps ортасында жұмыс істейтін жүйелерді басқару инженері. Ол ашық ауада уақыт өткізуді, кофе ішуді, крабингті және компьютерде отыруды ұнатады. Сиэтлде (Вашингтон) тамаша мысық және одан да керемет әйелі және ең жақсы досы Адриенмен тұрады.

» Кітап туралы толық ақпаратты мына жерден табуға болады баспагердің веб-сайты
» Мазмұны
» Үзінді

Khabrozhiteley үшін купонды пайдалану арқылы 25% жеңілдік - Kubernetes

Кітаптың қағаз нұсқасын төлегеннен кейін электронды кітап электронды поштаға жіберіледі.

Ақпарат көзі: www.habr.com

пікір қалдыру