超详细的搭建Kubernetes集群教程
2023/02/04 10:39 投稿

转载文章请注明源地址:https://www.latiao.org/707.html

按照本文一步一步来,有Linux基础就可以成功!

本文实验基于Centos7.9 机器均为4C 4GB;

Master centos7 10.12.0.100
Worker1 centos7  10.12.0.101
Worker2 centos7 10.12.0.102

所有节点操作:

1.修改 /etc/hosts做如下增加:

10.12.0.100 master master.latiao.org
10.12.0.101 worker1 worker1.latiao.org
10.12.0.102 worker2 worker2.latiao.org

效果如下:

2.关闭防火墙

systemctl disable firewalld --now

效果如下:

3.关闭 swap

swapoff -a ; sed -i '/swap/d' /etc/fstab

效果如下:

4.修改内核参数

cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
cat > /etc/sysctl.d/k8s.conf  <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe overlay
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

效果如下:

5.新加yum源:

cat > /etc/yum.repos.d/k8s.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
cat > /etc/yum.repos.d/containerd.repo <<EOF
[containerd]
name=containerd
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/
enabled=1
gpgcheck=0
EOF

6.安装containerd

containerd作为runtime是一个引擎

yum install containerd.io cri-tools -y

7.配置 containerd

让crictl知道到哪里找containerd

crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

效果如下:

8.修改containerd配置文件

containerd config default > /etc/containerd/config.toml
第一步:将
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
改为
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
   [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
       endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
第二步:将
sandbox_image = "k8s.gcr.io/pause:3.6"
改为
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
第三步:将
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = ""
CriuImagePath = ""
CriuPath = ""
CriuWorkPath = ""
IoGid = 0
IoUid = 0
NoNewKeyring = false
NoPivotRoot = false
Root = ""
ShimCgroup = ""
SystemdCgroup = false
改成
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
 SystemdCgroup = true
systemctl enable containerd --now 开机自启并立即启动。

9.安装nerdctl

nerdctl是一个较新的containerd工具,兼容Docker命令行工具,比ctr覆盖更全面,另外还支持docker-compose(不包括swarm)以及一些可选的高级特性

官网下载:

https://github.com/containerd/nerdctl/releases https://github.com/containernetworking/plugins/releases/

将离线包上传至服务器;

并nerdctl-1.2.0-linux-amd64.tar.gz存档提取到/usr/local/bin

tar Cxzvvf /usr/local/bin/ nerdctl-1.2.0-linux-amd64.tar.gz

将cni-plugins-linux-amd64-v1.2.0.tgz存档提取到/opt/cni/bin/

mkdir -p /opt/cni/bin/
tar Cxzvvf /opt/cni/bin/ cni-plugins-linux-amd64-v1.2.0.tgz

生成nerdctl配置文件

[root@master ~]# mkdir /etc/nerdctl/
[root@master ~]# cat > /etc/nerdctl/nerdctl.toml <<EOF
debug = false
debug_full = false
address = "unix:///var/run/containerd/containerd.sock"
namespace = "k8s.io"
#snapshotter = "stargz"
cgroup_manager = "systemd"
#hosts_dir = ["/etc/containerd/certs.d","/etc/nerdctl/certs.d"]
insecure_registry = false
EOF

配置nerdctl加速

[root@master ~]# mkdir -p /etc/containerd/certs.d/docker.io
[root@master ~]# cat > /etc/containerd/certs.d/docker.io/hosts.toml <<EOF
server = "https://docker.io"
[host."https://g0v522ip.mirror.aliyuncs.com"]
  capabilities = ["pull","resolve"]
[host."https://docker.mirrors.ustc.edu.cn"]
  capabilities = ["pull","resolve"]
[host."https://registry-1.docker.io"]
  capabilities = ["pull","resolve","push"]
EOF

重启containerd

systemctl restart containerd

10.安装kubernetes

yum install -y kubelet-1.26.0-0 kubeadm-1.26.0-0 kubectl-1.26.0-0 --disableexcludes=kubernetes
systemctl enable kubelet --now #开机自启并立即启动,可以注意到现在的状态时 activating 不是active

Master 操作: 初始化集群

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.26.0 --pod-network-cidr=10.24.0.0/16

#–image-repository 直接用阿里云的地址;初始化的过程会拉取镜像。

安装完毕后会提示执行命令,按要求执行即可;创建认证文件。

Worker(1和2都执行)加入集群 执行后面的:

kubeadm join 10.12.0.100:6443 --token ilmzoi.8pqfax9yg4u34l32 \
--discovery-token-ca-cert-hash sha256:c5fa6310eb2b265a33796f251dc92424a8cc14efedf9afa730c2b0897598b96b

效果如下:

(如果碰到添加失败,重新添加记得执行一次 kubeadm reset 清除重置再行加入)

Master 执行 kubectl get nodes;已经可以看到节点了。

之所以是NotReady 是因为快速通道还没建立。 需要部署CNI 容器接口网络插件;我们选择 calico;

11.部署calico

Calico 是一种容器之间互通的网络方案

下载最新版calico文件:wget https://docs.projectcalico.org/manifests/calico.yaml

编辑配置文件:
修改calico里pod所在网段

编辑配置文件:
修改calico里pod所在网段;需要与之前的--pod-network-cidr对应
- name: CALICO_IPV4POOL_CIDR
value: "10.24.0.0/16"
为了防止多张网卡带来的问题,修改calico.yaml
- name: IP_AUTODETECTION_METHOD
 value: "interface=ens32"

修改完毕后 grep image calico.yaml 查看一下缺少那些组件直接安装:

效果如图:

master,worker都需要安装

nerdctl pull docker.io/calico/cni:v3.25.0
nerdctl pull docker.io/calico/node:v3.25.0
nerdctl pull docker.io/calico/kube-controllers:v3.25.0

效果如下:

master上执行kubectl apply -f calico.yaml 即可

节点上线成功

12.部署metric

想查看另外两个节点资源情况;可以部署 metric。

所有节点导入: nerdctl load -i metric-img-v0.6.1.tar 

在master上执行安装metric-server的操作

Yaml:https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml

kubectl apply -f components.yaml

稍等大概1分钟

kubectl top nodes