Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Installing kubeadm
Laman ini menunjukkan cara untuk menginstal kubeadm.
Untuk informasi mengenai cara membuat sebuah klaster dengan kubeadm setelah kamu melakukan proses instalasi ini, lihat laman Menggunakan kubeadm untuk Membuat Sebuah Klaster.
ip link atau ifconfig -asudo cat /sys/class/dmi/id/product_uuidSangat memungkinkan bagi perangkat keras untuk memiliki alamat yang unik, namun beberapa mesin virtual bisa memiliki nilai yang identik. Kubernetes menggunakan nilai-nilai tersebut untuk mengidentifikasi Node-Node secara unik pada klaster. Jika nilai-nilai tersebut tidak unik pada tiap Node, proses instalasi bisa saja gagal.
Jika kamu memiliki lebih dari satu adaptor jaringan, dan komponen Kubernetes tidak dapat dijangkau melalui rute bawaan (default route), kami merekomendasikan kamu untuk menambahkan rute IP sehingga alamat-alamat klaster Kubernetes melewati adaptor yang tepat.
Agar iptables pada Node Linux dapat melihat bridged traffic dengan benar, kamu harus memastikan net.bridge.bridge-nf-call-iptables bernilai 1 pada pengaturan sysctl, misalnya.
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
Pastikan modul br_netfilter sudah dimuat sebelum melakukan langkah ini. Hal ini dilakukan dengan menjalankan lsmod | grep br_netfilter. Untuk memuatnya secara eksplisit gunakan sudo modprobe br_netfilter.
Untuk detail lebih lanjut, silakan lihat laman Persyaratan Plugin Jaringan.
| Protokol | Arah | Rentang Porta | Kegunaan | Digunakan oleh |
|---|---|---|---|---|
| TCP | Inbound | 6443* | Kubernetes API server | All |
| TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 10251 | kube-scheduler | Self |
| TCP | Inbound | 10252 | kube-controller-manager | Self |
| Protokol | Arah | Rentang Porta | Kegunaan | Digunakan oleh |
|---|---|---|---|---|
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 30000-32767 | NodePort Services† | All |
† Jangkauan porta bawaan untuk Service NodePort.
Angka porta yang ditandai dengan * dapat diganti (overrideable), sehingga kamu harus memastikan porta khusus lainnya yang kamu sediakan juga terbuka.
Meskipun porta etcd turut dituliskan pada Node control-plane, kamu juga bisa menghos klaster etcd-mu sendiri secara eksternal atau pada porta custom.
Plugin jaringan Pod yang kamu gunakan (lihat di bawah) juga mungkin membutuhkan porta tertentu untuk terbuka. Karena hal ini dapat berbeda pada setiap plugin jaringan Pod, silakan lihat dokumentasi plugin mengenai porta yang dibutuhkan.
Untuk menjalankan Container pada Pod, Kubernetes menggunakan _runtime_ Container.
Secara bawaan, Kubernetes menggunakan Container Runtime Interface (CRI) sebagai perantara dengan runtime Container pilihanmu.
Jika kamu tidak menentukan runtime, kubeadm secara otomatis mencoba untuk mendeteksi runtime Container yang terinstal dengan memindai sekumpulan soket domain Unix yang umum digunakan. Tabel berikut menunjukkan runtime Container dan lokasi soketnya:
| Runtime | Lokasi domain soket Unix |
|---|---|
| Docker | /var/run/docker.sock |
| containerd | /run/containerd/containerd.sock |
| CRI-O | /var/run/crio/crio.sock |
Komponen kubelet berintegrasi dengan Docker melalui implementasi CRI dockershim bawaannya.
Lihat runtime Container untuk informasi lebih lanjut.
Secara bawaan, kubeadm menggunakan Docker sebagai runtime Container.
Komponen kubelet berintegrasi dengan Docker melalui implementasi CRI dockershim bawaannya.
Lihat runtime Container untuk informasi lebih lanjut.
Kamu akan menginstal package berikut pada semua mesinmu:
kubeadm: alat untuk mem-bootstrap klaster.
kubelet: komponen yang berjalan pada seluruh mesin pada klaster
dan memiliki tugas seperti menjalankan Pod dan Container.
kubectl: alat untuk berinteraksi dengan klastermu.
Alat kubeadm tidak akan menginstal atau mengelola kubelet ataupun kubectl untukmu, jadi kamu harus memastikan
keduanya memiliki versi yang cocok dengan control plane Kubernetes yang akan kamu instal
dengan kubeadm. Jika tidak, ada risiko version skew yang dapat terjadi dan
dapat berujung pada perangai yang bermasalah dan tidak terduga. Namun, satu version skew minor antara
kubelet dan control plane masih diperbolehkan, tetapi versi kubelet tidak boleh melebihi versi API
Server. Sebagai contoh, kubelet yang berjalan pada versi 1.7.0 akan kompatibel dengan API Server versi 1.8.0, tetapi tidak sebaliknya.
Untuk informasi mengenai instalasi kubectl, lihat Menginstal dan mengatur kubectl.
Untuk informasi lebih lanjut mengenai version skew, lihat:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Mengatur SELinux menjadi permissive mode (menonaktifkannya secara efektif)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
Catatan:
Mengatur SELinux menjadi permissive mode dengan menjalankan setenforce 0 dan sed ... menonaktifkannya secara efektif.
Hal ini diperlukan untuk mengizinkan Container untuk mengakses filesystem hos, yang dibutuhkan untuk jaringan Pod sebagai contoh.
Kamu harus melakukan ini sampai dukungan SELinux ditingkatkan pada kubelet.
Kamu dapat membiarkan SELinux aktif jika kamu mengetahui cara mengonfigurasinya, tetapi hal tersebut mungkin membutuhkan pengaturan yang tidak didukung oleh kubeadm.
Menginstal plugin CNI (dibutuhkan untuk kebanyakan jaringan Pod):
CNI_VERSION="v0.8.2"
ARCH="amd64"
mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz
Menginstal crictl (dibutuhkan untuk kubeadm / Kubelet Container Runtime Interface (CRI))
CRICTL_VERSION="v1.22.0"
ARCH="amd64"
mkdir -p /opt/bin
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
Menginstal kubeadm, kubelet, kubectl dan menambahkan systemd service kubelet:
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
mkdir -p /opt/bin
ARCH="amd64"
cd /opt/bin
curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl}
chmod +x {kubeadm,kubelet,kubectl}
RELEASE_VERSION="v0.2.7"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service
mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Mengaktifkan dan menjalankan kubelet:
systemctl enable --now kubelet
Sekarang kubelet akan melakukan restart setiap beberapa detik, sambil menunggu dalam kondisi crashloop sampai kubeadm memberikan instruksi yang harus dilakukan.
Ketika menggunakan Docker, kubeadm akan mendeteksi secara otomatis driver cgroup untuk kubelet
dan mengaturnya pada berkas /var/lib/kubelet/config.yaml pada saat runtime.
Jika kamu menggunakan CRI yang berbeda, kamu harus memodifikasi berkasnya dengan nilai cgroupDriver yang kamu gunakan, seperti berikut:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: <value>
Harap diperhatikan, kamu hanya perlu melakukannya jika driver cgroup dari CRI pilihanmu
bukanlah cgroupfs, karena nilai tersebut merupakan nilai bawaan yang digunakan oleh kubelet.
--cgroup-driver sudah dihilangkan pada kubelet, jika kamu memilikinya pada /var/lib/kubelet/kubeadm-flags.env
atau /etc/default/kubelet(/etc/sysconfig/kubelet untuk RPM), silakan hapus dan gunakan KubeletConfiguration
(secara bawaan disimpan di /var/lib/kubelet/config.yaml).Kamu harus melakukan restart pada kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
Deteksi driver cgroup secara otomatis untuk runtime Container lainnya seperti CRI-O dan containerd masih dalam proses pengembangan.
Jika kamu menemui kesulitan dengan kubeadm, silakan merujuk pada dokumen penyelesaian masalah.