Kubernetes adalah alat orkestrasi container Tingkat Produksi sumber terbuka yang membantu mengotomatiskan penerapan, penskalaan, pengelolaan aplikasi dalam container. Google awalnya mendesain Kubernetes dan sekarang dikelola oleh Cloud Native Computing Foundation.
Anda dapat menghubungi Kubernetes adalah manajer cluster untuk Docker , dan menyediakan fungsionalitas yang hampir sama dengan Docker Swarm . Dengan Kubernetes, Anda dapat men-deploy sejumlah replika container ke dalam cluster node, dan Kubernetes akan menangani sisanya (tempat untuk memunculkan container) untuk Anda.
Kita dapat menjalankan Kubernetes di mesin lokal menggunakan metode di bawah ini,
1. MinKube – Sebuah cluster Kubernetes node tunggal untuk pengembangan dan pengujian.
2. Kubeadm-dind (Kuberadm) – Sebuah cluster Kubernetes multi-node
Anda dapat membaca semua metode di sini .
Di sini, kita akan men-deploy cluster Kubernetes multi-node menggunakan kubeadm. Dalam pengaturan multi-node ini, kita akan memiliki satu node master dan beberapa node pekerja (minion).
Komponen
Simpul Utama
server kube-API: Ini adalah server API, berjalan pada master node yang mengekspos Kubernetes API
etcd: Penyimpanan kunci yang menyimpan data cluster Kubenetes
kube-scheduler: Ini adalah penjadwal yang berjalan pada master node yang memantau pod yang baru dibuat dan menjalankan pod tersebut pada node tertentu bergantung pada ketersediaan sumber daya.
kube-controller-manager: Ini adalah manajer kontrol yang berjalan pada manajer yang bertanggung jawab untuk memantau node dan memelihara replikasi pod.
cloud-controller-manager: Manajer kontrol cloud yang berinteraksi dengan penyedia cloud yang mendasarinya (Misalnya:DigitalOcean, Rancher, dll.).
Pekerja Node
kubelet: Ini berjalan di semua node pekerja dan menangani tugas-tugas seperti memulai pod dan container.
kube-proxy: Ini adalah proxy jaringan Kubernetes yang meneruskan permintaan masuk TCP/UDP ke backend container.
Container Runtime: Ini adalah perangkat lunak kontainer (Docker)
Lingkungan
Node | Nama Inang | Alamat IP | OS | CPU | RAM |
---|---|---|---|---|---|
Simpul Utama | master.itzgeek.local | 192.168.1.10 | CentOS 7 / RHEL 7 | 2 | 2GB |
Minion Node 1 | node1.itzgeek.local | 192.168.1.20 | Ubuntu 18.04 / 16.04 | 2 | 2GB |
Minion Node 2 | node2.itzgeek.local | 192.168.1.30 | Debian 9 | 2 | 2GB |
Di sini, saya menggunakan lingkungan campuran untuk demo ini. Namun, saya meminta Anda menggunakan sistem operasi serupa hanya untuk memudahkan pemecahan masalah.
Prasyarat
Menjadi pengguna root.
su -
ATAU
sudo su -
Setel Nama Inang
Tetapkan nama host unik untuk semua node Anda. Contoh:
hostnamectl set-hostname master.itzgeek.local
Buat entri host atau DNS record untuk menyelesaikan nama host untuk semua node.
vi /etc/hosts
Masuk:
192.168.1.10 master.itzgeek.local master 192.168.1.20 node1.itzgeek.local node1 192.168.1.30 node2.itzgeek.local node2
Firewall
Konfigurasikan Firewall agar Kubernetes berfungsi dengan benar.
Pada Node Master
FirwallD:
firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --reload
UFW:
ufw allow 6443/tcp ufw allow 2379tcp ufw allow 2380/tcp ufw allow 10250/tcp ufw allow 10251/tcp ufw allow 10252/tcp ufw allow 10255/tcp ufw reload
Pada Node Pekerja
FirwallD:
firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --reload
UFW:
ufw allow 10251/tcp ufw allow 10255/tcp ufw reload
SELinux
Pertimbangkan untuk menonaktifkan SELinux di CentOS 7 / RHEL 7 node.
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
Setelan Kernel
Di RHEL 7 /CentOS 7 , setel net.bridge.bridge-nf-call-iptables ke 1 di konfigurasi sysctl Anda.
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p
Instal Docker
Instal Docker di semua node Anda (Master dan Minion). Versi Docker v18.06 direkomendasikan, tetapi v1.11, v1.12, v1.13, dan 17.03 juga berfungsi dengan baik dengan Kubernetes.
CentOS 7 / RHEL 7
### Install Docker from CentOS/RHEL repository ### yum install -y docker systemctl enable docker systemctl start docker OR ### Install Docker CE 18.06 from Docker's CentOS repositories ### # Install Prerequisites yum install -y yum-utils device-mapper-persistent-data lvm2 # Add Docker repository yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # Install Docker yum update yum install -y docker-ce-18.06.1.ce # Create Docker Directory mkdir /etc/docker # Setup Docker Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker systemctl enable docker
Ubuntu 18.04 / Ubuntu 16.04
### Install Docker from Ubuntu's repositories ### apt-get update apt-get install -y docker.io OR ### Install Docker CE 18.06 from Docker's repositories for Ubuntu ### # Install Prerequisites apt-get update apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Download GPG Key curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - # Add Docker's Repository add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # Install Docker apt-get update apt-get install -y docker-ce=18.06.0~ce~3-0~ubuntu # Setup Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker
Debian 9
### Install Docker from Debian's repositories ### apt-get update apt-get install -y docker.io OR ### Install Docker CE 18.06 from Docker's repositories for Debian ### # Install Prerequisites apt-get update apt-get install -y apt-transport-https ca-certificates curl software-properties-common # Download GPG Key curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - # Add Docker's Repository add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" # Install Docker apt-get update apt-get install -y docker-ce=18.06.0~ce~3-0~debian # Setup Daemon cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker Daemon systemctl daemon-reload systemctl restart docker
Konfigurasi Repositori Kubernetes
Kubernetes paket tidak tersedia di repositori OS, jadi Anda harus mengikuti langkah-langkah di bawah ini untuk mengonfigurasi repositori di semua node Anda.
### CentOS 7 / RHEL 7 ### cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF ### Ubuntu 18.04 / 16.05 & Debian 9 ### apt-get update apt-get install -y curl apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Instal kubeadm, kubelet dan kubectl
Di semua node Anda, jalankan perintah berikut untuk menginstal paket yang diperlukan.
kubeadm:perintah untuk membuat cluster.
kubelet:Berjalan di semua mesin di cluster Anda dan melakukan hal-hal seperti memulai pod dan container.
kubectl:utilitas baris perintah untuk mengelola cluster Anda.
### CentOS 7 / RHEL 7 ### yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet systemctl start kubelet ### Ubuntu 16.04 / Debian 9 ### apt-get update apt-get install -y kubelet kubeadm kubectl
Inisialisasi Master Kubernetes
Pada node Master, jalankan perintah kubeadm init di terminal untuk menginisialisasi cluster.
Bergantung pada pengaya jaringan Anda gunakan, Anda mungkin perlu mengatur--pod-network-cidr
ke nilai tertentu. Di sini, saya menggunakan jaringan Wave pod yang tidak memerlukan argumen tambahan. kubeadm init
Keluaran:
[init] Using Kubernetes version: v1.13.0 [preflight] Running pre-flight checks [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection [preflight] You can also perform this action in beforehand using 'kubeadm config images pull' [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Activating the kubelet service [certs] Using certificateDir folder "/etc/kubernetes/pki" [certs] Generating "ca" certificate and key [certs] Generating "apiserver-kubelet-client" certificate and key . . . . . . . . . [bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster [bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.1.10:6443 --token d1dyaj.31zxywbg93s1ywjy --discovery-token-ca-cert-hash sha256:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede21509427009
Kelola Kluster
Jalankan perintah ini di terminal untuk mengelola dan bekerja di cluster sebagai pengguna biasa.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Jalankan perintah kubectl get pods –all-namespaces untuk memeriksa status cluster.
kubectl get pods --all-namespaces
Keluaran:
Anda dapat melihat bahwa bibit pod dalam status tertunda dan statusnya akan berubah setelah Anda menginstal jaringan pod.
Menyiapkan Jaringan Pod
Kita perlu menyiapkan add-on jaringan pod di cluster agar pod dapat berkomunikasi satu sama lain. Ada beberapa proyek yang menyediakan jaringan pod Kubernetes yaitu, belacu, kanal, kain flanel, dll.
Di sini, kita akan menggunakan jaringan pod Wave untuk demo ini.
export kubever=$(kubectl version | base64 | tr -d '\n') kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
Keluaran:
serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.extensions/weave-net created
Periksa status cluster sekali lagi. Pod coredns sekarang harus menjalankan status.
kubectl get pods --all-namespaces
Keluaran:
Gabung node pekerja ke cluster Kuberenete
Jika Anda ingat, ada token di output perintah kubeadm init untuk bergabung dengan node. Gunakan token dan gabung dengan semua node pekerja Anda.
kubeadm join 192.168.1.10:6443 --token d1dyaj.31zxywbg93s1ywjy --discovery-token-ca-cert-hash sha256:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede21509427009
Keluaran:
[preflight] Running pre-flight checks [discovery] Trying to connect to API Server "192.168.1.10:6443" [discovery] Created cluster-info discovery client, requesting info from "https://192.168.1.10:6443" [discovery] Requesting info from "https://192.168.1.10:6443" again to validate TLS against the pinned public key [discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "192.168.1.10:6443" [discovery] Successfully established connection with API Server "192.168.1.10:6443" [join] Reading configuration from the cluster... [join] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.13" ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Activating the kubelet service [tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap... [patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "node1.itzgeek.local" as an annotation This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the master to see this node join the cluster.
Output di atas mengkonfirmasi bahwa node telah berhasil ditambahkan ke cluster.
Sekarang, periksa status node pekerja pada node master menggunakan perintah berikut.
kubectl get nodes
Keluaran:
Anda akan melihat node pekerja dalam keadaan siap.
Dalam artikel berikutnya, kami akan menerapkan pod, layanan, dan pengontrol replikasi di Kubernetes.
Itu saja.