Logo Zephyrnet

Pipeline Pembelajaran Mesin: Menyiapkan Kubernet di tempat

Tanggal:

Dalam seri multi-bagian ini, saya akan memandu Anda melalui cara saya menyiapkan pipa pembelajaran mesin di lokasi dengan alat dan kerangka kerja sumber terbuka.

Prolog: Pelatihan Model hanyalah A Mungil Bagian

Ketika kebanyakan orang berpikir tentang pembelajaran mesin, mereka membayangkan insinyur dan ilmuwan data mengutak-atik arsitektur jaringan, fungsi kehilangan, dan menyetel hiper-parameter, ditambah dengan pelatihan ulang yang konstan hingga hasilnya memuaskan.

Memang, model pembelajaran mesin pelatihan membutuhkan banyak kerja keras. Sejumlah besar waktu dan sumber daya dihabiskan untuk penelitian dan eksperimen.

Namun, ada saatnya ketika Anda harus mulai memproduksikan model yang telah Anda latih dan tuning dengan penuh kasih. Dan oh, omong-omong, model ini diharapkan berkinerja baik pada kumpulan data minggu depan.

Perlahan-lahan Anda sadar bahwa Machine Learning jauh lebih besar daripada model, hiper-parameter, dan fungsi kehilangan. Itu juga yang terjadi sebelum, selama, dan setelah pelatihan. Dan itu tidak berakhir di sana, karena Anda juga perlu memikirkannya re-latih, terutama ketika Anda mendapatkan data baru, karena tidak ada jaminan bahwa model tersebut akan digeneralisasi juga.

Ada diagram yang sangat terkenal yang menggambarkan masalah secara ringkas:

Lingkup pembelajaran mesin

Singkatnya, Anda perlu membangun jalur pembelajaran mesin yang dapat membawa Anda dari data mentah ke model yang terlatih dalam waktu sesingkat mungkin. Tapi inilah intinya: karena Anda adalah bagian dari startup yang suka berkelahi dan tidak disiram dengan uang VC, Anda harus puas dengan server yang Anda miliki, dan tidak bergantung pada penawaran cloud berbayar dari Amazon, Microsoft atau Google , setidaknya untuk saat ini.

Ini karena Anda membutuhkan lingkungan yang aman untuk dipelajari dan bereksperimen - lingkungan yang tidak akan mengejutkan Anda dengan tagihan buruk di akhir bulan.

Siapa kamu

Anda bisa menjadi insinyur perangkat lunak di perusahaan yang mulai berpikir untuk menempatkan model pembelajaran mesinnya ke produksi, atau Anda bisa berjalan sendiri dan ingin tahu tentang seperti apa pembelajaran mesin “dunia nyata” itu. Dalam kedua kasus tersebut, Anda perlu tahu tentang pipa pembelajaran mesin.

Apa yang perlu Anda ketahui

Anda harus nyaman dengan Linux. Contoh-contoh akan mengasumsikan Ubuntu Linux 18.04, meskipun versi sedikit tanggal atau lebih baru seharusnya tidak menyebabkan masalah besar.

Anda harus memiliki pengetahuan tentang Docker. Jika Anda tahu cara membuat gambar di Docker, dan cara menjalankan kontainer, Anda sebaiknya melakukannya. Jika tidak, Anda tidak perlu terlalu khawatir: Saya akan memandu Anda dengan informasi latar belakang yang cukup, dan contoh kode akan dijelaskan.

Meskipun ini adalah artikel tentang saluran Pembelajaran Mesin, artikel ini bukan tentang seluk-beluk yang terlibat dalam pelatihan model.

Kami akan menggunakan Kubernetes. Anda tidak perlu menjadi ahli di dalamnya. Jika Anda benar-benar baru di Kubernetes, tidak apa-apa. Pada akhir seri, Anda akan memiliki setidaknya beberapa pengalaman langsung. Di sisi lain, saya tidak akan membahas secara mendalam tentang spesifikasi Kubernetes. Beberapa perintah saya harus mengabaikan kepentingan singkatnya. Selain itu, tujuan sebenarnya di sini adalah untuk membantu Anda menggunakan pipa pembelajaran mesin seefisien mungkin.

Berikut adalah beberapa asumsi lain yang saya buat tentang Anda, pembaca yang cerdik:

  1. Anda tidak sepenuhnya tidak mengerti tentang Pembelajaran Mesin
  2. Anda memiliki akses ke beberapa server yang relatif gemuk (idealnya lebih dari satu) yang berisi GPU Nvidia
  3. Anda memiliki basis kode pembelajaran mesin yang sudah ada yang ditulis dengan Python
  4. Anda tidak bekerja di startup unicorn atau Fortune 500 dan karena itu tidak begitu bersemangat dengan uang sehingga Anda dapat dengan senang hati memutar beberapa V100.

Apa yang akan kita lakukan?

Mesin pembelajaran pipa baru-baru ini baru saja mendapatkan lebih banyak cinta dan perhatian, dan orang-orang baru mulai memikirkan semuanya. Dengan kata lain, ada banyak cara untuk membangun jaringan pembelajaran mesin, karena setiap organisasi memiliki persyaratan unik, dan setiap tim memiliki alat favorit mereka.

Apa yang ingin ditawarkan seri ini satu mungkin cara untuk melakukannya, dan itu sangat penting ketika Anda memulai, karena jumlah informasi seringkali sangat besar. Juga, menginstal Kubernetes adalah urusan yang menakutkan, penuh dengan banyak hambatan. Saya harap artikel ini membantu memperlancar jalan itu.

Setelah kamu belajar a cara untuk membangun pipa pembelajaran mesin, Anda kemudian akan dilengkapi dengan keterampilan dan pengetahuan yang cukup untuk membangunnya sesuai dengan kebutuhan organisasi Anda.

Berikut daftar beberapa alat yang akan saya bahas dalam seri ini:

  • Buruh pelabuhan
  • Kubernetes
  • pengusaha peternakan
  • KubeFlow / KubeFlow Pipelines
  • Minium
  • aliran tensor

Di tempat

Seperti yang akan Anda sadari segera setelah Anda mengikuti seri ini, banyak dari alat ini mengasumsikan bahwa Anda memiliki penyimpanan di Amazon S3 atau Google Cloud Storage, yang, dengan kata lain, bukan asumsi yang sangat baik. Jadi seri ini menunjukkan bagaimana mengatasi beberapa keterbatasan ini tanpa kehilangan fungsionalitasnya.

Tentu saja, pada titik tertentu, Anda akan lebih besar dan membutuhkan sesuatu yang lebih mampu. Namun, terutama ketika Anda mulai (yaitu, Anda adalah Insinyur Data pertama di tim), kemudian on-premise akan tampak lebih hemat biaya dan pada akhirnya lebih edukasi pilihan.

Menginstal Kubernetes dengan Cara Mudah dengan Rancher

Mari kita mulai dengan salah satu bit yang lebih sulit - Menginstal Kubernetes.

Hal utama yang perlu Anda ketahui tentang Kubernetes adalah itu adalah sistem pengaturan wadah untuk mengotomatiskan penerapan, penskalaan, dan manajemen aplikasi.

Ada banyak cara untuk menginstal Kubernetes, dan itu bukan proses sepele. Untungnya, alat seperti Rancher membuat proses instalasi jauh lebih menyenangkan dan lebih rentan kesalahan. Secara khusus, kita akan menggunakan Rancher Kubernetes Engine (RKE) untuk membantu kita menginstal Kubernetes.

Pada titik penulisan ini, rilis stabil terbaru dari rke is 1.0.0.

Langkah 0: Siapkan Mesin

Langkah-langkah berikut mengasumsikan bahwa Anda memiliki akses ke dua mesin Linux yang terhubung ke LAN yang sama.

Kami akan menyiapkan cluster minimal yang terdiri dari dua mesin, satu bernama master Dan lainnya worker. Tentu saja, Anda dapat memberi nama mesin apa pun yang Anda inginkan, selama Anda menetapkan satu mesin untuk dikuasai, dan sisanya menjadi pekerja.

Jika Anda hanya memiliki akses ke satu mesin, Anda dapat bertahan dengan membuat dua mesin virtual, dan pastikan untuk mengaktifkan Bridged Adapter. Bahkan, dalam persiapan untuk artikel ini, saya menguji semuanya dari Oracle VirtualBox. Ini pengaturan saya:

Pengaturan Oracle VM VirtualBox Manager

Perhatikan di sini bahwa saya memiliki dua VM: master dan node. Aktifkan Bridged Adapter dan juga pengaturan Promiscuous Mode untuk Allow All.

Kelemahannya adalah Anda tidak akan dapat mengakses GPU, dan kemungkinan besar Anda akan melihat bahwa kinerjanya tidak ideal karena Kubernetes cenderung sangat menuntut dalam hal sumber daya. Sekali lagi, tidak apa-apa jika Anda mencoba ini di rumah atau hanya memiliki akses ke satu mesin saat ini.

Berikut adalah beberapa detail penting tentang mesin (Anda harus memilikinya juga untuk langkah-langkah konfigurasi yang mengikuti):

Menguasai Pekerja
IP 192.168.86.36 192.168.86.35
Pengguna ubuntu ubuntu
hostname menguasai pekerja
SSH Keys ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub
Peran Pesawat Kontrol, Dll Pekerja

DNS dan Load Balancing

Di lingkungan produksi, Anda perlu nama host untuk menunjuk ke grup Kubernetes Anda. Namun, dalam artikel ini saya menganggap Anda tidak punya satu sudah tersedia, jadi kita harus memalsukannya.

Hal lain yang saya tidak akan membahas - untuk menjaga hal-hal sederhana - adalah penyeimbangan beban ketika datang ke instalasi Rancher.

Untuk tujuan kita, saya akan menggunakan rancher-demo.domain.test sebagai nama host.

Di kedua mesin, buka /etc/hosts File:

sudo vim /etc/hosts

Masukkan berikut:

192.168.86.35 worker
192.168.86.35 rancher-demo.domain.test
192.168.86.36 master
127.0.0.1 localhost

Perhatikan di sini bahwa node pekerja memiliki nama host tambahan rancher-demo.domain.test. Dalam lingkungan yang sedikit lebih realistis, Anda akan memiliki sesuatu seperti NGINX sebagai front-end untuk memuat keseimbangan antara beberapa node pekerja.

* Catatan: Jika Anda menggunakan Mesin Virtual, maka kemungkinan besar Anda akan menggunakan gambar Server Ubuntu, yang biasanya tidak datang dengan lingkungan desktop. Karena itu, Anda juga harus memiliki entri di tuan rumah komputer untuk memasukkan ini:

192.168.86.35 rancher-demo.domain.test

Dengan begitu, Anda akan dapat mengakses Rancher dari browser di komputer host. *

Langkah 1: Dapatkan rke Biner

Penting !: Langkah ini hanya dapat dilakukan pada master.

Kepala ke GitHub halaman untuk mengunduh rke biner. Selanjutnya, ganti nama biner menjadi rke, diikuti dengan membuatnya dapat dieksekusi. Akhirnya, pindahkan biner ke lokasi di PATH, Di mana /usr/local/bin biasanya merupakan pilihan yang baik.

Penting: pastikan Anda memilih biner yang tepat untuk OS Anda!

$ wget https://github.com/rancher/rke/releases/download/v1.0.0/rke_linux-amd64
$ mv rke_linux-amd64 rke
$ chmod +x rke
$ sudo mv rke /usr/local/bin

Sekarang mari kita lihat apakah semuanya berfungsi:

$ rke

Ini akan kembali:

NAME: rke - Rancher Kubernetes Engine, an extremely simple, lightning fast Kubernetes installer that works everywhere USAGE: rke [global options] command [command options] [arguments...] VERSION: v1.0.0 AUTHOR(S): Rancher Labs, Inc. COMMANDS: up Bring the cluster up remove Teardown the cluster and clean cluster nodes version Show cluster Kubernetes version config Setup cluster configuration etcd etcd snapshot save/restore operations in k8s cluster cert Certificates management for RKE cluster encrypt Manage cluster encryption provider keys help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --debug, -d Debug logging --quiet, -q Quiet mode, disables logging and only critical output will be printed --help, -h show help --version, -v print the version

Langkah 2. Mempersiapkan Host Linux

Penting: langkah-langkah ini harus dilakukan pada semua mesin.

a) Pasang Docker

Pertama, pastikan Docker 19.03 diinstal pada semua host Linux:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable edge"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce

Untuk memastikan bahwa layanan Docker berjalan dengan benar, jalankan yang berikut ini:

$ sudo systemctl status docker

Ini akan kembali:

● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2019-12-28 03:01:03 UTC; 27s ago Docs: https://docs.docker.com Main PID: 4118 (dockerd) Tasks: 8 CGroup: /system.slice/docker.service └─4118 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Dec 28 03:01:03 master dockerd[4118]: time="2019-12-28T03:01:03.179311453Z" level=warning msg="Your kernel does not support swap memory limit"
Dec 28 03:01:03 master dockerd[4118]: time="2019-12-28T03:01:03.179509363Z" level=warning msg="Your kernel does not support cgroup rt period"
Dec 28 03:01:03 master dockerd[4118]: time="2019-12-28T03:01:03.179608175Z" level=warning msg="Your kernel does not support cgroup rt runtime"

Sekarang jalankan perintah berikut sehingga Anda dapat menggunakan docker perintah tanpa sudo:

$ sudo usermod -aG docker $USER

Mari kita coba:

$ docker run hello-world

Aduh!

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Alasan Anda mendapatkan ini adalah karena Anda perlu melakukannya log out pertama:

$ exit

Setelah Anda masuk, coba lagi:

$ docker run hello-world

Anda harus melihat ini:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:4fe721ccc2e8dc7362278a29dc660d833570ec2682f4e4194f4ee23e415e1064
Status: Downloaded newer image for hello-world:latest Hello from Docker!
This message shows that your installation appears to be working correctly.

b) Atur kunci SSH

Jika Anda belum mengatur kunci SSH, lakukan langkah berikut master:

$ ssh-keygen
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa

Kemudian, salin kunci publik ke semua node pekerja. Karena kami hanya memiliki satu simpul pekerja:

$ ssh-copy-id ubuntu@192.168.86.36

Anda harus memastikan itu $USER dapat SSH ke dalam node. Misalnya, pastikan Anda dapat mengakses worker dari master:

ubuntu@master:~$ ssh ubuntu@192.168.86.36

On kedua node, konfigurasikan server SSH untuk memungkinkan penerusan port:

% sudo vim /etc/ssh/sshd_config

Batalkan komentar berikut:

AllowTcpForwarding yes

c) Matikan swap

Untuk mematikan swap:

$ sudo swapoff -a

Open /etc/fstab di editor favorit Anda dan komentar entri file swap:

$ sudo vim /etc/fstab

d) Melamar sysctl pengaturan

$ sudo sysctl net.bridge.bridge-nf-call-iptables=1

e) DNS pada Ubuntu 18.04

Dalam versi Ubuntu ini dan seterusnya, cara mengatur DNS telah berubah. Untuk kembali ke perilaku sebelumnya:

$ sudo apt install resolvconf

Edit pengaturan server nama:

sudo vim /etc/resolvconf/resolv.conf.d/head

Tambahkan entri berikut:

nameserver 8.8.4.4
nameserver 8.8.8.8

Mulai kembali resolveconf layanan:

% sudo service resolvconf restart

Langkah 3: Membuat File Konfigurasi Cluster

Penting: langkah berikut hanya boleh dilakukan pada master.

Sudah waktunya untuk akhirnya menginstal Kubernetes dengan rke!

Sebelum melakukan ini, pastikan Anda memiliki daftar IP dan nama host untuk node tersebut. Meja dari Step 0 akan sangat membantu untuk langkah ini.

Anda harus berlari rke config untuk membuat file konfigurasi cluster. Ini akan memberi Anda banyak pertanyaan yang digunakan untuk menghasilkan file konfigurasi:

$ rke config

Inilah contoh pertanyaan dan jawaban berdasarkan tabel. Ingatlah untuk menyesuaikannya dengan pengguna Anda, nama host, alamat IP, dan lokasi kunci SSH. Perhatikan juga bahwa master simpul harus memiliki peran control plane dan etcd, Sedangkan worker node harus memiliki peran worker. Jika Anda membuat kesalahan, Anda selalu bisa memulai dengan Ctrl + C dan menjalankan perintah lagi:

[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]:
[+] Number of Hosts [1]: 2
[+] SSH Address of host (1) [none]: 192.168.86.36
[+] SSH Port of host (1) [22]:
[+] SSH Private Key Path of host (192.168.86.36) [none]: ~/.ssh/id_rsa
[+] SSH User of host (192.168.86.36) [ubuntu]: ubuntu
[+] Is host (192.168.86.36) a Control Plane host (y/n)? [y]: y
[+] Is host (192.168.86.36) a Worker host (y/n)? [n]: n
[+] Is host (192.168.86.36) an etcd host (y/n)? [n]: y
[+] Override Hostname of host (192.168.86.36) [none]: master
[+] Internal IP of host (192.168.86.36) [none]:
[+] Docker socket path on host (192.168.86.36) [/var/run/docker.sock]:
[+] SSH Address of host (2) [none]: 192.168.86.35
[+] SSH Port of host (2) [22]:
[+] SSH Private Key Path of host (192.168.86.35) [none]: ~/.ssh/id_rsa
[+] SSH User of host (192.168.86.35) [ubuntu]: ubuntu
[+] Is host (192.168.86.35) a Control Plane host (y/n)? [y]: n
[+] Is host (192.168.86.35) a Worker host (y/n)? [n]: y
[+] Is host (192.168.86.35) an etcd host (y/n)? [n]: n
[+] Override Hostname of host (192.168.86.35) [none]: worker
[+] Internal IP of host (192.168.86.35) [none]:
[+] Docker socket path on host (192.168.86.35) [/var/run/docker.sock]:
[+] Network Plugin Type (flannel, calico, weave, canal) [canal]: flannel
[+] Authentication Strategy [x509]:
[+] Authorization Mode (rbac, none) [rbac]:
[+] Kubernetes Docker image [rancher/hyperkube:v1.16.3-rancher1]:
[+] Cluster domain [cluster.local]:
[+] Service Cluster IP Range [10.43.0.0/16]:
[+] Enable PodSecurityPolicy [n]:
[+] Cluster Network CIDR [10.42.0.0/16]:
[+] Cluster DNS Service IP [10.43.0.10]:
[+] Add addon manifest URLs or YAML files [no]:

Ini menghasilkan cluster.yml, file konfigurasi kluster RKE:

nodes:
- address: "192.168.86.36" port: "22" internal_address: "" role: - controlplane - etcd hostname_override: "" user: ubuntu docker_socket: /var/run/docker.sock ssh_key: "" ssh_key_path: ~/.ssh/id_rsa ssh_cert: "" ssh_cert_path: "" labels: {} taints: []
- address: "192.168.86.35" port: "22" internal_address: "" role: - worker hostname_override: "" user: ubuntu docker_socket: /var/run/docker.sock ssh_key: "" ssh_key_path: ~/.ssh/id_rsa ssh_cert: "" ssh_cert_path: "" labels: {} taints: []
services: etcd: image: "" extra_args: {} extra_binds: [] extra_env: [] external_urls: [] ca_cert: "" cert: "" key: "" path: "" uid: 0 gid: 0 snapshot: null retention: "" creation: "" backup_config: null kube-api: image: "" extra_args: {} extra_binds: [] extra_env: [] service_cluster_ip_range: 10.43.0.0/16 service_node_port_range: "" pod_security_policy: false always_pull_images: false secrets_encryption_config: null audit_log: null admission_configuration: null event_rate_limit: null kube-controller: image: "" extra_args: {} extra_binds: [] extra_env: [] cluster_cidr: 10.42.0.0/16 service_cluster_ip_range: 10.43.0.0/16 scheduler: image: "" extra_args: {} extra_binds: [] extra_env: [] kubelet: image: "" extra_args: {} extra_binds: [] extra_env: [] cluster_domain: cluster.local infra_container_image: "" cluster_dns_server: 10.43.0.10 fail_swap_on: false generate_serving_certificate: false kubeproxy: image: "" extra_args: {} extra_binds: [] extra_env: []
network: plugin: flannel options: {} node_selector: {}
authentication: strategy: x509 sans: [] webhook: null
addons: ""
addons_include: []
system_images: etcd: rancher/coreos-etcd:v3.3.15-rancher1 alpine: rancher/rke-tools:v0.1.51 nginx_proxy: rancher/rke-tools:v0.1.51 cert_downloader: rancher/rke-tools:v0.1.51 kubernetes_services_sidecar: rancher/rke-tools:v0.1.51 kubedns: rancher/k8s-dns-kube-dns:1.15.0 dnsmasq: rancher/k8s-dns-dnsmasq-nanny:1.15.0 kubedns_sidecar: rancher/k8s-dns-sidecar:1.15.0 kubedns_autoscaler: rancher/cluster-proportional-autoscaler:1.7.1 coredns: rancher/coredns-coredns:1.6.2 coredns_autoscaler: rancher/cluster-proportional-autoscaler:1.7.1 kubernetes: rancher/hyperkube:v1.16.3-rancher1 flannel: rancher/coreos-flannel:v0.11.0-rancher1 flannel_cni: rancher/flannel-cni:v0.3.0-rancher5 calico_node: rancher/calico-node:v3.8.1 calico_cni: rancher/calico-cni:v3.8.1 calico_controllers: rancher/calico-kube-controllers:v3.8.1 calico_ctl: "" calico_flexvol: rancher/calico-pod2daemon-flexvol:v3.8.1 canal_node: rancher/calico-node:v3.8.1 canal_cni: rancher/calico-cni:v3.8.1 canal_flannel: rancher/coreos-flannel:v0.11.0 canal_flexvol: rancher/calico-pod2daemon-flexvol:v3.8.1 weave_node: weaveworks/weave-kube:2.5.2 weave_cni: weaveworks/weave-npc:2.5.2 pod_infra_container: rancher/pause:3.1 ingress: rancher/nginx-ingress-controller:nginx-0.25.1-rancher1 ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1 metrics_server: rancher/metrics-server:v0.3.4 windows_pod_infra_container: rancher/kubelet-pause:v0.1.3
ssh_key_path: ~/.ssh/id_rsa
ssh_cert_path: ""
ssh_agent_auth: false
authorization: mode: rbac options: {}
ignore_docker_version: false
kubernetes_version: ""
private_registries: []
ingress: provider: "" options: {} node_selector: {} extra_args: {} dns_policy: "" extra_envs: [] extra_volumes: [] extra_volume_mounts: []
cluster_name: ""
cloud_provider: name: ""
prefix_path: ""
addon_job_timeout: 0
bastion_host: address: "" port: "" user: "" ssh_key: "" ssh_key_path: "" ssh_cert: "" ssh_cert_path: ""
monitoring: provider: "" options: {} node_selector: {}
restore: restore: false snapshot_name: ""
dns: null

Saatnya membawa kluster!

% rke up

Tunggu sebentar rke mengatur kluster Kubernetes:

INFO[0000] Running RKE version: v1.0.0 INFO[0000] Initiating Kubernetes cluster INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0000] Building Kubernetes cluster INFO[0000] [dialer] Setup tunnel for host [192.168.86.35]
INFO[0000] [dialer] Setup tunnel for host [192.168.86.36]
# Many more lines ... INFO[0044] Finished building Kubernetes cluster successfully

Beberapa file lagi akan dibuat pada saat ini:

$ ls
cluster.rkestate cluster.yml kube_config_cluster.yml

Anda harus menyimpan file-file ini di lokasi yang aman jika Anda perlu membuat ulang cluster. Anda harus menyalin kube_config_cluster.yml ke lokasi tempat Kubernetes dapat menemukannya:

$ mkdir ~/.kube
$ cp kube_config_cluster.yml $HOME/.kube/config

Instal Kubectl

Catatan: langkah ini hanya boleh dilakukan pada menu master simpul.

Selanjutnya, Anda harus menginstal alat baris perintah Kubernetes, kubectl:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Setelah langkah ini selesai, kita bisa mengujinya dengan mendaftar semua node itu rke dibuat:

% kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.86.35 Ready worker 53m v1.16.3
192.168.86.36 Ready controlplane,etcd 53m v1.16.3

Keberhasilan! Mari kita lakukan sesuatu yang lain. Kami dapat memeriksa wadah apa yang dibuat:

% kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx default-http-backend-67cf578fc4-dk9l4 1/1 Running 0 49m
ingress-nginx nginx-ingress-controller-bnwlv 1/1 Running 0 49m
kube-system coredns-5c59fd465f-7gbff 1/1 Running 0 49m
kube-system coredns-5c59fd465f-mhzdb 1/1 Running 0 49m
kube-system coredns-autoscaler-d765c8497-p2zj4 1/1 Running 0 49m
kube-system kube-flannel-vkxc6 2/2 Running 0 54m
kube-system kube-flannel-xjtst 2/2 Running 0 54m
kube-system metrics-server-64f6dffb84-hs99g 1/1 Running 0 49m
kube-system rke-coredns-addon-deploy-job-kdwxm 0/1 Completed 0 49m
kube-system rke-ingress-controller-deploy-job-rpvrq 0/1 Completed 0 49m
kube-system rke-metrics-addon-deploy-job-x2m2j 0/1 Completed 0 49m
kube-system rke-network-plugin-deploy-job-h5ffz 0/1 Completed 0 55m

Jangan khawatir tentang apa pod saat ini. Anggap saja sebagai wadah untuk saat ini.

Pasang Helm 3

Catatan: langkah ini hanya boleh dilakukan pada menu master simpul.

Helm adalah manajer paket Kubernetes dan sangat berguna untuk menyebarkan aplikasi dan layanan ke kluster Kubernetes. Kami akan menggunakan Helm untuk menginstal Rancher dan beberapa layanan pendukung lainnya.

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

helm harus diinstal ke dalam PATH:

Downloading https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

Instal Rancher Menggunakan Helm

Catatan: Langkah ini hanya boleh dilakukan pada menu master simpul.

$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

Buat namespace untuk Rancher:

$ kubectl create namespace cattle-system

Install cert-manager

Catatan: langkah ini hanya boleh dilakukan pada menu master simpul.

Cert Manager membantu dengan secara otomatis menyediakan dan mengelola sertifikat TLS di Kubernetes. Ada beberapa pilihan untuk menggunakan sertifikat dari Let's Encrypt misalnya, tetapi untuk sekarang, kami akan menjaga segala sesuatunya sederhana dan menggunakan sertifikat default yang dihasilkan oleh Rancher.

Catatan: di sini kita menginstal versi yang agak ketinggalan jaman cert-manager karena yang terbaru (0.12) tampaknya memiliki masalah instalasi.

Ikuti langkah-langkah ini untuk menginstal cert-manager ke kluster Kubernetes:

$ kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml
$ kubectl create namespace cert-manager
$ kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
$ helm repo add jetstack https://charts.jetstack.io
$ helm repo update
$ helm install --name cert-manager --namespace cert-manager --version v0.9.1 jetstack/cert-manager

Pastikan semuanya berjalan dengan baik:

kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5b9ff77b7-x6vgn 1/1 Running 0 44s
cert-manager-cainjector-59d69b9b-nrgkf 1/1 Running 0 44s
cert-manager-webhook-cfd6587ff-8tcgt 1/1 Running 0 44s

Perhatikan bahwa Anda mungkin harus menunggu beberapa saat (biasanya hanya beberapa menit) untuk semua STATUS untuk beralih ke Running.

Instal Rancher

Terakhir, Anda dapat menginstal Rancher, yang, antara lain, menyediakan antarmuka yang bagus untuk mengelola kluster Kubernetes Anda:

$ helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.example.com

Pastikan semuanya berjalan dengan baik:

kubectl -n cattle-system rollout status deploy/rancher

Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...

Tunggu sampai semua ulangan telah diperbarui sebelum melakukan langkah selanjutnya.

Sekarang, karena kami tidak memiliki penyeimbang beban, kami perlu melakukan langkah tambahan untuk dapat mengakses UI Rancher. Buat nama file berikut ini ingress.yml dan isi dengan yang berikut (sesuaikan host untuk apa pun yang Anda pilih):

apiVersion: extensions/v1beta1
kind: Ingress
metadata: name: rancher-demo-ingress
spec: rules: - host: rancher-demo.domain.test http: paths: - path: / backend: serviceName: rancher-demo servicePort: 443

Lalu lari:

$ kubectl apply -f ingress.yml

Setelah itu, Peternakan harus tersedia di:

https://rancher-demo.domain.test

Terima pengecualian keamanan yang mungkin dikeluhkan oleh browser Anda dan Anda akan disambut dengan layar berikut dengan prompt untuk membuat kata sandi dan mengatur nama domain (sudah diisi sebelumnya). Silakan dan lakukan itu:

Selamat datang di layar Peternakan

Berikan Rancher beberapa saat untuk mengatur segalanya. Setelah selesai, Anda harus mendapatkan gambaran umum kluster Anda:

Nodes

Silakan dan klik sekitar dan nikmati buah dari kerja Anda!

Kesimpulan

Jika Anda telah mencapai tahap ini, Anda harus memberi selamat pada diri sendiri karena tekun. Menginstal cluster Kubernetes bukan untuk orang yang lemah hati, bahkan dengan alat-alat seperti Rancher untuk mempermudah proses.

Mari kita ulas apa yang telah kita lakukan.

Kami membahas alasannya latihan Model ML hanyalah puncak dari gunung es pepatah, dan bahwa banyak perangkat lunak pendukung lainnya perlu berkumpul untuk membuat model ini menjadi produksi.

Lebih penting lagi, kami membuat cluster Kubernetes non-sepele dengan Rancher Kubernetes Engine dan menginstal Rancher untuk mengelola cluster. Ini bukan prestasi berarti. Namun, kami masih belum melakukan penyebaran pembelajaran mesin! Itu akan menjadi artikel berikutnya dalam seri ini, di mana kita menginstal Kubeflow, platform pembelajaran mesin sumber terbuka.

Kredit

Terima kasih khusus untuk Sebastian van SteenisArtikel yang menunjukkan cara mengatur cluster RKE tanpa penyeimbang beban.

Sumber: https://www.sitepoint.com/setting-up-on-premise-kubernetes/?utm_source=rss

tempat_img

Intelijen Terbaru

tempat_img