k8s测试集群扩容

举报
fsifdds 发表于 2023/08/17 15:01:14 2023/08/17
【摘要】 给k8s集群添加worker

kubelet版本:Kubernetes v1.23.1

docker版本:Docker version 20.10.11

给k8s集群添加worker
以worker10.1.130.113和master10.1.130.101为例子

一、初始化新的服务器

# 关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld
 
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时
 
# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
 
# 根据规划设置主机名 node1
# hostnamectl set-hostname <hostname>
hostnamectl set-hostname node-113

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

#设置网桥
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

#看看和master节点时间同步与否,不同步就让它们同步

二、安装docker 20.10.11 (参考连接https://zhuanlan.zhihu.com/p/348788184)


sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
#找20.10.11版本的docker
yum list docker-ce --showduplicates | sort -r 
#安装20.10.11版本的docker
 yum install docker-ce-20.10.11 docker-ce-cli-20.10.11 containerd.io  docker-ce-rootless-extras-20.10.11

#开启和设置开机自启
systemctl start docker
systemctl enable docker

#查看docker安装是否成功 
docker version 

#改docker的cgroup为systemd
vim /etc/docker/daemon.json
{
   "log-driver": "json-file",
   "log-opts": {
     "max-size": "100m"
   },
   "exec-opts": ["native.cgroupdriver=systemd"],
   "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
 }

#重载配置然后重启
systemctl  daemon-reload 
systemctl  restart docker

三、安装kubelet

3.1 配置镜像源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3.2 安装kubeadm、kubectl、kubelet-v1.23.1

yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0
kubectl version
#开机启动kubelet。
systemctl enable kubelet

3.3 拉取k8s在worknode节点所需要的镜像。

#查看k8s需要的插件信息
[root@node-113 ~]# kubeadm config images list
I0731 11:22:14.904000   11920 version.go:255] remote version is much newer: v1.27.4; falling back to: stable-1.23
k8s.gcr.io/kube-apiserver:v1.23.17
k8s.gcr.io/kube-controller-manager:v1.23.17
k8s.gcr.io/kube-scheduler:v1.23.17
k8s.gcr.io/kube-proxy:v1.23.17
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

#国内拉不了,只能下别的仓库的然后改镜像
#worknode节点只拉取kube-proxy、coredns、pause,少于master
k8sversion=v1.23.17
dnsversion=v1.8.6
# k8s
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion k8s.gcr.io/kube-proxy:$k8sversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:$k8sversion
 
# coredns
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion k8s.gcr.io/coredns:$dnsversion
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$dnsversion
 
# pause
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6

3.4 将节点加入集群

获取加入集群的命令,以下 指令在master节点执行
#token会过期,有效期为5分钟,以下指令在master节点执行
[root@master-101 ~]# kubeadm token create --print-join-command
kubeadm join 10.1.130.101:6443 --token vw40vv.xez17z03n73cd4x --discovery-token-ca-cert-hash sha256:771b9b4568dd9b7e3436b73aabee7bab24fe43c53973330a8693183e989553de 

#把上面的获得的指令在113机子执行,此节点加入集群。
kubeadm join 10.1.130.101:6443 --token vw40vv.xez17z03n73cd4x --discovery-token-ca-cert-hash sha256:771b9b4568dd9b7e3436b73aabee7bab24fe43c53973330a8693183e989553de

#查看节点是否加入成功(master节点执行)。 
kubectl get pod -nsit -owide

四、报错和解决

4.1  新节点pod报错:networkPlugin cni failed to set up pod

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "91a283b21e5a88c7ef2824abe2610bd324923bc47249126613ca707e87278bfe" network for pod "backend-ads-server-599db46c6c-qv766": networkPlugin cni failed to set up pod "backend-ads-server-599db46c6c-qv766_ads" network: failed to delegate add: failed to set bridge addr: "cni0" already has an IP address different from 10.234.16.1/22

发现有一个问题是 "cni0" 接口已经有了一个不同于 "10.234.16.1/22" 的 IP 地址。这通常是由于网络配置问题或之前的网络状态导致的。

解决方法:
  1. 清理旧的网络配置:如果你之前曾经运行过该 Pod,可能留下了一些旧的网络配置。你可以尝试清理这些配置,然后重新创建 Pod。可以通过命令 sudo ip link delete cni0 来删除名为 "cni0" 的接口,然后再次尝试创建 Pod。

4.2 pod报错:NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.

服务调度到新增的node节点后,报了这个错误,是因为新增节点没有装nfs。
yum install -y nfs-utils

4.3 新节点kube-flannel启动失败,所以节点上的pod之间的网络通信也有问题。

报错Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-l88rr': Get "https://10.233.0.1:443/api/v1/namespaces/kube-system/pods/kube-flannel-l88rr": dial tcp 10.233.0.1:443: i/o timeout

这个错误通常表示 Flannel 网络插件无法连接到 Kubernetes API Server。这可能是由于网络问题、防火墙、Kubelet 配置或kube-proxy因素导致的
于是查看kube-proxy的日志,发现新节点报错。
failed to list *v1.EndpointSlice: Get "https://127.0.0.1:6443/apis/discovery.k8s.io/v1/endpointslices?labelSelector=%21service.kubernetes.io%2Fheadless%2C%21service.kubernetes.io%2Fservice-proxy-name&limit=500&resourceVersion=0": dial tcp 127.0.0.1:6443: connect: connection refused
因为新节点是worker,所以connect的应该是主节点,这里连错了。去查看kube-proxy的配置连的也是主节点的apiserver,因此新节点的kube-proxy怀疑没加载好配置。

删除新节点的kube-proxy让它重启 。问题解决!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。