Operator pikeun Kubernetes: kumaha ngajalankeun aplikasi stateful

Masalah sareng aplikasi stateful di Kubernetes

Konfigurasi, peluncuran sarta skala salajengna tina aplikasi tur jasa gampang lamun datang ka kasus digolongkeun kana stateless, i.e. tanpa nyimpen data. Éta merenah pikeun ngajalankeun jasa sapertos di Kubernetes, ngagunakeun API baku na, sabab sagalana kajadian "out of the box": nurutkeun konfigurasi baku, tanpa ngalibetkeun sagala specifics atawa magic.

Kantun nempatkeun, pikeun ngaluncurkeun lima salinan deui backend dina PHP / Ruby / Python dina gugusan wadah, anjeun ngan ukur kedah nyetél server énggal 5 kali sareng nyalin sumberna. Kusabab duanana kode sumber sareng skrip init aya dina gambar, skala aplikasi stateless janten lengkep dasar. Salaku fans peti jeung arsitéktur microservice nyaho ogé, kasusah dimimitian ku aktip stateful, i.e. kalayan kegigihan data sapertos pangkalan data sareng cache (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra ...). Ieu lumaku pikeun duanana software nu bebas implements hiji klaster kuorum (Contona, Percona XtraDB na Cassandra), sarta software anu merlukeun utilitas manajemén misah (sapertos Redis, MySQL, PostgreSQL ...).

Kasesahan timbul sabab kode sumber sareng ngaluncurkeun jasa henteu cekap - anjeun kedah ngalakukeun sababaraha léngkah deui. Sahenteuna, nyalin data sareng / atanapi gabung kluster. Leuwih tepatna, jasa ieu merlukeun pamahaman cara bener skala, update na reconfigure aranjeunna tanpa leungitna data atawa unavailability samentara. Nganggap kabutuhan ieu disebut "pangaweruh operasional".

Operator CoreOS

Dina raraga "program" pangaweruh operasional, ahir taun ka tukang proyék CoreOS ngenalkeun "kelas software anyar" pikeun platform Kubernetes - Operator (tina basa Inggris "operasi", nyaéta "operasi").

Operator anu ngagunakeun sareng ngalegaan kamampuan inti Kubernetes (incl. StatefulSets, tingali bédana di handap) ngidinan spesialis DevOps pikeun nambahkeun pangaweruh operasional kana kode aplikasi.

Tujuan Operator - nyadiakeun pamaké kalawan API nu ngidinan Anjeun pikeun ngatur sababaraha éntitas aplikasi stateful dina klaster Kubernetes, tanpa mikir ngeunaan naon di handapeun tiung (data naon jeung naon nu kudu jeung eta, paréntah naon masih kudu dieksekusi pikeun ngajaga klaster. ). Nyatana, Operator dirancang pikeun nyederhanakeun padamelan sareng aplikasi dina kluster saloba mungkin, ngajadikeun otomatis palaksanaan tugas operasional anu sateuacana kedah direngsekeun sacara manual.

Kumaha Operator Gawé

ReplicaSets Kubernetes ngidinan Anjeun pikeun nangtukeun jumlah nu dipikahoyong tina pods ngajalankeun, jeung controller mastikeun yén jumlah maranéhanana dijaga (ku nyieun jeung mupus pods). Hiji Operator jalan dina cara nu sarupa, nambahkeun sakumpulan pangaweruh operasional kana sumberdaya Kubernetes baku sarta controller nu ngidinan Anjeun pikeun ngalakukeun tindakan tambahan pikeun ngarojong jumlah diperlukeun entitas aplikasi.

Kumaha ieu béda ti StatefulSets, Dirancang pikeun aplikasi anu merlukeun klaster nyadiakeun aranjeunna sumberdaya stateful kayaning neundeun data atawa IP statik? Pikeun aplikasi sapertos, Operator tiasa nganggo StatefulSets (tibatan ReplicaSets) salaku dadasar, nawaran automation tambahan: ngalakukeun tindakan anu diperyogikeun upami aya kacilakaan, ngadamel cadangan, ngapdet konfigurasi, jsb.

Ku kituna, kumaha sadayana ieu dianggo? Operator mangrupikeun daemon manajer anu:

  1. ngalanggan API acara di Kubernetes;
  2. nampi ti éta data ngeunaan sistem (ngeunaan na ReplicaSets, peuteuy, Services teras salajengna.);
  3. narima data ngeunaan Sumberdaya pihak katilu (tingali conto di handap);
  4. meta pikeun penampilan / robah Sumberdaya pihak katilu (contona, pikeun ngarobah ukuran, ngarobah versi, jeung saterusna);
  5. meta kana parobahan dina kaayaan sistem (ngeunaan na ReplicaSets, peuteuy, Services teras salajengna.);
  6. anu paling penting:
    1. nelepon kana API Kubernetes pikeun nyiptakeun sadayana anu diperyogikeun (deui, sorangan ReplicaSets, peuteuy, Services...),
    2. ngalakukeun sababaraha magic (pikeun simplify, Anjeun bisa mikir yén Operator mana kana pods sorangan jeung nelepon paréntah, Contona, pikeun gabung klaster atawa ningkatkeun format data nalika ngamutahirkeun versi).

Operator pikeun Kubernetes: kumaha ngajalankeun aplikasi stateful
Nyatana, sakumaha anu katingali tina gambar, aplikasi anu misah ngan saukur ditambahkeun kana Kubernetes (a biasa deployment с ReplicaSet), anu disebut Operator. Éta hirup dina pod biasa (biasana ngan hiji) sareng, sakumaha aturan, tanggung jawab ngan pikeun na Nami ngaran. aplikasi operator ieu implements API na - sanajan teu langsung, tapi ngaliwatan Sumberdaya pihak katilu di Kubernetes.

Ku kituna, sanggeus urang geus dijieun di Nami ngaran Operator, urang tiasa nambihanana Sumberdaya pihak katilu.

Contona pikeun jsb (tingali di handap pikeun detil):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Conto pikeun Elasticsearch:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Sarat pikeun Operator

CoreOS ngarumuskeun pola utama anu dicandak ku insinyur nalika damel di Operator. Sanaos kanyataan yén sadaya Operator mangrupikeun individu (dijieun pikeun aplikasi khusus kalayan ciri sareng kabutuhan sorangan), nyiptakeunana kedah dumasar kana jinis kerangka anu maksakeun syarat-syarat ieu:

  1. Instalasi kudu dilakukeun ngaliwatan hiji deployment: kubectl nyieun -f SOME_OPERATOR_URL/deployment.yaml - jeung teu merlukeun lampah tambahan.
  2. Nalika masang Operator dina Kubernetes, jinis pihak katilu anu énggal kedah didamel (Sumber Daya Pihak Katilu). Pikeun ngaluncurkeun instansi aplikasi (instansi klaster) sareng ngatur deui (ngamutahirkeun vérsi, pangaturan ukuran, jsb), pangguna bakal nganggo jinis ieu.
  3. Sabisana, anjeun kedah nganggo primitif anu diwangun kana Kubernetes, sapertos Services и ReplicaSetsngagunakeun kode anu diuji sareng kaharti.
  4. Merlukeun kasaluyuan mundur tina Operator jeung rojongan pikeun versi heubeul sumberdaya-dijieun pamaké.
  5. Upami Operator dileungitkeun, aplikasina nyalira kedah terus fungsina tanpa parobihan.
  6. Pamaké kudu bisa nangtukeun versi aplikasi nu dipikahoyong tur orchestrate apdet versi aplikasi. Kurangna apdet parangkat lunak mangrupikeun sumber umum tina masalah operasional sareng kaamanan, ku kituna Operator kedah ngabantosan pangguna dina masalah ieu.
  7. Operator kedah diuji ku alat sapertos Chaos Monkey, anu ngidentipikasi poténsi gagal dina pods, konfigurasi, sareng jaringan.

Operator jsb

Conto Palaksanaan Operator - Operator jsb, disiapkeun dina dinten pengumuman konsep ieu. Konfigurasi kluster jsbd tiasa rumit kusabab kabutuhan pikeun ngajaga kuorum, kabutuhan pikeun ngonpigurasikeun deui kaanggotaan klaster, nyiptakeun cadangan, jsb. Contona, sacara manual skala kluster jsb hartina anjeun kudu nyieun ngaran DNS pikeun anggota kluster anyar, ngamimitian hiji éntitas etcd anyar, jeung waspada kluster ngeunaan anggota anyar (anggota jsbdctl nambahkeun). Dina kasus Operator, pangguna ngan ukur kedah ngarobih ukuran klaster - sadayana anu sanésna bakal otomatis kajantenan.

Sarta saprak etcd ieu ogé dijieun dina CoreOS, éta rada logis ningali Operator na muncul munggaran. Kumaha anjeunna dianggo? Logika operator jsb ditangtukeun ku tilu komponén:

  1. Nitenan. Operator ngawas kaayaan klaster nganggo API Kubernetes.
  2. Analisis. Manggihan béda antara status ayeuna jeung nu dipikahoyong (ditetepkeun ku konfigurasi pamaké).
  3. Aksi. Ngabéréskeun bédana anu dideteksi nganggo API jasa jsbd sareng/atanapi Kubernetes.

Operator pikeun Kubernetes: kumaha ngajalankeun aplikasi stateful

Pikeun nerapkeun logika ieu, fungsi geus disiapkeun dina Operator Jieun / ngancurkeun (nyieun sarta mupus anggota kluster etcd) jeung Ukuran (robah jumlah anggota klaster). Kabeneran operasina dipariksa nganggo utilitas anu diciptakeun dina sasaruaan Chaos Monkey ti Netflix, nyaéta. maehan pods etcd acak.

Pikeun operasi pinuh jsbd, Operator nyadiakeun fitur tambahan: Nyadangkeun (otomatis sareng teu katingali ku pangguna nyiptakeun salinan cadangan - dina konfigurasi éta cukup pikeun nangtukeun sabaraha sering ngadamelna sareng sabaraha anu disimpen - sareng pamulihan data salajengna ti aranjeunna) sareng pamutahiran (ngamutahirkeun pamasangan jsb tanpa downtime).

Kumaha damel sareng Operator sapertos katingal?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

Status ayeuna of etcd Operator mangrupakeun versi béta, merlukeun Kubernetes 1.5.3+ jeung etcd 3.0+ pikeun ngajalankeun. Kode sumber jeung dokuméntasi (kaasup parentah pikeun pamakéan) sadia di GitHub.

conto palaksanaan sejen tina CoreOS geus dijieun - Operator Prometheus, tapi masih dina versi alfa (teu sakabeh fitur rencanana geus dilaksanakeun).

Status jeung prospek

5 bulan geus kaliwat saprak pengumuman Operator Kubernetes. Masih aya ngan ukur dua palaksanaan anu aya dina gudang resmi CoreOS (pikeun jsbd sareng Prometheus). Duanana teu acan ngahontal versi stabil maranéhanana, tapi commits dititénan dina dasar poean.

Pamekar ngabayangkeun "masa depan dimana pangguna masang Operator Postgres, Operator Cassandra atanapi Operator Redis dina klaster Kubernetes na sareng damel sareng éntitas anu tiasa skala aplikasi ieu sagampil nyebarkeun réplika aplikasi wéb stateless ayeuna." kahiji Operator ti pamekar pihak katilu bener mimiti muncul:

Dina konferensi software bébas Éropa panggedéna FOSDEM, anu lumangsung dina bulan Pebruari 2017 di Brussel, Josh Wood ti CoreOS ngumumkeun Operator di laporan (Video sayogi dina tautan!), Anu kedah nyumbang kana kamekaran popularitas konsép ieu dina komunitas Open Source anu langkung lega.

PS Hatur nuhun pikeun kapentingan anjeun dina artikel! Ngalanggan hub kami, supados teu kantun bahan sareng resep anyar dina DevOps sareng administrasi sistem GNU/Linux - kami bakal nyebarkeun sacara rutin!

sumber: www.habr.com

Tambahkeun komentar