GNU/Linux >> Belajar Linux >  >> Cent OS

Cara Menginstal Kubernetes di CentOS 7, Ubuntu 18.04 / 16.04 &Debian 9

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
Anda harus menonaktifkan swap agar Kubernetes berfungsi dengan baik

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.


Cent OS
  1. Cara Menginstal Spotify di Ubuntu &Debian

  2. Cara Menginstal Apache Hadoop di CentOS 7, Ubuntu 18.04 &Debian 9

  3. Cara Menginstal Ansible di CentOS 7 / RHEL 7 / Ubuntu 18.04 / 16.04 &Debian 9

  1. Cara Menginstal Kubernetes di Ubuntu 18.04

  2. Cara Install Bahasa Pemrograman Go di Linux (Ubuntu/Debian/CentOS)

  3. Cara menginstal Python pip di CentOS/Debian/Ubuntu

  1. Cara Menginstal Cluster Docker Kubernetes di CentOS 7

  2. Cara Menginstal Kubernetes di Ubuntu 20.04

  3. Cara Menginstal CTparental di Ubuntu 20.04 &Debian 10