前言
没有公司环境,发现没有K8S 运行环境,觉得自己动手搭一个。先搭个简单版的,一个master, 一个node. 后面找个时间在云上在搭建一套。
前期准备 >>>>>>>>> 下面操作,Master+Node 操作:
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld关闭安全机制, 关闭SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config ----永久生效,需重启
setenforce 0 -------------临时生效关闭交换分区swap(K8S 禁止虚拟内存以提高性能)
sed -ri 's/.swap./#&/' /etc/fstab -----------永久生效,需重启
Swapoff -a ----临时永久关闭交换分区方法二:
sudo vi /etc/fstab
-- 在该行前添加 # 注释掉,或直接删除:
-- /dev/mapper/centos-swap swap swap defaults 0 0
######## 禁用 systemd 管理的交换分区服务:
sudo systemctl disable --now swap.target
验证
sudo swapon --show设置主机名
hostnamectl set-hostname k8s-master
从节点执行:
hostnamectl set-hostname k8s-node1
配置hosts解析
cat >> /etc/hosts <<EOF
192.168.183.135 k8s-master01
192.168.183.136 k8s-node01
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
vm.swappiness = 0
EOF加载br_netfilter模块
modprobe br_netfilter-
查看是否加载
lsmod | grep br_netfilter
image.png 应用 sysctl 参数而不重新启动
sysctl --system
使用以下命令验证 net.ipv4.ip_forward 是否设置为 1:
sysctl net.ipv4.ip_forward
安装containerd >>>>>>>>> 下面操作,Master+Node 操作:
获取阿里云YUM源:
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo检查是否添加了docker-ce仓库:
ls /etc/yum.repos.d/
centos-addons.repo centos.repo docker-ce.rep查看YUM源中Containerd软件:
yum list | grep containerd
containerd.io.x86_64 1.7.24-3.1.el9 docker-ce-stable使用yum命令安装Containerd.io软件,即可安装Containerd
yum -y install containerd.io-
验证是否安装成功
rpm -qa | grep containerd
image.png -
生成默认配置并覆盖当前文件(备份原有配置)
containerd config default | tee /etc/containerd/config.toml.template
cp /etc/containerd/config.toml /etc/containerd/config.toml.bak # 备份原文件
mv /etc/containerd/config.toml.template /etc/containerd/config.toml
image.png 修改配置文件 vim /etc/containerd/config.toml
[plugins]
指定旧版接口,并且设置驱动
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "runc"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
这里提前指定pause沙盒镜像的国内镜像源,后续使用kubeadm初始化集群的时候要用,防止出现网络问题
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
这里同样是指定镜像源,增加使用国内镜像
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://docker.1ms.run"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://registry.aliyuncs.com/k8sxio"] # 阿里云镜像如果应用此更改,请确保重新启动 containerd
systemctl restart containerd设置服务随系统启动自动运行
systemctl enable containerd-
查看containerd服务启动状态:
systemctl status containerd
image.png
安装K8S Kubeadm >>>>>>>>> 下面操作,Master + Node 上操作
前期准备
将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config添加kubernets仓库,此操作会覆盖原有的 /etc/yum.repos.d/kubernetes.repo
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF-
安装 kubelet、kubeadm 和 kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
image.png 启用 kubelet 以确保它在启动时自动启动
systemctl enable --now kubelet生成kubeadm 配置文件 >>>>>>>>> 下面操作,只在Master上操作
-
前期准备, 查看主机所在网段, 如下图,所以该主机所在网段为192.168.0.0/24,calico的默认网段为192.168.0.0/16,包含了192.168.0.0/19
ifconfig | grep "inet "
image.png
image.png 在 /etc下建立k8s目录
mkdir /etc/k8s进入该目录
cd /etc/k8s使用kubeadm创建默认配置文件
kubeadm config print init-defaults > kubeadm-config.yaml-
修改该文件
vim kubeadm-config.yaml
image.png 下载镜像,输入如下命令
kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml初始化集群,输入如下命令
kubeadm init --config /etc/k8s/kubeadm-config.yaml --upload-certs-
如果下载不下来,报下图错误:
image.png
可以更新下源,在/etc/k8s/kubeadm-config.yaml 修改如下:
imageRepository: registry.k8s.io
imageRepository: registry.aliyuncs.com/google_containers
再次执行命令,下载成功 kubeadm config images pull --config /etc/k8s/kubeadm-config.yaml
image.png 再次初始化集群:
kubeadm init --config /etc/k8s/kubeadm-config.yaml --upload-certs也可分两步操作,提前拉取所需的镜像再初始化
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
kubeadm init --config=/etc/k8s/kubeadm-config.yaml
初始化失败,问题及解决方法

- 问题 1. Error" err="couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
image.png
解决办法:
[root@k8s-master01 ~]# mkdir -pHOME/.kube/config
[root@k8s-master01 ~]# chown(id -g) $HOME/.kube/config
- 问题 2. err="couldn't get current server API group list: Get "https://192.168.183.135:6443/api?timeout=32s": dial tcp 192.168.183.135:6443: connect: connection refused"
解决办法:或许问题1解决后试试kubeadm reset, 然后重新init , 或许也可以解决。
我是重新修改了containerd 配置文件,按上面列的都修改了,然后提前拉取镜像再初始化,进而解决了这个问题。
最终初始化成功

安装网络插件(Master)
-
配置进行加速 (可忽略)
vim config.toml
image.png -
安装网络插件calico
先下载calico配置文件 curl https://docs.tigera.io/calico/latest/manifests/calico.yaml -O
kubectl apply -f calico.yaml
image.png -
在验证mast节点
image.png
加Node到集群
如果token 过期,在mast上执行,从新拿到token
kubeadm token create --print-join-command
执行join

在master上检查node是否成功加入
kubectl get nodes














