Peternak: Kubernet dalam 5 menit dengan logam kosong

Di persimpangan, orkestra tidak berubah.

Setelah saya benar-benar bosan dengan Docker Swarm karena kesederhanaan semu dan penyelesaian yang konstan, pekerjaan yang sangat tidak nyaman dengan sistem file terdistribusi, antarmuka web yang sedikit basah dan fungsi yang sempit, serta kurangnya dukungan "di luar kotak" integrasi GitLab, diputuskan untuk menggunakan kluster Kubernet Anda pada perangkat keras Anda sendiri, yaitu, dengan menggunakan Rancher Management Server 2.0.

Pengalaman pemasangan, skema toleransi kesalahan, bekerja dengan haProxy dan dua dasbor di bawah kucing:

Input data:

Server Host HP Proliant DL320e Gen8 - 2 pcs.
VM Ubuntu Server 16.04, 2Gb RAM, 2vCPU, 20Gb HDD - 1 pc. pada setiap Host (VM-haProxy).
VM Ubuntu Server 16.04, RAM 4Gb, 4vCPU, HDD 40Gb, 20 Gb SSD - 3 pcs. pada setiap Host (VM - * - Cluster).
VM Ubuntu Server 16.04, RAM 4Gb, 4vCPU, 100Gb HDD - 1 pc. pada siapa pun Host (VM-NFS).

Diagram jaringan:

Fig. 1


Mulai:

VM-haProxy memiliki aturan haProxy, fail2ban, iptables. Bertindak sebagai gateway untuk semua mesin di belakangnya. Kami memiliki dua gateway dan semua mesin jika kehilangan komunikasi gateway pada host mereka akan beralih ke yang lain.

Tugas utama dari node-node ini (VM-haProxy) adalah untuk mendistribusikan akses ke backend, menyeimbangkan, meneruskan port, dan mengumpulkan statistik.

Pilihan saya jatuh pada haProxy, sebagai alat yang lebih sempit tentang penyeimbangan dan pemeriksaan kesehatan. Untuk semua ini, saya suka sintaks arahan konfigurasi dan bekerja dengan daftar putih dan hitam IP, serta bekerja dengan koneksi SSL multi-domain.

Konfigurasi HaProxy:

haproxy.conf dengan komentar
########################################################## #Global # ########################################################## global log 127.0.0.1 local0 notice maxconn 2000 user haproxy group haproxy tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull retries 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000 option forwardfor option http-server-close ########################################################## #TCP # ########################################################## #    API  Kubernetes listen kube-api-tls bind *:6443 mode tcp option tcplog server VM-Master-Cluster Master:6443 ########################################################## #HTTP/HTTPS - Frontend and backend # ########################################################## #      "  ", frontend  backend. frontend http-in bind *:80 acl network_allowed src -f /path/allowed-ip #     IP.     . http-request deny if !network_allowed #       IP  . reqadd X-Forwarded-Proto:\ http mode http option httpclose acl is_haproxy hdr_end(host) -i haproxy.domain.ru acl is_rancher hdr_end(host) -i rancher.domain.ru acl is_kubernetes hdr_end(host) -i kubernetes.domain.ru use_backend kubernetes if is_kubernetes use_backend rancher if is_rancher use_backend haproxy if is_haproxy frontend https-in bind *:443 ssl crt-list /path/crt-list #    .        . acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed reqadd X-Forwarded-Proto:\ https acl is_rancher hdr_end(host) -i rancher.etraction.ru acl is_kubernetes hdr_end(host) -i kubernetes.etraction.ru use_backend kubernetes if is_kubernetes { ssl_fc_sni kubernetes.domain.ru } use_backend rancher if is_rancher { ssl_fc_sni rancher.domain.ru } # Backend  haProxy.    . backend haproxy stats enable stats uri /haproxy?stats stats realm Strictly\ Private stats auth login:passwd cookie SERVERID insert nocache indirect #  , , backend   dashboard rancher  kubernetes. backend rancher acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http redirect scheme https if !{ ssl_fc } server master master:443 check ssl verify none backend kubernetes acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http balance leastconn redirect scheme https if !{ ssl_fc } server master master:9090 check ssl verify none 


Penting: Semua mesin harus โ€œsaling mengenalโ€ dengan nama host.

add-host-entry.pp boneka wayang untuk menambahkan nama host di / etc / hosts
 class host_entries { host { 'proxy01': ip => '10.10.10.11', } host { 'proxy02': ip => '10.10.10.12', } host { 'master': ip => '10.10.10.100', } host { 'node01': ip => '10.10.10.101', } host { 'node02': ip => '10.10.10.102', } host { 'node03': ip => '10.10.10.103', } host { 'node04': ip => '10.10.10.104', } host { 'node05': ip => '10.10.10.105', } host { 'nfs': ip => '10.10.10.200', } } 


VM-Master-Cluster adalah mesin kontrol utama. Ini berbeda dari node lain di papan oleh Puppet Master, GlusterFS Server, Rancher Server (container), etcd (container), control manager (container). Dalam kasus pemutusan host ini, layanan produksi terus bekerja.
VM-Node-Cluster - Nodes, Pekerja. Mesin kerja yang sumber dayanya akan digabungkan menjadi satu lingkungan yang toleran terhadap kesalahan. Tidak ada yang menarik.

VM-NFS - server NFS (nfs-kernel-server). Tugas utama adalah menyediakan ruang penyangga. Menyimpan file konfigurasi dan semua. Tidak menyimpan sesuatu yang penting. Jatuhnya bisa diperbaiki perlahan, sambil minum kopi.

Penting: Semua mesin lingkungan harus ada di papan: docker.io, nfs-common, gluster-server.

must-have-paket.pp boneka wayang untuk menginstal perangkat lunak yang tepat
 class musthave { package { 'docker.io': ensure => 'installed', } package { 'nfs-common': ensure => 'installed', } package { 'gluster-server': ensure => 'installed', } } 


Saya tidak akan menjelaskan instalasi nfs-volume dan konfigurasi GlusterFS, karena ini dijelaskan dengan murah hati dalam jumlah besar.

Jika Anda melihat ada disk SSD dalam deskripsi spesifikasi, mereka disiapkan untuk pengoperasian sistem file terdistribusi Gluster. Buat partisi, dan penyimpanan pada disk berkecepatan tinggi.

Catatan Sebenarnya, menjalankan Peternakan tidak memerlukan lingkungan seperti cermin. Semua hal di atas adalah visi kluster dan deskripsi praktik apa yang saya ikuti.

Untuk menjalankan Rancher, satu mesin sudah cukup, dengan 4CPU, 4Gb RAM, 10Gb HDD.

5 menit ke Peternakan.

Pada VM-Master-Cluster kami melakukan:

 sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher 

Periksa ketersediaan:

 curl -k https://localhost 

Jika Anda melihat API - saya mengucapkan selamat kepada Anda tepat setengah jalan berlalu.

Melihat diagram jaringan lagi, kami ingat bahwa kami akan bekerja dari luar, melalui haProxy, dalam konfigurasi kami telah menerbitkan tautan rancher.domain.ru , silakan , atur kata sandi Anda.

Halaman selanjutnya adalah Halaman Penciptaan Cluster Kubernetes.

Gbr.2


Dari menu Cluster Options, pilih Flannel. Saya tidak bekerja dengan penyedia jaringan lain. Saya tidak bisa memberi saran.

Perlu memperhatikan fakta bahwa kami memasang kotak centang, dll, dan Control Plane, pekerja kotak centang tidak diinstal, jika Anda tidak berencana menggunakan manajer dalam mode pekerja.
Kami bekerja di dalam jaringan lokal, dengan alamat yang sama pada NIC, jadi di bidang Public dan Internal Address ditunjukkan IP yang sama.

Salin kode yang dihasilkan di atas, jalankan di konsol.

Setelah beberapa waktu, di antarmuka web Anda akan melihat pesan tentang menambahkan node. Dan setelah beberapa waktu, Anda akan memulai cluster Kubernetes.

Gbr.3


Untuk menambah pekerja, buka untuk mengedit cluster di antarmuka web Rancher, Anda akan melihat menu yang sama yang menghasilkan perintah koneksi.

Setel kotak centang hanya ke posisi pekerja, tentukan IP pekerja masa depan, salin perintah dan jalankan di konsol node yang Anda butuhkan.

Setelah beberapa saat, kekuatan cluster akan meningkat, seperti jumlah node.

Instal Kubernetes Dashboard:

Buka menu Projects / Namespaces.

Setelah instalasi, Anda akan melihat bahwa ruang nama yang terkait dengan Kubernetes akan dimuat di luar proyek. Untuk sepenuhnya bekerja dengan ruang nama ini, mereka harus ditempatkan di proyek.

Tambahkan proyek, beri nama sesuai keinginan. Pindahkan ruang nama (sistem ternak, ingress-nginx, sistem kubus publik, sistem kubus) ke proyek yang Anda buat menggunakan menu konteks "Pindahkan". Seharusnya seperti ini:

Fig. 4


Klik langsung pada nama proyek, Anda akan dibawa ke panel kontrol beban kerja. Di sinilah kita akan membahas cara membuat layanan sederhana.

Gbr.5


Klik "Impor YAML" di sudut kanan atas. Salin dan rekatkan isi file ini ke dalam kotak teks dari jendela yang terbuka, pilih namespace "sistem kubus", klik "Impor".

Setelah beberapa waktu, pod kubernetes-dashboard akan mulai.

Buka pengeditan pod, buka menu port publishing, tetapkan nilai berikut:

Gbr.6


Periksa akses pada node tempat pod dijalankan.

 curl -k https://master:9090 

Lihat jawabannya? Publikasi selesai, masih untuk mencapai bagian administrasi.

Di halaman utama manajemen cluster di Rancher, ada alat yang sangat mudah, seperti kubectl - konsol manajemen cluster dan File Kubeconfig - file konfigurasi yang berisi alamat API, ca.crt, dll.

Kami masuk ke kubectl dan mengeksekusi:

 kubectl create serviceaccount cluster-admin-dashboard-sa kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa 

Kami membuat akun layanan dengan hak istimewa tertinggi, sekarang kami membutuhkan token untuk mengakses Dasbor.

Temukan rahasia akun yang dibuat:

 kubectl get secret | grep cluster-admin-dashboard-sa 

Kami akan melihat nama akun dengan hash tertentu di akhir, salin dan jalankan:

 kubectl describe secret cluster-admin-dashboard-sa-$( ) 

Sekali lagi, kami ingat bahwa semuanya telah berhasil dipublikasikan melalui haProxy.

Kami mengikuti tautan kubernetes.domain.ru . Masukkan token yang diterima.

Bersukacitalah:

Gbr. 7


PS
Hasil keseluruhan saya ingin mengucapkan terima kasih kepada Rancher untuk membuat antarmuka yang intuitif, contoh yang mudah digunakan, dokumentasi sederhana, kemampuan untuk bergerak dengan cepat dan skalabilitas di tingkat cluster. Mungkin saya berbicara terlalu tajam di awal posting yang membuat Swarm bosan, agaknya, tren perkembangan yang jelas, agak membuat saya menatap ke samping dan tidak menyelesaikan rutinitas yang membosankan. Docker menciptakan era perkembangan. Dan untuk menilai proyek ini tentu bukan untuk saya.

Source: https://habr.com/ru/post/id418691/


All Articles