B i M A P

Kubernetes|How to setup K8S Cluster

kubernetes cluster

Install Docker

sudo yum install -y yum-utils

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docke


Container Runtimes Setup

我們需要先幫 K8S 建立與 Docker 的中介層,官方目前提供三種做法,我們採用 CRI-O:

  1. Containerd
  2. CRI-O
  3. docker
# Create the .conf file to load the modules at bootup
cat <<EOF | sudo tee /etc/modules-load.d/crio.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# Set up required sysctl params, these persist across reboots.
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sudo sysctl --system


完成上面的設定後,開始安裝 CRI-O

# your centos version
export OS=CentOS_8

# CRI-O version
export VERSION=1.20:1.20.0

sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
sudo yum install cri-o

sudo systemctl daemon-reload
sudo systemctl enable crio --now



Installing kubeadm

透過 kubeadm 可以快速建立 cluster 主節點,後續即可透過 join cluster 的方式將 worker node 加入集群


Disable SWAP

swapoff -a

# 將 swap 那一行注解
vim /etc/fstab
#/dev/mapper/cl-swap  none swap  defaults   0 0


Letting iptables see bridged traffic

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system


Installing kubeadm, kubelet and kubectl

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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=kubelet kubeadm kubectl
EOF

# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

sudo systemctl enable --now kubelet



以下為 Master Node 執行即可--

Initializing your control-plane node

kubeadm init


如果看到以下的成功訊息,代表建置成功。

將 kubeadm join 的指令保存,之後可在其他 worker node 上執行加入 cluster。

Your Kubernetes control-plane 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:
  /docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>


如果是 root 用戶,可以用以下指令設定 kubeconfig 的路徑。

否則就按照上述的 regular user 的三行指令操作。

export KUBECONFIG=/etc/kubernetes/admin.conf



Install CNI (Network Plugin)

k8s cluster container 所需要的溝通媒介。

可以從 https://kubernetes.io/docs/concepts/cluster-administration/addons/ 找需要 Plugin,這邊以 weave net 為例:

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


Worker Node 安裝 K8S 完成後,執行 kubeadm join 指令,並於 master node 查看 cluster node 狀態:

kubectl get nodes

NAME         STATUS   ROLES                  AGE     VERSION
crt-centos   Ready    control-plane,master   2d21h   v1.22.2
ubuntu       Ready    <none>                2d6h    v1.22.2



想看更多主題嗎? 聯絡我們
延伸閱讀
winstonlu的大頭照
ELK 達人

我們致力於 ELK 的各種應用,協助企業建置相關服務。我們也提供基於 ELK 的各種解決方案,有任何問題,歡迎加入我們的官方 Line,或來信詢問,期待與您面對面的機會。