k8s测试集群扩容
【摘要】 给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 地址。这通常是由于网络配置问题或之前的网络状态导致的。
解决方法:
-
清理旧的网络配置:如果你之前曾经运行过该 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)