MENU

Debian下搭建K8S集群手记

May 11, 2023 • linux阅读设置

一直久闻k8s大名,甚至在工作中也曾使用过k8s。

但是一直没有自己手动实践搭建一套完整的k8s集群,

逐近期工作有使用微服务架构,所以打算看看能不能一次性把k8s也接进去,自己先来练手和熟悉环境。

话不多说,不了解k8s可以不用看了,本文只涉及一个基础的k8s测试集群搭建,不会讲很多深奥的知识,

如果需要了解k8s的可以自己看官方文档:https://kubernetes.io/

一.先决条件

我这里使用了3台腾讯云轻量服务器做测试,配置为2核4g
建议有条件可以配置给高一点,体验的感觉也会好一点,当然你也可以使用电脑虚拟机虚拟化3台机器出来。

机器架构:

nameip防火墙开放端口
master10.0.0.1610250,10251,10252,10255,2379,2380,6443
node110.0.0.610250,30000-32767
node210.0.0.1210250,30000-32767

请确保机器同时处于同一内网环境下,我这里都是使用的内网ip。
如果你使用的云服务器,一定要记得开放防火墙端口!!!如果不是则确认你linux当前有无防火墙,开放指定端口即可!!!

二.准备工作

注意下面的每一步操作都需要在3台服务器上都执行,部分操作根据当前服务器不同类型稍作修改!!!

1.设置hostname

在每台机器上设置对应的hostname,例如master我这里就设置的k8s-master,其他两台机器分别是:k8s-node1,k8s-node2

sudo vi /etc/hostname

2.修改机器hosts

每台机器的hosts都设置成对应的hostname

sudo vi /etc/hosts
10.0.0.16 k8s-master
10.0.0.6 k8s-node1
10.0.0.12 k8s-node2

3.安装docker

我这里使用docker作为容器化,所以每台机器都需要安装docker

sudo apt update -y && apt install -y docker.io

4.修改docker配置,在“/etc/docker/daemon.json”里把 cgroup 的驱动程序改成 systemd ,然后重启 Docker 的守护进程

cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
      "max-size": "100m"
   },
  "storage-driver": "overlay2"
}
EOF

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

5.为了让 Kubernetes 能够检查、转发网络流量,你需要修改 iptables 的配置,启用 “br_netfilter”模块:

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
net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf
EOF

sudo sysctl --system

6.关闭swap,提高linux性能,我的建议是最好都关闭,以免出现不可预知的错误

sudo swapoff -a
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab

6.安装 kubeadm

如果你是国内的服务器或虚拟机,你可以跟我一样使用阿里云的源,不然的话默认走的是谷歌的源。
总所周知的原因谷歌服务是没法在国内访问的,如果你是境外的服务器就不用这么麻烦了,Fuck GFW~


sudo apt install -y apt-transport-https ca-certificates curl

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

安装kubeadm,我这里固定版本为:1.23.3,请注意!最新版本已经不支持docker的CRI了,我已经帮你踩过坑了。
除非你不使用docker作为容器化,否则听我的劝!


sudo apt update

sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00

# 下面这条命令是锁住当前版本,建议执行
sudo apt-mark hold kubeadm kubelet kubectl
# 测试是否安装成功
kubeadm version

下载组建所需镜像,这里我们依然使用阿里云加速

repo=registry.aliyuncs.com/google_containers
for name in `kubeadm config images list`; do
  src_name=${name#k8s.gcr.io/}
  src_name=${src_name#coredns/}
  docker pull $repo/$src_name
  docker tag $repo/$src_name $name
  docker rmi $repo/$src_name
done

完成准备工作后重启所有机器reboot

三.初始化Master

初始化master

kubeadm init --pod-network-cidr=10.244.0.0/16

初始化成功后会提示让你配置kube,按照提示走命令就行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

!!!还会给你返回以下类似的一条命令,请注意保存,用于node节点的加入

kubeadm join 10.0.0.16:6443 --token g4qijw.m6hsm3r1yv46x08p \
        --discovery-token-ca-cert-hash sha256:9641c0b5d5858e3ebda3c25b40fc444513d5f9ab8582eb9b41add153bfb0880e9 

测试是否安装成功

kubectl version 
kubectl get node

设置网络插件flannel

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

四.初始化worker节点

执行刚刚master初始化成功后的join命令(记得先决条件里面说的防火墙开放!!)

kubeadm join 10.0.0.16:6443 --token g4qijw.m6hsm3r1yv46x08p \
        --discovery-token-ca-cert-hash sha256:9641c0b5d5858e3ebda3c25b40fc444513d5f9ab8582eb9b41add153bfb0880e9 

回到master服务器控制台执行命令

kubectl get node

验证node是否加入成功,如下就是成功:

root@k8s-master:~# kubectl get node
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   12m   v1.23.3
k8s-node1    Ready    <none>                 59s   v1.23.3
Archives QR Code
QR Code for this page
Tipping QR Code