Di akhir musim panas, kami ingin mengingatkan Anda bahwa kami terus mengerjakan topik Kubernetes dan memutuskan untuk menerbitkan artikel di Stackoverflow yang mendemonstrasikan keadaan proyek ini pada awal Juni.
Selamat membaca!
Pada saat tulisan ini dibuat, Kubernetes berusia sekitar enam tahun , dan semakin populer selama dua tahun terakhir sehingga secara konsisten ia menempati peringkat di antara platform yang paling disukai . Kubernetes berada di posisi ketiga tahun ini. Sebagai pengingat, Kubernetes adalah platform untuk menjalankan dan mengatur beban kerja dalam container.
Container berasal dari konstruksi khusus untuk proses isolasi di Linux; container telah menjadi cgroups sejak 2007 dan namespace sejak 2002. Kontainer tersebut menjadi lebih baik pada tahun 2008, ketika LXC tersedia , dan Google mengembangkan mekanisme internalnya sendiri yang disebut Borg.di mana "semua pekerjaan dilakukan dalam wadah". Dari sini, maju cepat ke 2013, saat rilis pertama Docker berlangsung, dan container akhirnya dipindahkan ke kategori solusi massal populer. Saat itu, Mesos adalah alat utama untuk mengatur kontainer , meskipun tidak terlalu populer. Rilis pertama Kubernetes dilakukan pada tahun 2015, setelah itu alat ini menjadi standar de facto di bidang orkestrasi container.
Untuk mencoba memahami mengapa Kubernetes begitu populer, mari kita coba menjawab beberapa pertanyaan. Kapan terakhir kali pengembang dapat menyetujui tentang cara menerapkan aplikasi ke produksi? Berapa banyak pengembang yang Anda kenal yang menggunakan alat karena alat disediakan langsung? Berapa banyak administrator cloud saat ini yang tidak memahami cara kerja aplikasi? Kami akan membahas jawaban atas pertanyaan-pertanyaan ini di artikel ini.
Infrastruktur sebagai YAML
Di dunia yang telah beralih dari Puppet dan Chef ke Kubernetes, salah satu perubahan terbesar adalah perpindahan dari infrastruktur sebagai kode ke infrastruktur sebagai data - khususnya seperti YAML. Semua sumber daya di Kubernetes, yang mencakup pod, konfigurasi, instance yang diterapkan, volume, dll., Dapat dengan mudah dijelaskan dalam file YAML. Misalnya:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
Tampilan ini memudahkan DevOps atau SRE untuk mengekspresikan beban kerjanya sepenuhnya tanpa harus menulis kode dalam bahasa seperti Python atau Javascript.
Keuntungan lain dari mengatur infrastruktur sebagai data, khususnya, adalah sebagai berikut:
- GitOps Git Operations Version. YAML- Kubernetes git, , , , . , , , , . , Kubernetes – pull-.
- . YAML, Kubernetes, . Kubernetes , , , , . , , - , maxReplicas 10 20:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 1
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- . YAML , Kubernetes. , , , , - , . conftest, YAML/JSON, Open Policy Agent, , , SecurityContext . , rego, :
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
- . – . cloud-provider Kubernetes , . , Kubernetes AWS ,
LoadBalancer, Amazon Elastic Load Balancer, .
Kubernetes sangat bisa dikembangkan dan developer menyukainya. Ada kumpulan sumber daya yang tersedia, seperti pod, sweep ,,
StatefulSetsrahasia ConfigMaps, dll. Namun, pengguna dan pengembang dapat menambahkan sumber daya lain dalam bentuk definisi sumber daya kustom .
Misalnya, jika kita ingin mendefinisikan sumber daya
CronTab, kita dapat melakukan sesuatu seperti ini:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.my.org
spec:
group: my.org
versions:
- name: v1
served: true
storage: true
Schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$'
replicas:
type: integer
minimum: 1
maximum: 10
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
Nanti, kita dapat membuat sumber daya CronTab seperti ini:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
Opsi lain untuk ekstensibilitas di Kubernetes adalah pengembang dapat menulis operator mereka sendiri. Operator adalah proses khusus dalam cluster Kubernetes yang beroperasi dalam pola " loop kontrol " . Dengan bantuan operator, pengguna dapat mengotomatiskan pengelolaan CRD (definisi sumber daya khusus) dengan bertukar informasi dengan API Kubernetes.
Ada beberapa alat di komunitas yang memudahkan pengembang membuat operatornya sendiri. Diantaranya adalah Operator Framework dan Operator SDK-nya . SDK ini menyediakan kerangka kerja yang darinya pengembang dapat dengan cepat mulai membuat pernyataan. Katakanlah Anda dapat memulai dari baris perintah seperti ini:
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
Ini membuat semua kode stereotip untuk operator Anda, termasuk file YAML dan kode Golang:
.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go
Kemudian Anda dapat menambahkan API dan pengontrol yang Anda inginkan, seperti ini:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService
Kemudian, terakhir, kumpulkan operator dan kirimkan ke registri penampung Anda:
$ operator-sdk build your.container.registry/youruser/myapp-operator
Jika pengembang membutuhkan lebih banyak kontrol, Anda dapat mengubah kode stereotip di file menjadi Go. Misalnya, untuk mengubah spesifikasi pengontrol, Anda dapat membuat perubahan pada file
controller.go.
Proyek lain, KUDO , memungkinkan Anda membuat pernyataan hanya menggunakan file YAML deklaratif. Misalnya, operator Apache Kafka akan didefinisikan seperti ini . Dengannya, Anda dapat menginstal cluster Kafka di atas Kubernetes hanya dengan beberapa perintah:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafka
Dan kemudian konfigurasikan dengan perintah lain:
$ kubectl kudo install kafka --instance=my-kafka-name \
-p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \
-p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \
-p BROKER_COUNT=5 -p BROKER_MEM=4096m \
-p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \
-p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20
Inovasi
Selama beberapa tahun terakhir, rilis utama Kubernetes telah dirilis setiap beberapa bulan - yaitu, tiga hingga empat rilis utama per tahun. Jumlah fitur baru yang diterapkan di masing-masing fitur tidak berkurang. Selain itu, tidak ada tanda-tanda penurunan bahkan di masa-masa sulit kita - lihat aktivitas proyek Kubernetes saat ini di Github .
Kemampuan baru memungkinkan Anda untuk lebih fleksibel mengelompokkan operasi di berbagai beban kerja. Selain itu, pemrogram menyukai lebih banyak kontrol saat menerapkan aplikasi langsung ke produksi.
Masyarakat
Aspek utama lain dari popularitas Kubernetes adalah kekuatan komunitasnya. Pada 2015, setelah mencapai versi 1.0, Kubernetes disponsori oleh Cloud Native Computing Foundation .
Ada juga berbagai komunitas SIG (Kelompok Minat Khusus) yang berfokus pada area berbeda di Kubernetes seiring dengan perkembangan proyek. Grup-grup ini terus menambahkan fitur baru agar bekerja dengan Kubernetes lebih nyaman dan nyaman.
Cloud Native Foundation juga menyelenggarakan CloudNativeCon / KubeCon, yang merupakan konferensi open source terbesar di dunia pada saat penulisan ini. Biasanya, ini diadakan tiga kali setahun dan mempertemukan ribuan profesional yang ingin meningkatkan Kubernetes dan ekosistemnya, serta menguasai fitur-fitur baru yang muncul setiap tiga bulan.
Selain itu, Cloud Native Foundation memiliki Komite Pengawasan Teknis , yang, bersama dengan SIG, meninjau proyek yayasan baru dan yang sudah ada yang berfokus pada ekosistem cloud. Sebagian besar proyek ini membantu meningkatkan kekuatan Kubernetes.
Akhirnya, saya percaya bahwa Kubernetes tidak akan mencapai kesuksesan seperti itu tanpa upaya yang disengaja dari seluruh komunitas, di mana orang-orang saling berpelukan, tetapi pada saat yang sama, dengan senang hati menerima pendatang baru ke dalam barisan mereka.
Masa depan
Salah satu tantangan utama yang harus dihadapi pengembang di masa depan adalah kemampuan untuk fokus pada detail kode itu sendiri, daripada infrastruktur tempat ia beroperasi. Tren inilah yang direspon oleh paradigma arsitektur tanpa server , yang merupakan salah satu yang terdepan saat ini. Sudah ada kerangka kerja lanjutan seperti Knative dan OpenFaas yang menggunakan Kubernetes untuk mengabstraksi infrastruktur dari pengembang.
Dalam artikel ini, kita hanya melihat sekilas tentang keadaan Kubernetes saat ini - sebenarnya, ini hanyalah puncak gunung es. Pengguna Kubernetes memiliki banyak sumber daya, kemampuan, dan konfigurasi yang mereka miliki.