GNU/Linux >> Belajar Linux >  >> Linux

Cara Membuat VM Jarak Jauh menggunakan Driver SSH Generik mesin buruh pelabuhan

Menggunakan buruh pelabuhan, Anda dapat mengemas aplikasi perusahaan Anda ke dalam satu wadah mandiri, yang dijamin dapat berjalan di semua lingkungan.

Ini memudahkan pengembang dan sysadmin untuk mengelola aplikasi. Jika Anda seorang administrator, Anda tidak perlu lagi mendengar alasan ini dari pengembang:“Tapi, ini berfungsi di lingkungan dev saya!”

Menggunakan Mesin Docker, Anda dapat menginstal dan mengonfigurasi Mesin Docker di server jarak jauh. Setelah buruh pelabuhan diinstal, dari mesin lokal (laptop), Anda dapat mengelola buruh pelabuhan dari jarak jauh.

Dalam tutorial ini, kita akan secara khusus berbicara tentang driver Generik yang digunakan oleh mesin buruh pelabuhan, yang akan menggunakan klien SSH untuk mengelola host buruh pelabuhan jarak jauh.

1. Buat pengguna dockeradmin di Host Jarak Jauh

Pertama, buat akun pengguna Linux di server jauh. Anda tidak benar-benar harus menggunakan "dockeradmin" sebagai nama pengguna, itu bisa apa saja. Anda bahkan dapat menggunakan nama pengguna Anda sendiri.

adduser dockeradmin

passwd dockeradmin

2. Buat Pasangan Kunci Publik-Pribadi SSH di Host Lokal

Selanjutnya, di host lokal Anda (laptop), buat kunci SSH publik dan pribadi menggunakan ssh-keygen. Anda juga harus menyalin kunci pribadi ke server jauh.

Kami menjelaskan cara melakukannya di artikel ini:Lakukan Login SSH Jarak Jauh Tanpa Kata Sandi

Tapi, singkatnya, inilah yang perlu Anda lakukan untuk ini:

ssh-keygen

ssh-copy-id dockeradmin@remote-server

Catatan:Selama ssh-keygen, jangan berikan frasa sandi apa pun. Biarkan kosong.

3. Izinkan Akses Sudo untuk dockeradmin

Di server jarak jauh Anda, di file /etc/sudoers, tambahkan baris berikut, yang akan memberikan hak istimewa sudo penuh ke akun dockeradmin. Ini berarti bahwa akun dockeradmin dapat menjalankan perintah root apa pun.

# visudo
dockeradmin     ALL=(ALL) NOPASSWD: ALL

Catatan:perintah visudo akan memodifikasi file /ec/sudoers. Anda tidak perlu menggunakan “vi /etc/sudoers”.

4. Izinkan Akses Eksternal di Server Jarak Jauh

Pastikan server jarak jauh Anda dapat berbicara dengan internet. Ini diperlukan, karena perintah docker-machine akan memanggil beberapa perintah yum untuk menginstal paket-paket tertentu yang diperlukan.

Jadi, hanya untuk tujuan pengujian, pastikan yang berikut ini berfungsi di server Anda.

ping google.com

Jika Anda tidak memiliki pengaturan server nama yang sesuai, ubah /etc/resolve.conf Anda dan tambahkan baris berikut. Atau, gunakan salah satu server nama yang disediakan oleh administrator sistem Anda.

# vi /etc/resolv.conf
nameserver 4.2.2.2

5. Sintaks Perintah Driver Umum docker-machine

Saat Anda menggunakan driver Generik, opsi berikut tersedia di perintah docker-machine create.

Sintaks mesin buruh pelabuhan berikut menunjukkan semua opsi wajib:

docker-machine create -d generic --generic-ip-address {ip-address} {docker-vm-name}

Dalam sintaks di atas:

  • docker-machine adalah perintahnya
  • opsi buat memberitahu docker-machine untuk membuat host docker-vm jarak jauh
  • Opsi
  • -d adalah untuk menentukan jenis driver yang akan digunakan. Di sini, kami menggunakan driver "generik", yang akan menggunakan klien SSH untuk terhubung ke host jarak jauh
  • –generic-ip-address adalah untuk menentukan ip-address jarak jauh tempat host docker-vm harus dibuat.
  • docker-vm-name adalah nama yang ingin Anda berikan ke remote docker-vm yang akan dibuat oleh perintah docker-machine. Ini bisa apa saja.

Sintaks mesin buruh pelabuhan berikut menunjukkan semua opsi yang tersedia:

docker-machine create -d generic --generic-ip-address {ip-address} --generic-ssh-key {private-key} --generic-ssh-user {username} --generic-ssh-port {ssh-port} {docker-vm-name}

Dalam sintaks di atas:

  • –generic-ssh-key Ini opsional. Ketika Anda tidak menentukan ini, itu akan berbicara dengan ssh-agent yang berjalan di sistem lokal Anda. Jika Anda tidak menjalankan ssh-agent di sistem lokal (laptop), gunakan opsi ini, dan tentukan lokasi kunci pribadi Anda di sistem lokal Anda.
  • –generic-ssh-user Ini opsional. Secara default, itu akan menggunakan root. Tetapi, dalam kebanyakan situasi Anda mungkin tidak ingin melakukan ini. Jadi, tentukan nama pengguna yang Anda inginkan untuk digunakan oleh mesin buruh pelabuhan saat menghubungkan ke host jarak jauh.
  • –generic-ssh-port Ini adalah port SSH dari server jauh. Secara default ini adalah 22.
  • Opsi lain dijelaskan dalam sintaks di atas

6. Buat Host VM Docker Jarak Jauh

Sekarang, saatnya membuat host docker-vm jarak jauh menggunakan perintah docker-machine create.

docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db

Berikut ini adalah perintah yang sama seperti di atas, tetapi saya memecahnya menjadi beberapa baris agar mudah dibaca.

docker-machine create -d generic \
  --generic-ip-address 192.168.100.2 \ 
  --generic-ssh-key $HOME/.ssh/id_rsa \
  --generic-ssh-user dockeradmin \
  --generic-ssh-port 22 \
  dev-db

Pada perintah di atas:

  • Kami telah menjelaskan semua opsi di bagian sintaks di atas.
  • 192.168.100.2 adalah alamat ip host jarak jauh kami tempat host docker-vm harus dibuat.
  • $HOME/.ssh/id_rsa adalah kunci pribadi yang terletak di sistem lokal Anda (laptop)
  • dockeradmin adalah nama nama pengguna Linux pada host jarak jauh
  • dev-db adalah nama yang saya berikan untuk host docker-vm yang ingin saya buat di host jarak jauh. Ini bisa apa saja.

Catatan:Sekali lagi, Anda akan menjalankan perintah mesin buruh pelabuhan di atas pada sistem lokal Anda. Anda dapat menggunakan perintah docker-machine yang disertakan dengan Docker Toolbox Anda.

7. Mesin buruh pelabuhan yang berhasil membuat Output

Jika semuanya bekerja dengan benar, Anda akan melihat output berikut dari perintah docker-machine create.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
(dev-db) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect Docker to this machine, run: C:\Program Files\Docker Toolbox\docker-machine.exe env dev-db

Terakhir, jika semuanya berfungsi dengan baik, Anda akan melihat host docker vm jarak jauh yang kami buat. Di sistem lokal Anda, jalankan perintah berikut:

$ docker-machine ls
NAME     ACTIVE   DRIVER       STATE     URL  SWARM  DOCKER    ERRORS
default  *        virtualbox   Running   tcp://192.168.100.10:2376
dev-db   -        generic      Running   tcp://192.168.100.11:2376

Catatan:Yah, untuk sebagian besar, tidak ada yang berjalan sesuai rencana, dan Anda mungkin mendapatkan beberapa pesan kesalahan. Berikut ini adalah beberapa masalah umum yang saya hadapi dan solusinya.

8. Kesalahan 1:OS Tidak Valid

Versi mesin buruh pelabuhan saat ini hanya mendukung versi OS tertentu di server jauh.

Misalnya, jika server jarak jauh Anda berjalan di CentOS 6, Anda akan mendapatkan pesan kesalahan "/etc/os-release:No such file or directory" berikut. Ini karena untuk CentOS, ia mencari CentOS 7.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
Waiting for machine to be running, this may take a few minutes...
(dev-db) Importing SSH key...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Error creating machine: Error detecting OS: Error getting SSH command: Something
 went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 1
output  : cat: /etc/os-release: No such file or directory

9. Kesalahan 2:Tidak Dapat Menjalankan Perintah root (Tidak Ada Akses Sudo)

Jika Anda mendapatkan pesan kesalahan "Error create machine:Error running provisioning:exit status 1", setelah baris "Provisioning with centos...", maka itu bukan masalah koneksi. docker-machine dapat terhubung ke server jarak jauh dengan benar.

Tetapi, dalam kasus ini, ia tidak dapat menjalankan perintah root sebagai pengguna dockeradmin. Jadi, gunakan visudo dan izinkan akses sudo penuh ke pengguna dockeradmin seperti yang kami jelaskan di salah satu langkah sebelumnya.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
(dev-db) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with centos...
Error creating machine: Error running provisioning: exit status 1

10. Kesalahan 3:perintah netstat Hilang

Jika Anda mendapatkan pesan kesalahan “Error running SSH command:exit status 127” setelah baris “Setting Docker configuration on the remote daemon…”, ini juga bukan masalah koneksi.

Dalam hal ini, mesin buruh pelabuhan terhubung ke SSH jarak jauh, dan memiliki akses sudo yang sesuai untuk menjalankan perintah root, tetapi beberapa perintah yang dicobanya gagal, karena tidak ada perintah “netstat”.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
(dev-db) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with centos...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Error running SSH command: exit status 127
Error running SSH command: exit status 127
...
Error running SSH command: exit status 127
Error creating machine: Error running provisioning: Unable to verify the Docker
daemon is listening: Maximum number of retries (10) exceeded

Untuk memperbaiki masalah ini, instal paket net-tools di server jauh, yang berisi perintah “netstat”.

yum install net-tools

Saya berharap di versi mesin buruh pelabuhan berikutnya, mereka mungkin akan memeriksa apakah "netstat" ada di server jauh atau tidak, di awal dan memberikan pesan kesalahan valid yang sesuai.

11. Kesalahan 4:Versi Klien Docker Tidak Cocok

Jika Anda mendapatkan pesan kesalahan “Error create machine:Error running provisioning:exit status 1” berikut, ada kemungkinan klien buruh pelabuhan di sistem lokal (laptop) Anda tidak cocok dengan klien buruh pelabuhan di sistem jarak jauh.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
(dev-db) Importing SSH key...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with centos...
Error creating machine: Error running provisioning: exit status 1

Misalnya, pada sistem lokal:

$ docker version
Client:
 Version:      1.9.1

Di server jauh:

# docker version
Client:
 Version:      1.8.2

Dalam contoh di atas, versi buruh pelabuhan lokal adalah 1.9.1, tetapi versi buruh pelabuhan jarak jauh adalah 1.8.2 yang lebih lama. Jadi, di sini kita memiliki ketidakcocokan, dan pembuatan mesin buruh pelabuhan tidak akan berfungsi dan gagal seperti yang ditunjukkan di atas.

Dalam skenario di atas, mesin buruh pelabuhan dipasang secara terpisah di server jauh, yang memiliki versi klien buruh pelabuhan yang berbeda dari versi klien buruh pelabuhan yang disertakan dengan mesin buruh pelabuhan (kotak alat buruh pelabuhan) pada sistem lokal.

Jadi, dalam hal ini, hapus buruh pelabuhan dari sistem jarak jauh Anda seperti yang ditunjukkan di bawah ini.

# rpm -qa | grep docker
docker-selinux-1.8.2-10.el7.centos.x86_64
docker-1.8.2-10.el7.centos.x86_64

# rpm -ev docker-selinux
Preparing packages...
docker-selinux-1.8.2-10.el7.centos.x86_64

# rpm -ev docker
Preparing packages...
docker-1.8.2-10.el7.centos.x86_64

Sekarang, ketika Anda menjalankan perintah docker-machine di sistem lokal Anda, itu akan secara otomatis menginstal mesin docker yang sesuai dan klien docker di server jauh yang akan kompatibel dengan klien buruh pelabuhan di mesin lokal.

12. Kesalahan 5:SELinux atau Firewall Memblokir Akses

Secara default, mesin vm buruh pelabuhan baru yang kita buat akan berjalan pada port TCP 2376.

Di server jarak jauh Anda, pastikan Anda memiliki aturan firewall yang sesuai yang akan mengizinkan port TCP 2376. Jika Anda masih mengalami masalah, hanya sementara untuk mengesampingkan kemungkinan akses pemblokiran firewalld, hentikan firewalld dan lihat apa yang terjadi.

systemctl stop firewalld

Sekali lagi, hanya untuk tujuan debugging, untuk beberapa alasan, jika Anda ingin menonaktifkan firewalld, Anda dapat melakukannya seperti yang ditunjukkan di bawah ini:

systemctl disable firewalld

Versi terbaru Docker bekerja dengan baik dengan SELinux, tidak ada masalah di sana. Namun, pada versi docker sebelumnya, terdapat beberapa bug yang terkait dengan docker dan SELinux.

Jadi, jika Anda menghadapi masalah apa pun, coba nonaktifkan SELinux sementara dan lihat apakah itu memperbaiki masalah. Untuk menonaktifkan SELinux secara permanen, ubah file /etc/selinux/config yang sesuai.

setenforce Permissive

getenforce

Juga, perhatikan bahwa jika SSH tidak dapat membuat koneksi dari sistem lokal Anda ke server jauh, mesin buruh pelabuhan akan menampilkan pesan kesalahan "Error waiting for SSH:Too many retries waiting for SSH" berikut. Untuk memperbaikinya, pastikan, Anda menerapkan otentikasi tanpa kata sandi SSH seperti yang dijelaskan dalam salah satu langkah di atas.

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db
Running pre-create checks...
Creating machine...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Error creating machine: Error waiting for SSH: Too many retries waiting for SSH
to be available.  Last error: Maximum number of retries (60) exceeded

Ketika semua masalah di atas telah diperbaiki, mesin buruh pelabuhan akan bekerja tanpa masalah seperti yang ditunjukkan di bawah ini:

$ docker-machine create -d generic --generic-ip-address 192.168.100.2 --generic-ssh-key $HOME/.ssh/id_rsa --generic-ssh-user dockeradmin --generic-ssh-port 22 dev-db

$ docker-machine ls
NAME     ACTIVE   DRIVER       STATE     URL  SWARM  DOCKER    ERRORS
default  *        virtualbox   Running   tcp://192.168.100.10:2376
dev-db   -        generic      Running   tcp://192.168.100.11:2376

Linux
  1. Cara membuat volume fisik di Linux menggunakan LVM

  2. Cara membuat Pengguna Linux Menggunakan Ansible

  3. Ssh – Bagaimana Menghubungkan Ke Pc Melalui Pc Lain Menggunakan Ssh?

  1. Cara membuat Peran IAM di AWS menggunakan Terraform

  2. Bagaimana Cara Ssh Ke Server Menggunakan Server Lain??

  3. bagaimana cara melakukan tunnel Windows Remote Desktop melalui ssh menggunakan kotak linux?

  1. Cara Mengelola Host Windows Jarak Jauh menggunakan Ansible

  2. Cara membuat Bucket S3 menggunakan Python Boto3 di AWS

  3. Cara Menghubungkan Host Jarak Jauh Menggunakan Perintah ssh