Kubernetes (selalunya disingkatkan kepada k8s) ialah sebuah sistem sumber terbuka untuk mengautomasi pengerahan, penskalaan, dan pengurusan aplikasi-aplikasi berkontena.Ia pada mulanya direka oleh Google dan kini diselenggara oleh Yayasan Pengkomputeran Asli Awan. Kubernetes mampu berfungsi dengan pelbagai peralatan kontena termasuk docker dan rkt.Kebanyakan perkhidmatan awan menawarkan pelantar atau infrastruktur berasaskan Kubernetes sebagai perkhidmatan (PaaS atau IaaS) di mana Kubernetes boleh dikerahkan sebagai khidmat pemberi pelantar. Wikipedia
Prasyarat
Pelayan yang menjalankan Centos 7/RHEL 7 (1 Master Node & 2 Worker Nodes ). Sebaiknya Master Node anda mempunyai sekurang-kurangnya 2 CPU.
Sambungan internet tersedia pada semua node. Bagi mengambil pakej Kubernetes dan Docker dari repositori. Anda juga perlu memastikan bahawa pengurus pakej yum telah dipasang secara lalai bagi mengambil pakej dari repositori.
Akses ke akaun dengan hak sudo atau root. Dalam tutorial ini, saya akan menggunakan akaun root.
Prasyarat
Pelayan yang menjalankan Centos 7/RHEL 7 (1 Master Node & 2 Worker Nodes ). Sebaiknya Master Node anda mempunyai sekurang-kurangnya 2 CPU.
Sambungan internet tersedia pada semua node. Bagi mengambil pakej Kubernetes dan Docker dari repositori. Anda juga perlu memastikan bahawa pengurus pakej yum telah dipasang secara lalai bagi mengambil pakej dari repositori.
Akses ke akaun dengan hak sudo atau root. Dalam tutorial ini, saya akan menggunakan akaun root.
Image tecmint.com
Pemasangan Kubernetes Kluster pada Master-Node
Kubernetes memerlukan enjin kontena untuk berfungsi. Bagi pemasangan ini, saya menggunakan Docker kerana ia adalah yang paling popular.
Langkah-langkah berikut akan dijalankan pada Master-Node .
Langkah 1: Sediakan Hostname, Firewall dan SELinux. Pada Master node anda, tetapkan nama host. Jika anda tiada pelayan DNS, sila kemaskini fail /etc/host anda.
Pemasangan Kubernetes Kluster pada Master-Node
Kubernetes memerlukan enjin kontena untuk berfungsi. Bagi pemasangan ini, saya menggunakan Docker kerana ia adalah yang paling popular.
Langkah-langkah berikut akan dijalankan pada Master-Node .
Langkah 1: Sediakan Hostname, Firewall dan SELinux. Pada Master node anda, tetapkan nama host. Jika anda tiada pelayan DNS, sila kemaskini fail /etc/host anda.
Pasang NTP (Pilihan)
#yum install ntp -y
#systemctl restart ntpd;systemctl enable ntpd
1) Sediakan Hostname
#hostnamectl set-hostname 'khairi-k8s-master'
#exec bash
2) Copy and paste repositori dari Google berikut.
#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
-Taip "EOF" untuk keluar.
-Manual import Gpgkey.
#rpm -import 'https://packages.cloud.google.com/yum/doc/yum-key.gpg'
#rpm -import 'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg'yum repolist | grep -i Kubernetes
3) Set firewall/selinux, host, dll.
#setenforce 0
#sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
#grep disabled /etc/sysconfig/selinux
#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
#modprobe br_netfilter
#echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
#cat /proc/sys/net/bridge/bridge-nf-call-iptables
#echo '192.168.122.1 khairi-k8smaster' >> /etc/hosts
#echo '192.168.122.3 khairi-k8sWorker01' >> /etc/hosts
#echo '192.168.122.5 khairi-k8sWorker02' >> /etc/hosts
4) Periksa sambungan Master & woker node.
#cat /etc/hosts
#ping -c2 khairi-k8sWorker01
#ping -c2 khairi-k8sWorker02
#ping -c2 khairi-k8smaster
5) Pasang pakej pada master & worker node
#yum install kubeadm docker -y
atau
#yum install kubeadm docker -y --nogpgcheck (Tidak digalakkan)
6) Restart docker & servis kubelet
#systemctl restart docker;systemctl enable docker
#systemctl restart kubelet;systemctl enable kubelet
7) Pastikan swap telah dimatikan & dikeluarkan dari /etc/fstab
#sed -i '/swap/d' /etc/fstab
#swapoff -a
8) Set IP forwarding/iptables. Kemaskini baris berikut.
#echo net.bridge.bridge-nf-call-ip6tables = 1 >> /etc/sysctl.conf
#echo net.bridge.bridge-nf-call-iptables = 1 >> /etc/sysctl.conf
#echo “br_netfilter” > /etc/modules-load.d/br_netfilter.conf
#grep br_netfilter /etc/modules-load.d/br_netfilter.conf
9) Kemaskini tetapan baru kernel dari paramater yang ditukar:
sysctl -p
10) Memulakan Master node and set julat IP untuk Pods atau kontena Docker:
#kubeadm init --pod-network-cidr=10.17.0.0/16 --service-cidr=10.18.0.0/24
atau lebih ringkas.
#kubeadm init --pod-network-cidr=172.30.0.0/16
-Kalau tidak berjaya & ingin memulakan semula tetapan node (Tidak digalakkan).
#kubeadm reset
11) Buat & set direktori baru berikut.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
12) Periksa Nodes
#kubectl get nodes
or
#kubectl get nodes -o wide
13) Set rangkaian Flannel untuk kontena Docker anda. Pergi laman web Flannel. Salin link bagi kubernetes seperti contoh berikut.
#kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
14) Senaraikan semua Namespace. Run arahan dibawah untuk periksa pods. Pastikan status pod Flannel & kemudian DNS telah bertukar ke "Running".
#kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-66bff467f8-mk62w 1/1 Running 0 5m42s
kube-system coredns-66bff467f8-rmtr5 1/1 Running 0 5m42s
kube-system etcd-khairi-k8smaster 1/1 Running 0 5m49s
kube-system kube-apiserver-khairi-k8smaster 1/1 Running 0 5m49s
kube-system kube-controller-manager-khairi-k8smaster 1/1 Running 0 5m49s
kube-system kube-flannel-ds-amd64-97dhp 1/1 Running 0 57s
kube-system kube-proxy-6xnw8 1/1 Running 0 5m42s
kube-system kube-scheduler-khairi-k8smaster 1/1 Running 0 5m49s
15) Pastikan status Node akan bertukar "Ready".
#kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
khairi-k8smaster Ready master 6m8s v1.18.2 192.168.122.1 <none> Red Hat Enterprise Linux 3.10.0-957.el7.x86_64 docker://1.13.1
16) Tengok detail pod flannel.
#kubectl describe pods kube-flannel-ds-amd64-p9s9f --namespace=kube-system
17) Tengok IP Flannel dan lain-lain.
#ip a
18) Simpan arahan & Token yang diberikan.
#kubeadm join 192.168.82.80:6443 --token 004457.x7fxdbuz38lusz5q \
--discovery-token-ca-cert-hash sha256:5c47fb51260f3ca9b66e1cffcbdacbcc69dda7ca2f005bd7acb02ca0933e4699
-Periksa token
#oc whoami -t
-Jika Token hilang. Ikut arahan berikut.
#kubeadm token list
#kubeadm token create <salin token dari output command tadi>** --print-join-command
-Atau jika tiada token. Buat baru (default TTL 24 jam)
# kubeadm token generate
irmo0w.q3vzpjv0y859990u
# kubeadm token create irmo0w.q3vzpjv0y859990u --print-join-command --ttl=0
W0421 04:43:17.522232 7672 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join 192.168.122.3:6443 --token irmo0w.q3vzpjv0y859990u --discovery-token-ca-cert-hash sha256:83a8174977e2afc1710677ef2071929e1ebd0a65f269d3851c7733f201a9e691
Worker Node1
------------------
19) Set hostname.
#hostnamectl set-hostname 'khairi-k8sWorker01'
#exec bash
20) Copy and paste repositori dari Google berikut.
#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
-Taip "EOF" untuk keluar.
-Manual import Gpgkey.
#rpm -import 'https://packages.cloud.google.com/yum/doc/yum-key.gpg'
#rpm -import 'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg'yum repolist | grep -i Kubernetes
21) Set firewall/selinux, host, dll.
#setenforce 0
#sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
#grep disabled /etc/sysconfig/selinux
#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
#modprobe br_netfilter
#echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
#cat /proc/sys/net/bridge/bridge-nf-call-iptables
#echo '192.168.122.1 khairi-k8smaster' >> /etc/hosts
#echo '192.168.122.3 khairi-k8sWorker01' >> /etc/hosts
#echo '192.168.122.5 khairi-k8sWorker02' >> /etc/hosts
22) Periksa sambungan Master & worker node.
#cat /etc/hosts
ping -c2 khairi-k8sWorker01
ping -c2 khairi-k8sWorker02
ping -c2 khairi-k8smaster
23) Pasang pakej pada master & worker node
#yum install kubeadm docker -y
atau
#yum install kubeadm docker -y --nogpgcheck (Tidak digalakkan)
24) Restart docker & servis kubelet
#systemctl restart docker;systemctl enable docker
#systemctl restart kubelet;systemctl enable kubelet
25) Pastikan swap telah dimatikan & dikeluarkan dari /etc/fstab
#sed -i '/swap/d' /etc/fstab
#swapoff -a
26) Set IP forwarding/iptables. Kemaskini baris berikut.
#echo net.bridge.bridge-nf-call-ip6tables = 1 >> /etc/sysctl.conf
#echo net.bridge.bridge-nf-call-iptables = 1 >> /etc/sysctl.conf
#echo “br_netfilter” > /etc/modules-load.d/br_netfilter.conf
#grep br_netfilter /etc/modules-load.d/br_netfilter.conf
27) Kemaskini tetapan baru kernel dari paramater yang ditukar:
sysctl -p
28) Sertai kluster kubernetes.
kubeadm join --token irmo0w.q3vzpjv0y859990u 192.168.122.3:6443
29) Periksa Docker yang jalan.
# docker ps
30)Pergi ke Master node untuk tengok status Worker node dengan arahan berikut.
#kubectl cluster-info
#kubectl get events
#kubectl get services
#kubectl get replicaset
#kubectl get all
31) Bina "Deployment" baru.
#kubectl create deployment
atau guna yaml
kubectl apply -f nginx-deployment.yaml
Contoh yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
32) Edit Deployment
#kubectl edit deployment nginx-deployment.yaml
#kubectl apply -f nginx-deployment.yaml
33) Buat Image
#kubectl sample-nginx --image=nginx
34) Periksa log
#kubectl logs sample-nginx-4fmrferin-kdsd
35) Hapus deploymont
#kubectl delete deployment sample-nginx
----- Bersambung -----------------
Rujukan :-
===============================================================
https://www.linuxtechi.com/install-kubernetes-1-7-centos7-rhel7/
https://www.tecmint.com/install-kubernetes-cluster-on-centos-7/
https://github.com/ValaxyTech/DevOpsDemos/blob/master/Kubernetes/k8s-setup.md
Associated article here → https://goo.gl/JRXEzn
Google Kubernetes Engine → https://goo.gl/2V8yah
HTTP Probes → https://goo.gl/9ZVUhi
Command Probes → https://goo.gl/mQpUvM
TCP Probes → https://goo.gl/H4WbpY
Configure Probes → https://goo.gl/LfBB5u
Check out more Kubernetes Best Practices videos here → https://goo.gl/xTzAGd
https://www.youtube.com/watch?v=ohSUtEfDefc
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
Ulasan
Catat Ulasan