2018年7月23日 星期一

在 CentOS 7 佈署 Kubenetes




簡述


Kubenetes 是叢集式的 Docker 管理工具,其主要架構被分為 Master, Node 版的 Kubernetes 伺服器, Master 端基本上會被當成 Load Balance(附載平衡器) 然後把從網路的來源請求分散到各叢集伺服器(Node Server) 上。

佈署分為兩部分,本文佈署皆屬不同機器運作,需要先佈署 Master 主機,然後在佈署 Node 主機,接著讓 Node 節點主機能夠加入 Master 伺服器中。


Master, Node 環境設定


本文已預設機器上已經具備 Docker-CE 版本。

根據官方說明,Master Server 需要用防火牆打開這幾個 TCP Port:

  • 6443 (Kubernetes API server)
  • 2379-2380 (etcd server client API)
  • 10250 (Kubelet API)
  • 10251 (kube-scheduler)
  • 10252(kube-controller-manager)
firewall-cmd --permanent --zone=public --add-port=6443/tcp
firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10251/tcp
firewall-cmd --permanent --zone=public --add-port=10252/tcp
Node Server 需要這幾個 TCP Port:
  • 10250 (Kubelet API)
  • 30000-32767 (NodePort Services)
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp

接著再重新啟動伺服器:

firewall-cmd --reload

Kubernetes 使用時需要關閉 SELinux 和 swap:

setenforce 0 

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

關閉 swap:

swapoff -a

然後修改 ( /etc/fstab ) 這個檔案,把 swap 註解掉:

# /dev/mapper/centos-swap swap swap defaults 0 0
打開 br_netfilter:


modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
設定 ip port forward:

sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
設定 Kubernetes 的 Repo:
(請用 vi 新建檔案:  " vi /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

Master, Node 環境安裝


sudo yum install -y kubelet kubeadm kubectl
安裝完後再重新設定 cgroup:

sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
接著重啟服務:

systemctl daemon-reload
systemctl restart kubelet

Master 初始化


使用指令:
kubeadm init
等待完成,會跳出一個建議的 kubeadm join 指令,請複製,會在 Node 伺服器上使用。

然後,要把 Master 端打開憑證目錄的權限:

sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf

Node 連接上 Master

貼上剛才在 master 主機上已經 init 完所給的 join 指令:

kubeadm join <ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<value>
輸入完畢就可以連接上 Master,請在 Master 端輸入指令:

kubeadm get nodes
就可以列出已經加入的 node 節點伺服器。

*如果持續無法連接上,請嘗試在 Master 上使用 " systemctl stop firewalld && systemctl disable firewalld "  把防火牆關閉。

Reference:
https://askubuntu.com/questions/783017/bash-proc-sys-net-ipv4-ip-forward-permission-denied
https://www.katacoda.com/courses/kubernetes/getting-started-with-kubeadm
https://kairen.github.io/2018/04/05/kubernetes/deploy/manual-v1.10/
https://kubernetes.io/docs/setup/independent/install-kubeadm/
cluster

沒有留言:

張貼留言

© ERIC RILEY , 自由無須告知轉貼
Background Japanese Sayagata by Olga Libby