前置内容
本次部署学习仅供本人学习过程记录使用,非公司生产或商用环境。
使用的教程为一个BILIBILI首页推荐的教程:教程链接
因为教程是基于windows amd64(X86_64)架构,中间遇到了一些arm64的坑,故在此记录一下。
同时也感谢教程老师的教学,学习到了很多。
0.1 MAC电脑配置
型号:
MacBook Pro 14英寸 2021年
芯片:Apple M1 Pro
内存:16 GB
系统版本:macOS Sequoia 15.1
0.2 虚拟机环境
软件:
VMWare Fusion 专业版 13.6.0 (24238079)
0.3 大概步骤
虚拟机安装与基础配置:安装3台CentOS 7.9 aarch64虚拟机、配置固定IP、配置主机名和hosts DNS解析部署基础环境配置:基础配置,同步集群时间,安装基础软件、IPVScontainerd安装与配置:更新libseccomp、配置DNS解析地址、配置安装containerdk8s安装部署:安装kubelet、kubeadm、kubectl,配置并拉起k8s集群flannel安装部署:获取kube-flannel.yml,配置阿里云镜像源,修改部署文件,部署网络插件flannel
0.4 关于arm64以及与源教程有区别的地方
CentOS系统arm64版本VMWare Fusion虚拟机固定IP配置selinux的配置配置DNS解析yum源的arm64版本使用的linux arm64不需要升级内核版本更新libseccomp的方法拉取的镜像为amd64导致flannel部署出错问题
1. 虚拟机安装与基础配置
1.1 安装VMWare Fusion
安装包自行前往官网下载,macOS系统安装软件较为简单
1.2 安装CentOS虚拟机
CentOS镜像包:链接中仅使用了第一步的CentOS镜像,未使用Parallels
因为要建三个虚拟机,新增文件夹k8s2(k8s1是我之前安装好的),点击左上角加号选择新建新增虚拟机-从光盘或映像中安装,选择下载的镜像文件,继续。
选择操作系统,这里我选择的是其他-其他64位ARM
自定设置里设置虚拟机名称、选择虚拟机安装位置,我这里设为master1,放在了硬盘里。
弹出全部设置,这里很重要,需要修改【处理器和内存】和【硬盘(NVMe)】,否则后续init会提示内存不足。教程里使用2G内存,但是后续init时还是出了问题,我后面都统一加了1G,使用
3G内存,就没问题了。硬盘我统一设置的60GB虚拟硬盘,装系统和那些组件、文件肯定是够了。处理器用的2核。
点击中间的开机按钮开始安装
选择Install CentOS 7,最开始用的第二个会报错装不下去。
语言选择:中文、英文都可以,这里我选择的是中文
进入安装配置界面,需要设置四个红色框里面的内容
1 网络和主机名:打开网络开关即可,会显示以太网ens160已连接,这个也是arm64系统网卡的名称,后面配置静态IP会用到。
2 软件选择:因为不需要界面,我选的是虚拟化主机(没有勾选额外软件),如果需要界面可以安装带GUI的服务器或GHOME桌面。
3 时间和日期:可以在地图上点击选择,选择亚洲-上海。
4 根密码:自行设置,好记忆就可以。
开始安装----->重启系统------>等待一会就到了登录界面
登录进去先输入shutdown now关机,在主界面右键master1选择创建完整克隆,造出来和master1配置相同的worker01、worker02,然后把三个虚拟机开机,这样虚拟机就装好了。
1.3 设置固定IP
配置固定IP主要是为了每次重启机器IP不会变化,我们ssh以及k8s集群都需要固定的IP地址。
相对于windows有界面可以操纵,Fusion需要手动修改配置文件,主要有以下几步:
Mac电脑的查看/修改项(使用Mac的终端或iterm2等)
# 第一步
cd /Library/Preferences/VMware\ Fusion
ls
lastLocationUsed networking.backup vmnet1
networking networking.bak.0 vmnet8
cat networking
# 查看VNET_8_HOSTONLY_SUBNET是否为为192.168.XX.0,每个人的XX不一样
# 第二步
cd /Library/Preferences/VMware\ Fusion/vmnet8
cat nat.conf
#NAT gateway address
ip = 192.168.XX.2 #与第一步的SUBNET对应
netmask = 255.255.255.0
# 第三步,查看我们可以配置的IP范围
cat dhcpd.conf
range 192.168.XX.128 192.168.XX.154
#即我们的三个CentOS的IP可以在这个范围配置
CentOS虚拟机的修改项(使用SSH客户端打开,我还是用的iterm2)
cd /etc/sysconfig/network-scripts
# ls 里面有一个文件ifcfg-ens160,amd64架构为ens33
vim ifcfg-ens160
# 修改
# BOOTPROTO=static
# 新增
# IPADDR=192.168.XX.XXX
# NETMASK=255.255.255.0
# GATEWAY=192.168.XX.2
# DNS1=192.168.XX.2
以上配置三台CentOS虚拟机都需要配置,IPADDR需要设置为三个不一样,例如:
master1:192.168.XX.141
worker1:192.168.XX.142
worker2:192.168.XX.143
1.4 设置主机名和hosts
# 三台虚拟机分别配置主机名,这样方便后续配置
hostnamectl set-hostname k8s-master-01
hostnamectl set-hostname k8s-node-01
hostnamectl set-hostname k8s-node-02
# 配置三台机器的hosts文件,方便后续根据主机名可以直接远程操作
cat >> /etc/hosts << "EOF"
192.168.XX.141 k8s-master-01 m1
192.168.XX.142 k8s-node-01 n1
192.168.XX.143 k8s-node-02 n2
EOF
2. 部署基础环境配置
2.1 基础配置
一些禁用配置
# 三台主机都需要配置
# 1、关闭selinux
# 注意:教程使用的disabled,怕出问题,就换成了permissive
sed -i 's#enforcing#permissive#g' /etc/selinux/config
setenforce 0
# 2、禁用防火墙,网络管理,邮箱
systemctl disable --now firewalld NetworkManager postfix
# 3、关闭swap分区
swapoff -a
# 注释swap分区
cp /etc/fstab /etc/fstab_bak
sed -i '/swap/d' /etc/fstab
sshd服务优化
# 1、加速访问
sed -ri 's@^#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config
sed -ri 's#^GSSAPIAuthentication yes#GSSAPIAuthentication no#g' /etc/ssh/sshd_config
grep ^UseDNS /etc/ssh/sshd_config
grep ^GSSAPIAuthentication /etc/ssh/sshd_config
systemctl restart sshd
# 2、密钥登录(只有master节点):为了方便后续的远程拷贝操作
ssh-keygen
ssh-copy-id -i root@k8s-master-01
ssh-copy-id -i root@k8s-node-01
ssh-copy-id -i root@k8s-node-02
增大文件打开数量
# 增大文件打开数量(退出自动生效)
cat > /etc/security/limits.d/k8s.conf <<'EOF'
* soft nofile 65535
* hard nofile 131070
EOF
# 这一步结束以后重启远程登录界面,配置会直接生效,输入以下命令查看
ulimit -Sn
ulimit -Hn
所有节点配置模块自动加载
# 此步骤不做kubeadm init时会直接失败
modprobe br_netfilter
modprobe ip_conntrack
cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules
echo "modprobe ip_conntrack" >/etc/sysconfig/modules/ip_conntrack.modules
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
chmod 755 /etc/sysconfig/modules/ip_conntrack.modules
lsmod | grep br_netfilter
2.2 配置集群时间
master节点
# 1.chrony应该都是装好的,查看chrony版本
# 如果没有,yum -y install chrony
rpm -qa | grep chrony
chrony-3.4-1.el7.aarch64
# 2.修改配置文件
# 备份
mv /etc/chrony.conf /etc/chrony.conf.bak
# 只有master操作
cat > /etc/chrony.conf << EOF
server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10
server ntp7.aliyun.com iburst minpoll 4 maxpoll 10
driftfile /var/lib/chrony/drift
makestep 10 3
rtcsync
allow 0.0.0.0/0
local stratum 10
keyfile /etc/chrony.keys
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
# 3.启动chronyd服务
systemctl restart chronyd.service
systemctl enable chronyd.service
systemctl status chronyd.service
node/worker节点
# 1.可跳过,安装chrony,一般都已经装过
yum -y install chrony
# 2.改客户端配置文件
mv /etc/chrony.conf /etc/chrony.conf.bak
cat > /etc/chrony.conf << EOF
server k8s-master-01 iburst
driftfile /var/lib/chrony/drift
makestep 10 3
rtcsync
local stratum 10
keyfile /etc/chrony.key
logdir /var/log/chrony
stratumweight 0.05
noclientlog
logchange 0.5
EOF
# 3.启动chronyd
systemctl restart chronyd.service
systemctl enable chronyd.service
systemctl status chronyd.service
# 4.验证是否配置成功
chronyc sources -v
2.3 更新yum源(arm64版本)并更新、安装常用软件
# 三台机器都需要操作
# 1.清理原来的repo
rm -rf /etc/yum.repos.d/*
yum remove epel-release -y
# 2.使用arm架构yum源,教程里面的amd64的用不了
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-altarch-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all; yum makecache
# 更新软件(排除内核)
yum update -y --exclud=kernel*
# 安装基础常用软件(与k8s无关)
yum -y install expect wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git ntpdate chrony bind-utils rsync unzip git
# 【跳过】这一块mac的arm64版本不用升级,kernel已经是5.11版本,可以跳过,amd64可以查看原教程
[root@master1 ~]# uname -r
5.11.12-300.el7.aarch64
[root@master1 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (AltArch)
2.4 安装IPVS并修改内核参数
# 三台机器安装IPVS
# 1.安装ipvsadm等相关工具
yum -y install ipvsadm ipset sysstat conntrack libseccomp
# 2.配置加载
cat > /etc/sysconfig/modules/ipvs.modules <<"EOF"
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules};
do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
# 3.三台机器修改内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp.keepaliv.probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp.max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp.max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.top_timestamps = 0
net.core.somaxconn = 16384
EOF
# 4.立即生效
sysctl --system
3. containerd安装与配置
3.1 更新libseccomp版本
# 1.查看libseccomp版本,需要更新到2.4以上,这里下载的是2.5.4,安装2.4.1好像是会出问题
rpm -qa | grep libseccomp
libseccomp-2.3.1-4.el7.aarch64
# 2.因为要从github下载,这里我先配置了一下DNS解析,加了几个DNS服务器
vi /etc/resolv.conf
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 180.76.76.76
nameserver 114.114.114.114
nameserver 114.114.115.115
# 3.注意:与原教程不一致,因为原教程是amd64架构,那个下载地址用不了
# 所以我换了一个地址下载libseccomp,但是不能用rpm安装,按照以下方式安装
# 卸载旧版本
rpm -e `rpm -qa | grep libseccomp` --nodeps
# 安装gperf
yum install gperf -y
# 下载安装包
wget https://github.com/seccomp/libseccomp/releases/download/v2.5.4/libseccomp-2.5.4.tar.gz
tar axf libseccomp-2.5.4.tar.gz && cd libseccomp-2.5.4
# 缺少gcc,不能make,所以要先安装一下gcc
yum -y install gcc
./configure && make && make install
ln -s /usr/local/lib/libseccomp.so.2 /usr/lib64/libseccomp.so.2
3.2 安装containerd
新版本的k8s直接与containerd对接,抛弃了docker繁琐的对接流程,提升了更新效率。
containerd作为容器运行时功能肯定是不如docker,但是docker那些镜像基本的pull、load、save功能都是有的,并有对应自己的语法。
# 卸载旧版本docker
yum remove docker docker-ce containerd docker-common docker-selinux docker-engine -y
# 安装containerd
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install containerd* -y
3.3 配置containerd
# 1.配置containerd
mkdir -pv /etc/containerd
# 2.生成默认配置文件
containerd config default > /etc/containerd/config.toml
# 3.查看
grep sandbox_image /etc/containerd/config.toml
sandbox_image = "registry.k8s.io/pause:3.6"
# 4.替换源
sed -i 's/registry.k8s.io\/pause:3.6/registry.cn-hangzhou.aliyuncs.com\/google_containers\/pause:3.9/' /etc/containerd/config.toml
# 5.配置systemd作为容器的cgroup driver
grep SystemdCgroup /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
grep SystemdCgroup /etc/containerd/config.toml
# 6.配置加速器
sed -i 's/config_path\ =.*/config_path = \"\/etc\/containerd\/certs.d\"/g' /etc/containerd/config.toml
grep config_path /etc/containerd/config.toml
config_path = "/etc/containerd/certs.d"
mkdir -p /etc/containerd/certs.d/docker.io
# 6.1 新增hosts文件
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://dockerproxy.com"]
capabilities = ["pull","resolve"]
[host."https://docker.m.daocloud.io"]
capabilities = ["pull","resolve"]
[host."https://docker.agsv.top"]
capabilities = [pull,"resolve"]
[host."https://registry.docker-cn.com"]
capabilities = ["pull","resolve"]
[host."http://hub-mirror.c.163.com"]
capabilities = ["pull","resolve"]
EOF
# 7.配置containerd开机自启动
# 7.1 启动containerd服务并配置开机自启动
systemctl daemon-reload && systemctl restart containerd
systemctl enable --now containerd
# 7.2 查看containerd状态
systemctl status containerd
# 7.3 查看containerd的版本
ctr version
4. k8s安装部署
4.1 更新k8s源
# 1.三台机器准备k8s源
# 注意这里的版本需要根据自己的需要配置,这里我写的是v1.30
# 在2024.11.29的时候安装的是1.30.7,随着时间的推移最后的小版本可能不同
# 一般k8s版本就支持一年,不会长期稳定
cat > /etc/yum.repos.d/kubernetes.repo << "EOF"
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF
4.2 安装kubelet kubeadm kubectl
# 1.安装
yum install -y kubelet-1.30* kubeadm-1.30* kubectl-1.30*
---------------
已安装:
kubeadm.aarch64 0:1.30.7-150500.1.1
kubectl.aarch64 0:1.30.7-150500.1.1
kubelet.aarch64 0:1.30.7-150500.1.1
作为依赖被安装:
cri-tools.aarch64 0:1.30.1-150500.1.1
kubernetes-cni.aarch64 0:1.4.0-150500.1.1
---------------
# 2.配置kubelet开机自启
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
4.3 初始化master节点
# 仅在master节点上执行
# 1.查看版本,显示v1.30.7,后续有用
kubeadm config images list
I1129 20:20:34.152482 17207 version.go:256] remote version is much newer: v1.31.3; falling back to: stable-1.30
registry.k8s.io/kube-apiserver:v1.30.7
registry.k8s.io/kube-controller-manager:v1.30.7
registry.k8s.io/kube-scheduler:v1.30.7
registry.k8s.io/kube-proxy:v1.30.7
registry.k8s.io/coredns/coredns:v1.11.3
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.15-0
# 2.写入默认配置文件
kubeadm config print init-defaults > kubeadm.yaml
# 3.修改配置文件
# 3.1 修改advertiseAddress为master节点IP
localAPIEndpoint:
advertiseAddress: 192.168.XX.141
# 3.2 修改nodeRegistration:name为master节点的主机名
nodeRegistration:
name: k8s-matser-01
# 3.3 修改imageRepository
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# 3.4 新增podSubnet,在networking下加一行
networking:
podSubnet: 10.244.0.0/16
# 3.5 在清单文件最后加,下面内容都要加进去
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
4.4 拉起k8s节点
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification --ignore-preflight-errors=Swap
4.5 按照提示操作、拷贝auth文件
# 注意:init完成以后会输出提示操作信息,按照自己的输出操作,不复制我的内容
Your Kubernetes control-plane has initialized successfully!
# 1.生成auth文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 注意:在上一步后要执行以下命令,把auth文件赋值给两个worker节点
scp -r /root/.kube root@k8s-node-01:/root/
scp -r /root/.kube root@k8s-node-02:/root/
# 2.配置环境变量
vi /etc/profile
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile
# 3.在两个worker节点操作,把两个worker节点加入到k8s集群,每次部署的token都不一样的,不能复制,要根据输出执行
kubeadm join 192.168.XX.141:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:........
# 同时,还要把master节点上的admin.conf文件复制到两个node节点上,否则在node节点上运行kubectl会报错。
scp -r /etc/kubernetes/admin.conf root@k8s-node-01:/etc/kubernetes/admin.conf
scp -r /etc/kubernetes/admin.conf root@k8s-node-02:/etc/kubernetes/admin.conf
4.6 查看node、pod状态
还没有安装flannel网络插件,所以节点还没准备好,是NotReady状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-01 NotReady control-plane 30m v1.30.7
k8s-node-01 NotReady <none> 14s v1.30.7
k8s-node-02 NotReady <none> 7s v1.30.7
# 两个DNS POD也是pending状态
kubectl get pods --all-namespaces
5. flannel安装部署
5.1 获取kube-flannel.yml部署清单文件
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 查看我们需要修改的项,要把这些docker.io地址替换为阿里云私有地址
grep -i image kube-flannel.yml
image: docker.io/flannel/flannel:v0.26.1
image: docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2
image: docker.io/flannel/flannel:v0.26.1
5.2 配置阿里云私有镜像库以及报错处理
原教程直接用这三个地址作为基础镜像来在阿里云配置镜像源,但是我这样做了以后部署flannel时会卡在install-cni-plugin,使用kubectl logs -n kube-flannel -l app=flannel -c install-cni-plugin查看,报错exec /bin/cp: exec format error,也就是cp的exec程序架构与当前机器架构不同;尝试用ctr image pull拉取镜像,发现拉下来的是amd64架构的镜像,使用platform参数、使用@sha256、调试地址、配置本地镜像无果后,我使用了以下方法。
- 1.在MacBook上安装docker,安装桌面软件就可以下载地址
- 2.在MacBook上用docker桌面软件或docker pull把flannel、flannel-cni-plugin对应版本的镜像拉取下来
- 3.发现这次拉取的是arm64架构的
- 这样我们就有镜像了
进入阿里云镜像服务地址
- 登录账号并进入容器镜像服务-实例列表,开通个人实例
- 进入个人实例选择仓库管理-命名空间-创建命名空间
- 选择镜像仓库-创建镜像仓库,需要创建两个镜像仓库,一个是flannel,一个是flannel-cni-plugin,对应我们两个需要拉取的镜像,仓库类型需要设置为公开,否则待会拉取要输入密码。代码源选择本地仓库。
- 创建好以后界面会跳转到操作指南,会显示有如下命令,每个人不一样
# 3.将镜像推送到Registry
docker login --username=xxx xxx
docker tag [ImageId] xxx/flannel-local:[镜像版本号]
docker push xxx/flannel-local:[镜像版本号]
我们需要先登录,然后把我们两个本地镜像tag为你的阿里云私有镜像源地址,然后推送上去,这样就可以了。
5.3 修改配置文件并部署flannel
修改配置文件
# 1.修改kube-flannel.yml文件
# 搜索image
# 替换两处docker.io/flannel/flannel:v0.26.1为你的阿里云镜像源
# 替换docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2为你的阿里云镜像源
# 2.我还新增了两处
containers:
- args:
- --ip-masq
- --kube-subnet-mgr
下面加了一行 - --iface=ens160
每个image下面加了一行
imagePullPolicy: IfNotPresent
部署flannel
kubectl apply -f kube-flannel.yml
5.4 查看node、pod状态
kubectl get node
kubectl get pods --all-namespaces
Node均变成Ready、Pod均变为Running即为成功
6. 出现kubeadm init失败或出现问题需要重新开始时
6.1 reset
# 在master节点上
kubeadm reset -f
6.2 删除所有安装程序、文件并重启
# 在所有节点包括master节点在内上执行如下命令
cd /tmp # 有时候在当前目录下可能与要卸载的包重名的而导致卸载报错,可以切个目录
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
rm -rf /run/flannel
rm -rf /opt/cni
rm -rf /etc/cni/net.d
rm -rf /run/xtables.lock
systemctl stop kubelet
yum remove kube* -y
for i in `df |grep kubelet |awk '{print $NF}'`;do umount -l $i ;done # 先卸载所有kubelet挂载否则下条命令无法删除
rm -rf /var/lib/kubelet
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
iptables -F
reboot # 重新启动,从头再来
6.3 重新部署k8s
# 重新部署
# 1. 在所有节点执行
yum install -y kubelet-1.30* kubeadm-1.30* kubectl-1.30*
systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
# 2. 只在master节点上执行
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification --ignore-preflight-errors=Swap
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
scp -r /root/.kube root@k8s-node-01:/root/
scp -r /root/.kube root@k8s-node-02:/root/
# 3. 两个node节点
# 注意:不能复制,要使用自己init完打印出来的内容
kubeadm join 192.168.XX.XXX:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:XXX
6.4 重新部署flannel
kubectl apply -f kube-flannel.yml
稍作等待,如果没有实现Node均变成Ready、Pod均变为Running,
变为INIT:CrashLoopBackOff等状态,
又可以确定之前的步骤没出错,
可以执行kubectl delete -f kube-flannel.yml
取消flannel安装
然后配置合适的镜像源
PS:查看报错命令
kubectl logs -n kube-flannel -l app=flannel -c install-cni-plugin
kubectl logs -n kube-flannel -l app=flannel -c install-cni
kubectl describe pod [PODNAME] -n [NAMESPACE]