<p>kubeadm harus menyediakan opsi --node-ip</p>

Dibuat pada 10 Mar 2017  ·  34Komentar  ·  Sumber: kubernetes/kubeadm

PERMINTAAN FITUR

Jika kubeadm digunakan untuk men-deploy cluster K8S, tampaknya alamat IP internal penyedia cloud secara default digunakan. Namun, akan sangat membantu (untuk kasus penggunaan penerapan lintas cloud) untuk menyediakan opsi untuk menyetel opsi --node-ip dari kubelet (lihat https://kubernetes.io/docs/admin/kubelet/).

Jadi, panggilan init kubeadm bisa pada node dengan <public_master_ip> terlihat seperti itu:

kubeadm init --token=<token> --api-advertise-addresses=<public_master_ip> --node-ip=<public_master_ip>

Dan kubeadm bergabung pada node dengan <public_worker_ip> akan terlihat seperti itu:

kubeadm join --token=<token> --node-ip=<public_worker_ip>

Karena itu, kubeadm dapat dengan mudah digunakan untuk penerapan penyedia lintas-cloud. Jika ada opsi lain yang tidak saya ketahui, saya ingin mendengarnya. Tetapi pencarian saya tidak menemukan solusi (menggunakan kubeadm).

documentatioimprovement help wanted prioritimportant-longterm

Komentar yang paling membantu

@stepin Saya baru saja menyiapkan cluster 1,11 menggunakan kubeadm dan mendapatkan ini setelahnya cat: /etc/sysconfig/kubelet: No such file or directory

/etc/systemd/system/kubelet.service.d/20-custom.conf juga tidak ada jadi saya tidak yakin apa yang Anda lakukan di sana.

Jika yang Anda katakan itu benar, tampaknya permainan config hot potato berlanjut.

Saya dapat menemukan lokasi lain untuk kubelet config di sini: /etc/default/kubelet

Untuk pelancong masa depan (setidaknya untuk minggu depan), ini sepertinya berhasil:

PRIVATE_IP=10.99.0.0
echo "KUBELET_EXTRA_ARGS=--node-ip=$PRIVATE_IP" > /etc/default/kubelet
systemctl daemon-reload
systemctl restart kubelet

Jelas Anda harus mengubah IP ke milik Anda yang ada di node tertentu itu.

Penafian: Saya baru saja memeriksa Kubernetes jadi saya tidak menjamin ini tidak melakukan sesuatu yang buruk. Padahal, /etc/systemd/system/kubelet.service.d/10-kubeadm.conf memang mengarah ke /etc/default/kubelet , jadi saya rasa ini adalah hal yang benar untuk dilakukan.

Semua 34 komentar

Saat ini saya mengalami masalah saat menyiapkan cluster Kubernetes di DigitalOcean karena ini. Secara default, kubelet akan mengikat dan mengekspos / menyiarkan ip gateway default, yang dalam kasus ini adalah IP publik yang menghadapi lalu lintas Internet. Kemudian ketika sampai pada titik menyiapkan add-on jaringan pod (seperti Weave), semuanya berantakan karena IP iklan master adalah alamat IP jaringan internal tetapi node pekerja mencoba untuk mengekspos yang publik: /

Solusinya adalah memperbarui file unit yang berada di bawah /etc/systemd/system/kubelet.service.d/10-kubeadm.conf untuk menambahkan --node-ip=<private_worker_ip> , memuat ulang unit dan memulai ulang kubelet untuk membuatnya berfungsi.

Jika kubeadm dapat melakukan ini secara default dengan melewatkan opsi seperti yang disarankan @nkratzke, itu akan bagus!

Saya hanya ingin mengonfirmasi bahwa menambahkan opsi --node-ip=<private-worker-ip> ke pengaturan di file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf tidak akan memperbaiki masalah ini untuk pengaturan yang saya jelaskan sebelumnya. Meskipun node mendengarkan pada antarmuka ini, Kubernetes tetap menggunakan gateway default untuk berkomunikasi antar node, yang dalam hal ini adalah alamat IP publik.

Saya mempunyai masalah yang sama. Saya mencoba metode Anda dan itu juga tidak berhasil untuk saya. Apakah Anda berhasil membuatnya berhasil?

@agsergi Saya mencoba mengatur cluster k8s di DigitalOcean dengan opsi Jaringan Pribadi diaktifkan, yang membawa saya ke masalah ini. Menonaktifkan fitur itu berhasil untuk saya, tetapi saya tidak yakin apakah Anda berada di perahu yang sama.

Saya kira masalah ini akan tetap ada jika Anda memiliki lebih dari dua NIC yang terpasang ke mesin.

Teman-teman,
Saya memiliki dua antarmuka pada VM saya, satu untuk NAT dan yang kedua jika untuk adaptor hostonly. Secara default, kubeadmin mengambil IP antarmuka default (NAT dalam kasus saya) jika Anda ingin menggunakan antarmuka lain, gunakan:
$ sudo kubeadm init --apiserver-advertise-address =

Dan itu berhasil untuk saya.

@luxas Mengapa ini diberi tag sebagai kind / support? Apakah ada cara untuk menggunakan kubeadm dengan node ip yang bukan merupakan sumber dari rute default?

@evocage tidak ada --apiserver-advertise-address =

terimakasih banyak.

Saya mengalami masalah yang sama di Scaleway.

Ketika saya menginisialisasi master, saya telah melewati --apiserver-advertise-address=<private_net_IP> tetapi ketika saya ingin menambahkan node ( kubeadm join --toke=<token> <master_private_IP>:6443 ) kube-proxy dan pod weave-net tidak dapat dimulai (error sinkronisasi pod)

Tetapi ketika saya memasang IP publik ke node saya dan reboot semuanya berjalan dengan baik: berpikir:

Ada ide?

Masalah yang sama saat mencoba menyiapkan kubernetes pada VM host dengan IP tunggal di mana hanya beberapa port yang dapat diteruskan ke VM. Ada solusi untuk membuatnya bekerja?

Hanya ingin memberi +1. Saya mencoba menjalankan serangkaian VM Digitalocean dengan IP pribadi pada semuanya, namun alamat yang dihadapi publik tetap bekerja dengan cara tertentu ke dalam cluster.

Saya berhasil mendapatkan IP pribadi yang berfungsi dengan menjalankan ini di master:

kubeadm init --apiserver-advertise-address=<private-master-ip> init

Menambahkan --node-ip=<private-node-ip> ke /etc/systemd/system/kubelet.service.d/10-kubeadm.conf , memuat ulang daemon, memulai ulang kubelet, lalu menjalankan:

kubeadm join --token <token> <private-master-ip>:6443 --discovery-token-ca-cert-hash sha256:<hash>

@mongrelion Apa jenis komunikasi antara master <-> node yang masih menggunakan antarmuka publik? Saya tidak dapat mereplikasi ini jadi saya tertarik untuk mengetahui apakah kubernetes berperilaku tidak terduga.

Itu berhasil! Kombinasi dari --apiserver-advertise-address untuk memastikan master dimulai di tempat yang tepat, dan --node-ip dalam konfigurasi kubelet adalah kombinasi ajaib.

Namun, menurut permintaan ini, memiliki opsi --node-ip langsung di kubeadm sehingga file konfigurasi diinisialisasi dengan benar akan membantu pemula yang tidak mengerti seperti saya yang mencoba memutar cluster :)

Terima kasih @jamiehannaford untuk ringkasannya. Apakah kami pikir kami harus mendokumentasikan ini dengan lebih jelas?

@luxas Ya saya pikir kasus penggunaan ini didokumentasikan secara eksplisit akan berguna

@jamiehannaford Jika Anda juga ingin menambahkan ini ke perombakan dokumen untuk v1.9, kirimkan saya paragraf untuk ditambahkan ke https://github.com/kubernetes/website/pull/6103

@fabriziopandini Tentu! Selesai

Hai,

Saya ingin memberikan umpan balik juga. Saya mencoba menggunakan kubeadm untuk membangun cluster node tunggal yang aman.
Saya ingin semua layanan kubernetes diikat ke localhost namun itu tidak berhasil.

Saya menggunakan perintah ini dan cluster dibuat:
kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=127.0.0.1 \ --apiserver-cert-extra-sans=127.0.0.1,staging.my-server.net
Namun /etc/kubernetes/admin.conf dan teman-teman berisi alamat IP publik dari master.
server: https://75.xx.yy.zz:6443

Saya akan mencoba pendekatan --node, tetapi saya akan sangat menghargai jika Anda dapat membantu saya menemukan solusi untuk ini.

Kasus penggunaan saya:

Saya memiliki mesin gemuk yang ingin saya gunakan sebagai lingkungan pementasan dan mungkin sebagai lingkungan produksi untuk proyek-proyek kecil di mana saya tidak peduli tentang HA. Saya dapat menggunakan SSH dan menggunakan kubectl untuk mengontrol cluster.

Terima kasih,

Saya memiliki masalah yang persis sama dengan @ Mosho1 di sini dan turun ke dasarnya.

Saya menggunakan DO dan CoreOS tetapi ini benar-benar terkait dengan keduanya dan dapat terjadi pada penyedia dan distro lain. Ini juga tidak terkait dengan jaringan pribadi DO yang diaktifkan atau dinonaktifkan: Saya mereproduksi masalah di kedua kasus.

Apa yang terjadi adalah bahwa kubelet sebagaimana diatur oleh kubeadm melihat antarmuka dan memutuskan untuk membawa subnet pribadinya sendiri ke dalam campuran, terlepas dari IP atau antarmuka yang ditetapkan yang tersedia, dan ingin melakukannya selanjutnya sama yang dianggap "utama" (yang pertama? INGIN satu? Entahlah). Yang ini tidak terlihat melalui ifconfig tetapi dengan mudah melalui ip addr , dan rute juga diatur, tetapi tidak ada kemungkinan ini akan terbang melalui jaringan DO yang menghubungkan node eth0 .

EDIT: Terima kasih kepada @klausenbusk , tampaknya kubelet mengambil IP anchor dengan asumsi bahwa itu bisa berguna padahal tidak. Lihat detailnya di bawah.

Solusinya adalah memberi tahu kubelet IP apa yang akan digunakan. Ini bisa menjadi jaringan publik atau pribadi jika Anda menggunakan jaringan pribadi opsional.

Inilah cara saya memanfaatkan --node-ip . Hati-hati, ini mengasumsikan KUBELET_EXTRA_ARGS belum disetel di file unit.

$ DROPLET_IP_ADDRESS=$(ip addr show dev eth0 | awk 'match($0,/inet (([0-9]|\.)+).* scope global eth0$/,a) { print a[1]; exit }')
$ echo $DROPLET_IP_ADDRESS  # check this, jus tin case
$ echo "Environment=\"KUBELET_EXTRA_ARGS=--node-ip=$DROPLET_IP_ADDRESS\"" >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
$ systemctl daemon-reload
$ systemctl restart kubelet

Jadi ia memilih WAN satu (eth0), melihat (atau mengabaikan) IP publik, dan memutuskan untuk menambahkan subnet pribadi kedua (seperti 10.19.0.0/255 dalam kasus saya), mungkin dengan keyakinan bahwa semua node eth0 adalah di tautan yang sama.

Apa kamu yakin akan hal itu? Itu bisa saja menjadi ip jangkar (bandingkan dengan curl http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address )

@klausenbusk Anda benar sekali, itu spekulasi yang menghibur dari pihak saya, maaf! Berikut ini adalah dari node master, sekarang menggunakan --node-ip .

Jadi sepertinya kubelet mengambil yang satu itu dengan asumsi bahwa itu bisa berguna padahal tidak?

$ curl http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address
10.19.0.39
$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet yyy.yyy.yyy.yyy/20 brd yyy.yyy.yyy.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.19.0.39/16 brd 10.19.255.255 scope global eth0
       valid_lft forever preferred_lft forever

Maukah Anda memperbarui dokumen

@jamiehannaford Sepertinya saya bisa melakukan itu :)

/ tetapkan @liztio

Saya telah melihat ini dan saya pikir konsensus bahkan jika pengguna meminta argumen --node-ip untuk ditambahkan ke kubeadm, adalah memodifikasi konfigurasi kubelet dan menggunakan parameter seperti yang disarankan @jamiehannaford di sini adalah pendekatan yang disarankan:
https://github.com/kubernetes/kubeadm/issues/203#issuecomment -335416377

(atau mungkin menambahkan $ KUBELET_EXTRA_ARGS sebelum memulai ulang subset).

mengingat keputusan untuk beralih dari menambahkan argumen cmd ekstra ke kubeadm, saya pikir mungkin aman untuk menutup masalah ini .... kecuali ada rencana untuk mengaktifkan ini dengan opsi MasterConfig kubeadm (entah bagaimana ?? ... seperti yang kita andalkan pengguna mengedit konfigurasi kubelet dan beristirahat secara manual jika ada perubahan).

edit: atau mungkin dengan konfigurasi kubelet dinamis jika memungkinkan?

semua saran untuk perubahan dokumentasi di atas tampaknya digabungkan.

@timstclair @liztio

Saya baik-baik saja dengan menutup yang ini.

Perhatikan bahwa di Kubernetes 1.11, pengaturan KUBELET_EXTRA_ARGS di /etc/systemd/system/kubelet.service.d/20-custom.conf tidak berfungsi lagi: itu harus diatur di / etc / sysconfig / kubelet (sintaks yang sedikit berbeda file ini).

@stepin Saya baru saja menyiapkan cluster 1,11 menggunakan kubeadm dan mendapatkan ini setelahnya cat: /etc/sysconfig/kubelet: No such file or directory

/etc/systemd/system/kubelet.service.d/20-custom.conf juga tidak ada jadi saya tidak yakin apa yang Anda lakukan di sana.

Jika yang Anda katakan itu benar, tampaknya permainan config hot potato berlanjut.

Saya dapat menemukan lokasi lain untuk kubelet config di sini: /etc/default/kubelet

Untuk pelancong masa depan (setidaknya untuk minggu depan), ini sepertinya berhasil:

PRIVATE_IP=10.99.0.0
echo "KUBELET_EXTRA_ARGS=--node-ip=$PRIVATE_IP" > /etc/default/kubelet
systemctl daemon-reload
systemctl restart kubelet

Jelas Anda harus mengubah IP ke milik Anda yang ada di node tertentu itu.

Penafian: Saya baru saja memeriksa Kubernetes jadi saya tidak menjamin ini tidak melakukan sesuatu yang buruk. Padahal, /etc/systemd/system/kubelet.service.d/10-kubeadm.conf memang mengarah ke /etc/default/kubelet , jadi saya rasa ini adalah hal yang benar untuk dilakukan.

@jazoom - Terima kasih atas komentar Anda, akhirnya membuat saya membaca file unit systemd lebih dekat. Saya pikir saya akan gila karena saya dapat memunculkan konfigurasi yang sama di 1.10, dan semuanya bekerja ... memunculkan konfigurasi di 1.11 dan kustom --node-ip saya atur tidak berlaku sama sekali. Beralih ke menambahkan argumen tambahan di /etc/default/kubelet memperbaiki masalah untuk saya.

@geerlingguy Sama- sama.

Setidaknya itu bukan kasus "berhasil setiap detik saya memunculkan cluster 1,11". Masalah yang tidak dapat direproduksi itu benar-benar akan membuat Anda gila.

Baru saja mengalami ini di "Kubeadm 1.13". Perbaiki dengan menggunakan berikut ini:

1) Tambahkan "--node-ip" ke '/var/lib/kubelet/kubeadm-flags.env':

[root@Node-18121 ~]# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --node-ip=10.10.10.1

2) Mulai ulang Kubelet:

systemctl daemon-reload && systemctl restart kubelet

^ Jika ada yang tahu bagaimana membuatnya bekerja dengan IP mengambang yang tidak muncul di NIC, beri tahu saya. Berhasil sebaliknya.

Hai,

Silakan coba https://wiki.hetzner.de/index.php/Cloud_floating_IP_persistent/en ini.
Ini berfungsi untuk Hetzner, tetapi menurut saya ini generik.
Eugen

Ini bekerja dengan sempurna. Terima kasih.

Baru saja mengalami masalah ini di "Kubeadm 1.13". Masalah telah diperbaiki menggunakan metode berikut ini:

  1. Tambahkan "--node-ip" di "/var/lib/kubelet/kubeadm-flags.env":
[root@Node-18121 ~]# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --node-ip=10.10.10.1
  1. Mulai ulang Kubelet:
systemctl daemon-reload && systemctl restart kubelet

terima kasih banyak, pindah

Apakah halaman ini membantu?
0 / 5 - 0 peringkat