Install Kubernetes Di CentOS 7, Ubuntu 18.04 / 16.04 & Debian 9

Kubernetes adalah alat orkestrasi peti kemas Grade-Produksi open-source yang membantu mengotomatiskan penggunaan, penskalaan, pengelolaan aplikasi kemas. Google awalnya merancang Kubernetes dan sekarang dikelola oleh Cloud Native Computing Foundation.

Anda dapat memanggil Kubernetes adalah manajer kluster untuk Docker, dan menyediakan fungsi yang hampir sama dengan Docker Swarm. Dengan Kubernetes, Anda dapat menggunakan sejumlah replika kontainer ke gugus simpul, dan Kubernetes akan menangani sisa (tempat memunculkan wadah) untuk Anda.

Kita dapat menjalankan Kubernetes di mesin lokal menggunakan metode di bawah ini,

1. MinKube – Single node Kubernetes cluster untuk development dan testing.
2. Kubeadm-dind (Kuberadm) – Multi-node Kubernetes cluster

Kamu bisa melihat semu methode disini.

Di sini, kami akan menggunakan multi-node Kubernetes cluster menggunakan kubeadm. Dalam pengaturan multi-simpul ini, kami akan memiliki satu master node dan beberapa node pekerja (antek).

Komponen

Master Node

kube-API server: Ini adalah server API, berjalan pada master node yang mengekspos Kubernetes API
etcd: Penyimpanan kunci yang menyimpan data cluster Kubernetes
kube-scheduler: Ini adalah penjadwal yang berjalan pada master node yang memantau pod yang baru dibuat dan menjalankan pod tersebut pada node tertentu tergantung pada ketersediaan sumber daya.
kube-controller-manager: Ini adalah manajer kontrol yang berjalan pada manajer yang bertanggung jawab untuk memonitor node dan memelihara replikasi pod.
cloud-controller-manager: Manajer kontrol cloud yang berinteraksi dengan penyedia cloud yang mendasarinya (Ex: DigitalOcean, Rancher, etc..).

Worker Nodes

kubelet: Ini berjalan di semua node pekerja dan menangani tugas-tugas seperti memulai pod dan wadah.
kube-proxy: Ini adalah proxy jaringan Kubernetes yang meneruskan permintaan masuk TCP / UDP ke wadah backend.
Container Runtime: Container software (Docker)

Environment

Node Hostname IP Address OS CPU RAM
Master Node master.dreamblog.local 192.168.1.10 CentOS 7 / RHEL 7 2 2GB
Minion Node 1 node1.dreamblog.local 192.168.1.20 Ubuntu 18.04 / 16.04 2 2GB
Minion Node 2 node2.dreamblog.local 192.168.1.30 Debian 9 2 2GB
You must disable swap for Kubernetes to work properly

Di sini, saya menggunakan lingkungan campuran untuk demo ini. Tapi, saya meminta Anda menggunakan sistem operasi yang sama hanya untuk memudahkan pemecahan masalah.

Persyaratan

Root user.

su -

ATAU

sudo su -

Set Hostname

Set unique hostname untuk semua nodes. Contoh:

hostnamectl set-hostname master.dreamblog.local

Buat host entry atau DNS record untuk resolve hostname untuk semua nodes.

vi /etc/hosts

Entry:

192.168.1.10 master.dreamblog.local master
192.168.1.20 node1.dreamblog.local node1
192.168.1.30 node2.dreamblog.local node2

Firewall

Konfigurasi Firewall untuk Kubernetes bekerja dengan benar.

On Master Node

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 Worker Nodes

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 pada CentOS 7 / RHEL 7 nodes.

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

Kernel Settings

Pada RHEL 7 /CentOS 7, set net.bridge.bridge-nf-call-iptables ke 1 dalam sysctl config 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

Install 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 bekerja 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 Kubernetes Repository

Kubernetes packages tidak tersedia di repositori OS, jadi Anda harus mengikuti langkah-langkah di bawah ini untuk mengkonfigurasi 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

Install kubeadm, kubelet dan kubectl

Di semua node Anda, jalankan perintah berikut untuk menginstal yang diperlukan packages.

kubeadm: perintah untuk membuat cluster.

kubelet: Berjalan di semua mesin di cluster Anda dan melakukan hal-hal seperti memulai pod dan containers.

kubectl: utilitas baris perintah untuk mengelola cluster.

### 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

Initialize Kubernetes Master

Pada Master node, jalankan perintah init kubeadm di terminal untuk menginisialisasi cluster.

Tergantung pada network add-on 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

Output:

[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

Manage Cluster

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

Output:

Kamu bisa melihat coredns pod dalam status tertunda dan statusnya akan berubah setelah Anda menginstal jaringan pod.

Setup Pod Network

Kita perlu mengatur add-on jaringan pod pada kluster sehingga pod dapat saling berkomunikasi. Ada beberapa proyek menyediakan jaringan pod Kubernetes namely, calico, canal, flannel.

Di sini, kami akan menggunakan jaringan Wave pod untuk demo ini.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Output:

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

Output:

Join worker nodes ke Kuberenete cluster

Jika Anda ingat, ada token di output dari perintah init kubeadm untuk bergabung dengan node. Gunakan token dan bergabung dengan semua node pekerja Anda.

kubeadm join 192.168.1.10:6443 --token d1dyaj.31zxywbg93s1ywjy --discovery-token-ca-cert-hash sha256:71a91721595fde66b6382908d801266602a14de8e16bdb7a3cede21509427009

Output:

[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.dreamblog.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 master node menggunakan perintah berikut.

kubectl get nodes

Output:

Anda akan melihat node pekerja dalam status siap.

Dalam artikel kami berikutnya, kami akan menggunakan pod, layanan, dan pengontrol replikasi di Kubernetes.

One thought on “Install Kubernetes Di CentOS 7, Ubuntu 18.04 / 16.04 & Debian 9

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top