精品Ubuntu轻松搭建k8s集群报错解决

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精品Ubuntu轻松搭建k8s集群报错解决相关的知识,希望对你有一定的参考价值。

文章目录


环境

系统与服务版本必须保持一致,否则,需要改动其他,本案例多次验证有效!!!

主机角色IP版本号
master-1192.168.171.100kubelet1.14.6-00 kubeadm1.14.6-00 kubectl1.14.6-00
node-1192.168.171.200
node-2192.168.171.201

1、关闭系统swap ;
sudo swapoff -a
sudo sed -i ‘/swap/ s/^/#/’ /etc/fstab

验证:

2、开启内核ipv4转发开启

sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启ipv4转发,允许内置路由
sudo sysctl -p # 立即生效

3、配置集群无密登录 master到node-1,node-2无密码

ssh-keygen -t rsa
ssh-copy-id root@node-1
ssh-copy-id root@node-2


一、安装docker

1.获取docker版本列表

2.安装并优化配置

1)安装


2)优化

#配置镜像加速,登陆阿里云个人账号,获取加速镜像地址:手动或执行脚本自动,vim /etc/docker/daemon.json

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
> 
>   "registry-mirrors": ["https://877qt60u.mirror.aliyuncs.com"]
> 
> EOF

启动并设置开机自启

二、部署k8s

1.安装依赖

提示:我们一会安装各个组件需要用到https、curl工具

sudo apt-get update && apt-get install -y apt-transport-https
sudo apt-get install curl

安装GPG证书
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

使用国内kubernetes的源(阿里源)
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-‘EOF’
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF

更新软件源(使更改后的源生效)

sudo apt-get update

2.安装k8s组件及优化

提示:需要做些优化,否则,重启之后,或过短时间,发现打开报错!

各组件作用:
kubeadm:引导集群的命令。
kubelet:在集群中的所有机器上运行的组件,并执行诸如启动 pod 和容器之类的操作。
kubectl:与您的集群对话的命令行工具。

安装指定版本:
sudo apt-get install -y kubelet=1.14.6-00 kubeadm=1.14.6-00 kubectl=1.14.6-00

保持版本,取消自动更新
sudo apt-mark hold kubelet=1.14.6-00 kubeadm=1.14.6-00 kubectl=1.14.6-00

kubelet 修改与docker 驱动一致

docker info # 查看驱动(默认的是cgroupfs,如果跟Docker 一致就不需要修改。)
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

在KUBELET_KUBECONFIG_ARGS 后面追加 --cgroup-driver=cgroupfs

启动或重启kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet


三、初始化集群

查看kubernetes 1.14.6需要哪些镜像:

kubeadm config images list --kubernetes-version=v1.14.6
k8s.gcr.io/kube-apiserver:v1.14.6
k8s.gcr.io/kube-controller-manager:v1.14.6
k8s.gcr.io/kube-scheduler:v1.14.6
k8s.gcr.io/kube-proxy:v1.14.6
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

//初始化k8s集群,192的地址就是master的地址根据自己情况进行修改,cidr和pod必须配置否则没有网络插件后面的node不能加入

执行初始化命令:

kubeadm init \\
   --image-repository registry.aliyuncs.com/google_containers \\
   --kubernetes-version v1.14.6 \\ 
   --apiserver-advertise-address=192.168.171.100 \\  
   --service-cidr=10.1.0.0/16 \\
   --pod-network-cidr=10.244.0.0/16 \\

apiserver-advertise-address=192.168.171.100 这个参数就是master主机的IP地址。其他默认就行。

apiserver-advertise-address 用哪个IP(网口)提供api, 可以用当前主机的IP, 或者0.0.0.0不指定
pod-network-cidr Pod层的网络IP范围, 需要与后面要配置的kube-flannel.yml里的设置一致
service-cidr Service层的网络IP范围, 这个是虚拟IP不会体现在路由表上, 与前面的IP区分开就行

成功后提示:

添加网络插件:这步保证集群之间通讯
在其中一台执行,拷贝到另一台:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

特别注意:执行后面的命令,在master能成功,节点执行报错如下:

节点kubectl启动不了,需要依赖 /etc/kubernetes/下的admin.conf文件,但只有master主节点经过初始化才能生成该文件。

解决方法:在节点创建目录,将master节点的admin.conf复制到node节点对应目录下,并赋予权限。

mkdir -p $HOME/.kube  # 分别在子节点执行

scp /etc/kubernetes/admin.conf  root@node-1:$HOME/.kube/config
scp /etc/kubernetes/admin.conf  root@node-2:$HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config  # 分别在节点上执行

验证:
节点正常

master与node详细信息:

四、排错思路

节点加入集群报错

解决方案:
1)翻译:[飞行前]运行飞行前检查
[警告:检测到“cgroupfs”作为Docker cgroup驱动程序。推荐的驱动程序是“systemd”。请跟随https://kubernetes.io/docs/setup/cri/的导游,错误执行阶段预检:无法验证应用编程接口服务器的身份:需要32字节的SHA-256哈希,找到28字节
2)提取关键信息:需要32字节的SHA-256哈希,找到28字节
3)身份标识符位数不对,我是复制master节点,为什么会这样?原来,- -discovery前面不要有空格,复制的格式不对导致,改正之后呢?学会防患与未然,下次,遇到类似的情况,复制粘贴之后检查格式再回车,负责报错很难确定是哪个方面引起的!改成下面的成功!

以上是关于精品Ubuntu轻松搭建k8s集群报错解决的主要内容,如果未能解决你的问题,请参考以下文章

k8s集群搭建报错:error:kubectl get csr No resources found.

k8s集群搭建报错:error:kubectl get csr No resources found.

精品轻松部署ceph分布式存储集群

精品轻松部署ceph分布式存储集群

ubuntu18.04搭建k8s集群

15分钟连接Jetson Nano与K8S,轻松搭建机器学习集群