Langkau ke kandungan utama

Cara memasang Kubernetes Kluster pada Centos 7 / RHEL 7

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.

Contoh 3 Kluster node:
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.

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

Catatan popular daripada blog ini

Setting APACHE Tomcat Dengan Configure mod_jk Connector pada RHEL6.4 cara ringkas.

 Asas - Apakah mod_jk?   Penyambung mod_jk ialah modul Apache httpd yang membolehkan httpd untuk berkomunikasi dengan Apache Tomcat  bagi  seluruh  keadaan  protokol AJP. Modul ini digunakan bersama- s ama dengan komponen Penyambung AJP Tomcat ini.  Mengenai Penyambung   Apache Tomcat menggunakan komponen Penyambung untuk membolehkan komunikasi antara contoh nya  Tomcat dan pihak lain, seperti pelayar, pelayan atau contoh lain Tomcat yang merupakan sebahagian daripada rangkaian yang sama. Sebagai contoh, penyambung HTTP mendengar untuk permintaan lebih protokol HTTP/1.1 pada pelbagai port TCP...

Cara setting router Cisco 2600 & MRTG

Manual setting router Cisco 2600 Masuk ke dalam router menggunakan konsol atau telnet. Masukkan password dan taip enable. Router> enable Tekan enter taip enable. 2600# config Configuring from terminal, memory, or network [terminal]? t Enter configuration commands, one per line.  End with CNTL/Z. Taip t dan taip hostname yang baru. Router(config)# hostname JL Tekan enter dan taip interface serial 0/0. JL(config)# interface serial 0/0 Tekan enter dan taip ip address serial 0/0. JL (config-if) ip address 58.26.##.### 255.255.255.252 Tekan enter dan taip setting untuk encapsulation. JL (config-if) encapsulation ppp Tekan enter dan taip no shutdown. JL (config-if) no shutdown Tekan enter dan tekan ctrl + z. Kemudian taip  show interface serial 0/0 untuk melihat maklumat interface serial 0/0  . JL # show interface serial 0/0 Tekan enter dan taip config semula. JL # config    ...

GlusterFS & cara penggunaan

Apa itu GlusterFS? GlusterFS ialah sistem fail storan yang dilampirkan berskala. Ia aplikasi yang dijumpai di pengkomputeran awan, perkhidmatan media streaming dan penghantaran kandungan rangkaian . GlusterFS telah dibangunkan semula oleh Gluster, Inc. dan kemudian oleh Red Hat, Inc. Hasilnya Red Hat memperoleh Gluster pada tahun 2011. Pada Jun 2012, Red Hat Storage Server diumumkan sebagai penyepaduan komersil antara GlusterFS dengan Red Hat Enterprise Linux. Red Hat membeli  Inktank Storage  pada bulan April 2014, yang merupakan syarikat di sebalik sistem teragih (Ceph), dan menjenamakan semula Red Hat Storage Server berasaskan GlusterFS kepada "Red Hat Gluster Storage". GlusterFS mengagregat pengiraan, penyimpanan, dan sumber I/O ke dalam ruang nama global.Setiap pelayan ditambah storan komoditi sama ada (storan berhubung langsung, JBOD atau menggunakan storan SAN) dianggap sebagai nod. Kapasiti diperkecil dengan menambahkan nod tambahan atau menambahkan storan ...