
Kubernetes alias k8s
adalah sistem open source untuk mengotomatiskan penerapan, penskalaan, dan pengelolaan aplikasi yang k8s
. Dalam artikel ini, saya akan menunjukkan kepada Anda cara mengkonfigurasi cluster Kubernetes dan menggunakan cluster Elasticsearch ke AWS di atasnya. Pengaturan ini juga berfungsi pada GCE dan Azure .
Mengkonfigurasi Kubernetes di AWS
Untuk memulai, dapatkan akses administratif ke layanan AWS berikut: S3, EC2, Route53, IAM, dan VPC .
1. Instalasi: Saya akan menunjukkan instalasi CLI untuk Linux. Jika Anda memiliki sistem operasi yang berbeda, ikuti tautan di bawah ini untuk instruksi instalasi untuk OS Anda.
Pertama, atur AWS CLI untuk mengakses AWS melalui CLI. Jika Anda sudah memiliki Python dan pip, jalankan perintah:
pip install awscli --upgrade --user
Kemudian kita menggunakan Kops , alat baris perintah yang membawa kita melalui pengaturan cluster tingkat produksi K8S.
Instal binari Kops langsung dari github.
wget -O kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64 chmod +x ./kops sudo mv ./kops /usr/local/bin/
Akhirnya, kami menggunakan kubectl - CLI untuk mengelola cluster K8S (jika Anda menggunakan buruh pelabuhan, ini mirip dengan buruh pelabuhan CLI). Rilis terbaru diinstal oleh perintah:
wget -O kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl
Catatan: Anda bisa memulai kluster Kubernetes dan ikuti instruksi dalam artikel ini di mesin rumah dengan minikube .
2.Buat pengguna IAM: untuk membuat kluster di AWS, kami akan membuat pengguna IAM terpisah untuk kops
. Untuk kops
memerlukan akun API. Buat pengguna dan konfigurasikan akun melalui antarmuka pengguna konsol AWS . Pengguna kops
akan membutuhkan izin IAM berikut:
- AmazonEC2FullAccess
- AmazonRoute53FullAccess
- AmazonS3FullAccess
- IAMFullAccess
- AmazonVPCFullAccess

Atau, Anda dapat melakukan hal yang sama dari CLI dengan menerapkan perintah berikut:
aws iam create-group --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops aws iam create-user --user-name kops aws iam add-user-to-group --user-name kops --group-name kops aws iam create-access-key --user-name kops
Catat AccessKeyID
SecretAccessKey
dan AccessKeyID
di kops
.
Konfigurasikan AWS CLI untuk menggunakan akun Anda dengan aws configure
.
Pastikan pengguna yang Anda buat ada di daftar aws iam list-users
.
Kami mengekspor akun AWS sebagai variabel lingkungan berikut sehingga CLI kops
dapat menggunakannya.
export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
Jika Anda menggunakan Kops 1.6.2 atau yang lebih baru, pengaturan DNS adalah opsional. Anda dapat membuat cluster gosip. Satu-satunya persyaratan: nama cluster harus diakhiri dengan .k8s.local
.
Penyiapan DNS
Jika Anda telah meng-host domain Anda melalui AWS dan berencana untuk menggunakannya, tidak ada yang perlu dilakukan. Opsi lain: jika Anda ingin menggunakan subdomain dari domain Anda, buat zona hosting publik kedua untuk subdomain ini. Dalam manual ini, kami akan bekerja dengan zona hosting pribadi. Tetapkan zona dengan nama apa pun. Gunakan nama ini untuk membuat cluster Kubernetes. Baca lebih lanjut tentang pengaturan DNS di sini .
3. Membuat bucket S3: untuk menyimpan status dan tampilan cluster K8S kami, Anda perlu membuat bucket S3 terpisah untuk kops
. Ember ini akan menjadi sumber data yang dapat diandalkan untuk klaster konfigurasi.
aws s3api create-bucket \ --bucket <your-unique-bucket-name> \ --region us-east-1
Catatan: jika Anda mengoperasikan bucket di area selain us-east-1
, selain pengaturan - region
alihkan ke area yang diinginkan dan tambahkan LocationConstraint
ke area yang sama. Berikut ini menunjukkan perintah build bucket di wilayah us-west-1
.
aws s3api create-bucket \ --bucket <your-unique-bucket-name> \ --region us-west-1 \ --create-bucket-configuration LocationConstraint=us-west-1
Untuk mengonfigurasi penyimpanan untuk versi bucket S3 untuk pemulihan, gunakan perintah berikut:
aws s3api put-bucket-versioning \ --bucket <your-unique-bucket-name> \ --versioning-configuration Status=Enabled
4. Membuat cluster Kubernetes pertama: Jadi, Anda siap membuat cluster pertama Anda! Pertama, atur variabel lingkungan untuk menyederhanakan proses. Jika Anda melewatkan konfigurasi DNS (setelah langkah 2), tambahkan .k8s.local
ke nilai NAME
.
export NAME=myfirstcluster.example.com export KOPS_STATE_STORE=s3://your-bucket-name
Jangan lupa untuk melacak zona regional mana yang tersedia untuk Anda. Dalam contoh ini, kami akan menggunakan cluster di wilayah us-east-2 .
aws ec2 describe-availability-zones --region us-east-2
Jika Anda menggunakan zona hosting publik, buat sebuah cluster menggunakan perintah berikut:
kops create cluster \ --zones us-east-2c \ --node-count 3 \ ${NAME}
Jika Anda menggunakan zona hosting pribadi, lakukan:
kops create cluster \ --zones us-east-2c \ --node-count 3 \ --dns private ${NAME}
Perintah ini akan memberi Anda log konfigurasi cluster K8S. Cluster membutuhkan waktu untuk memulai, karena ia menciptakan mesin EC2 baru untuk node master minion.
[ec2-user@ip-172-31-35-145 test]$ kops create cluster \ > --dns private \ > --zones us-east-2c \ > --node-count 3 \ > ${NAME} --yes I0306 09:45:29.636834 20628 create_cluster.go:439] Inferred --cloud=aws from zone "us-east-2c" I0306 09:45:29.637030 20628 create_cluster.go:971] Using SSH public key: /home/ec2-user/.ssh/id_rsa.pub I0306 09:45:29.850021 20628 subnets.go:184] Assigned CIDR 172.20.32.0/19 to subnet us-east-2c I0306 09:45:31.118837 20628 dns.go:92] Private DNS: skipping DNS validation I0306 09:45:46.986963 20628 executor.go:91] Tasks: 73 done / 73 total; 0 can run I0306 09:45:46.987101 20628 dns.go:153] Pre-creating DNS records I0306 09:45:47.668392 20628 update_cluster.go:248] Exporting kubecfg for cluster kops has set your kubectl context to k8s.appbase Cluster is starting. It should be ready in a few minutes.
Voila! Cluster K8s seharusnya sudah berfungsi.
5. Pemeriksaan cluster: semua instance yang dibuat oleh kops
berada di ASG (Grup Penskalaan Otomatis) . Jika terjadi kegagalan, instance ASG diperiksa dan secara otomatis dibangun kembali.
Untuk mengubah konfigurasi cluster, jalankan perintah berikut:
kops edit cluster ${NAME}
Setiap kali Anda mengubah konfigurasi cluster, Anda harus membuat cluster dengan menjalankan perintah berikut:
kops update cluster ${NAME} --yes
Anda akan melihat sesuatu seperti ini.
[ec2-user@ip-172-31-35-145 examples]$ kops update cluster --yes Using cluster from kubectl context: k8s.appbase I0216 05:09:06.074467 2158 dns.go:92] Private DNS: skipping DNS validation I0216 05:09:07.699380 2158 executor.go:91] Tasks: 73 done / 73 total; 0 can run I0216 05:09:07.699486 2158 dns.go:153] Pre-creating DNS records I0216 05:09:07.961703 2158 update_cluster.go:248] Exporting kubecfg for cluster kops has set your kubectl context to k8s.appbase Cluster changes have been applied to the cloud.
Periksa kluster.
kops validate cluster
Pastikan bahwa cluster sudah berfungsi.
Using cluster from kubectl context: k8s.appbase Validating cluster k8s.appbase INSTANCE GROUPS NAME ROLE MACHINETYPE MIN MAX SUBNETS master-us-east-2c Master t2.large 1 1 us-east-2c nodes Node t2.medium 3 3 us-east-2c NODE STATUS NAME ROLE READY ip-172-20-44-33.us-east-2.compute.internal master True ip-172-20-52-48.us-east-2.compute.internal node True ip-172-20-62-30.us-east-2.compute.internal node True ip-172-20-64-53.us-east-2.compute.internal node True Your cluster k8s.appbase is ready
Lihat k8 baru Anda!
Dengan panggilan sederhana ke API Kubernetes, Anda dapat memeriksa apakah API sedang online dan mendengarkan. Gunakan kubectl
untuk memeriksa node.
kubectl get nodes
Ini akan memberikan informasi tentang node Anda dan status mereka saat ini.
[ec2-user@ip-172-31-35-145 elasticsearch]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-172-20-44-33.us-east-2.compute.internal Ready master 1m v1.8.6 ip-172-20-52-48.us-east-2.compute.internal Ready node 3m v1.8.6 ip-172-20-62-30.us-east-2.compute.internal Ready node 2m v1.8.6 ip-172-20-64-53.us-east-2.compute.internal Ready node 4m v1.8.6
Sub Kubernetes adalah abstraksi yang mewakili sekelompok satu atau beberapa wadah aplikasi (seperti Docker) dan beberapa sumber daya bersama untuk wadah ini. Di bawah terbuka pada node. Jika Anda perlu mengukur aplikasi, tambahkan node ke K8S yang digunakan.
Untuk mengetahui tentang pod yang tersedia:
kubectl get pods
Perintah ini akan mendaftar perapian yang tersedia di cluster.
[ec2-user@ip-172-31-35-145 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE es-5967f5d99c-5vcpb 1/1 Running 0 3h es-5967f5d99c-cqk88 1/1 Running 0 3h es-5967f5d99c-lp789 1/1 Running 0 3h
Penerapan Elasticsearch di K8S Cluster

Jika Anda tidak terbiasa dengan Kubernetes, saya sarankan pelatihan online k8s .
Saat ini, kami telah membuat cluster K8S: node utama dan dua node agen. Peran node utama adalah untuk mentransfer perintah penyebaran ke aplikasi yang berjalan di pod agen node.
Penerapan aplikasi K8S bersifat deklaratif dan dikonfigurasi melalui file JSON / YAML. Pilih pengontrol berdasarkan jenis aplikasi atau sistem yang Anda gunakan. Karena Elasticsearch adalah aplikasi stateful, kami akan menggunakan pengontrol StatefulSet.
6. Penempatan melalui StatefulSet. StatefulSet mengelola pod berdasarkan spesifikasi wadah yang identik. Ini mengelola penyebaran dan penskalaan set perapian dan memastikan ketertiban dan keunikan perapian ini. Pengontrol StatefulSet juga memudahkan untuk mengaitkan aplikasi dengan volume persisten, yang penting untuk Elasticsearch.
Buat file bernama es-stateful set. yaml
. Ini akan berisi spesifikasi Elasticsearch. Jangan ragu untuk mengubah konfigurasi. Lihat daftar variabel lingkungan yang dapat diteruskan ke gambar Elasticsearch Anda di sini .
7. Layanan: Service
Kubernetes - abstraksi yang mendefinisikan seperangkat
logis dan akses ke sana. Ini membantu aplikasi kontainer mengidentifikasi aplikasi kontainer lain atau contohnya sendiri dalam perapian yang berbeda.

LoadBalancer
adalah jenis layanan khusus yang menyediakan pod ke jaringan eksternal dan mendistribusikan beban. Kami akan menggunakannya untuk membuat alamat IP eksternal di mana siapa pun dapat menghubungi cluster Elasticsearch. Kami akan menggunakan layanan ini untuk node ES sebagai cara untuk menemukan satu sama lain.
Buat file bernama es-svc.yaml
. Edit dan tentukan layanan penyeimbang beban.
apiVersion: v1 #API Version of the resource kind: Service #Type of resource metadata: #Contains metadata of this resource. name: elasticsearch #Name of this resource labels: #Additional identifier to put on pods component: elasticsearch #puts component = elasticsearch spec: #Specifications of this resource type: LoadBalancer #type of service selector: #will distribute load on pods which component: elasticsearch #have label `component = elasticsearch` ports: #Port on which LoadBalancer will listen - name: http #Name given to port port: 9200 #Port number protocol: TCP #Protocol supported - name: transport #Name given to port port: 9300 #Port number protocol: TCP #Protocol supported
8. Membuat aplikasi: itu saja yang kami butuhkan. Menyebarkan cluster Elasticsearch kami di K8S menggunakan perintah berikut.
kubectl create -f es-statefulset.yaml kubectl create -f es-svc.yaml
'Buat' adalah perintah universal untuk membuat sumber daya apa pun di K8S.
3-node kami (ingat replicas = 3
dalam konfigurasi StatefulSet?) Cluster Elasticsearch akan diluncurkan secara instan.
Kami dapat memeriksa pod Elasticsearch dengan perintah ini:
kubectl get pods
[ec2-user@ip-172-31-35-145 test]$ kubectl get pods,svc,deployment NAME READY STATUS RESTARTS AGE es-0 1/1 Running 0 23m es-1 1/1 Running 0 17m es-2 1/1 Running 0 23m
9. Menguji cluster Elasticsearch: periksa untuk melihat apakah Elasticsearch dikonfigurasi dengan benar dan berfungsi. Dapatkan alamat IP eksternal untuk terhubung ke Elasticsearch. Ini akan berlokasi di layanan LoadBalancer yang kami buat. Gunakan perintah berikut untuk menjelaskan LoadBalancer :
kubectl describe service elasticsearch
[ec2-user@ip-172-31-35-145 examples]$ kubectl describe service elasticsearch Name: elasticsearch Namespace: default Labels: component=elasticsearch Annotations: <none> Selector: component=elasticsearch Type: LoadBalancer IP: 100.70.114.146 LoadBalancer Ingress: http://a4d0c157d212811e898430af47d23da1-952261901.us-east-2.elb.amazonaws.com Port: http 9200/TCP TargetPort: 9200/TCP NodePort: http 31358/TCP Endpoints: 100.96.4.28:9200 Port: transport 9300/TCP TargetPort: 9300/TCP NodePort: transport 31767/TCP Endpoints: 100.96.4.28:9300 Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer [ec2-user@ip-172-31-35-145 examples]$
Perhatikan nilai LoadBalancer Ingress
. Buka browser dengan URI dan nomor akhiran dari port eksternal Elasticsearch: 9200
. Anda akan melihat ini:

Anda dapat memeriksa fungsionalitas node Elasticsearch dengan menambahkan: 9200/_cluster /health?pretty
ke alamat IP eksternal.

10. Kubernetes Healing Testing: StatefulSets memiliki kemampuan untuk menyimpan jumlah replika yang ditentukan. Dengan begitu, jika sub jatuh, StatefulSet akan memulai sub baru.
Kami akan mengujinya dengan mensimulasikan kegagalan (menghapus semua pod tempat ES kami dijalankan) untuk melihat apakah cluster ES kami dapat secara otomatis mencadangkan dengan data yang utuh.

Karena StatefulSet menjalankan satu perapian pada satu waktu, dibutuhkan waktu untuk memulihkan semua kontainer.
Kita melihat bahwa setelah pemulihan perapian, catatan yang diindeks tersedia bagi kita di negara bagian sebelum kegagalan ES.
Disarankan langkah selanjutnya
Sebelum menggunakan pengaturan ini dalam produksi, harap diperhatikan:
- Konfigurasikan cadangan. Membantu memulihkan data yang hilang. Proses ini paling baik otomatis.
- Penyiapan otorisasi. Kami ingin melindungi cluster Elasticsearch. Menyiapkan otentikasi atau otorisasi dasar berdasarkan token media akan memberikan keamanan.
- Sertifikat TLS. Konfigurasikan LetsEncrypt / penyedia TLS lainnya dari sertifikat pemetaan domain pribadi untuk kelompok ES kami dan lindungi semua permintaan yang dikirim kepadanya.
Meskipun artikelnya bukan tentang itu, tetapi ketahuilah: Kubernetes dapat melakukan semua ini.
Asli: Menyebarkan Elasticsearch dengan Kubernetes di AWS dalam 10 langkah