Kubeadm构建K8S集群指南:从环境准备到Dashboard部署的详细步骤与常见问题解决方案

news2024/9/30 5:40:30

文章目录

  • 一、环境准备
    • 1、准备1主2从
    • 2、设置主机名与时区
    • 3、添加hosts网络主机配置
    • 4、关闭防火墙
    • 5、验证是否配置正确
  • 二、安装Kubeadm
    • 1、在每个Centos上安装Docker
    • 2、确保从cgroups均在同一个从groupfs
    • 3、安装kubeadm集群部署工具
    • 4、关闭交换区
    • 5、配置网桥
    • 6、通过镜像安装k8s
    • 7、验证是否配置正确
  • 三、利用Kubeadm构建集群
    • 1、配置master
    • 2、把node加入集群
  • 四、Dashboard
    • 1、开启Web UI Dashboard
    • 2、部署集群
  • 五、总结
    • 1、[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
    • 2、[ERROR Swap]: running with swap on is not supported. Please disable swap
    • 3、The connection to the server 192.168.56.200:6443 was refused - did you specify the right host or port?
      • 方案1(不管什么原因,直接操作)
      • 方案2
    • 4、[ERROR Port-10250]: Port 10250 is in use
    • 5、[discovery] Failed to request cluster info, will try again: [Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp 10.0.2.15:6443: connect: connection refused]
    • 6、error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition
    • 7、[kubelet-check] Initial timeout of 40s passed.

一、环境准备

国内安装K8S的四种途径

  • 使用kubeadmin通过离线镜像安装
    推荐使用
  • 购买使用阿里公有云平台k8s
    需要花钱
  • 通过yum官方仓库安装
    版本比较老旧
  • 二进制包的形式进行安装,kubeasz
    github开源项目,不推荐使用,非官方,不知道有什么坑

1、准备1主2从

安装虚拟机,可以参考VirtualBox+Vagrant安装虚拟机
Centos 7

  • Master: 192.168.56.200
  • Node1: 192.168.56.201
  • Node2: 192.168.56.202
    在这里插入图片描述

2、设置主机名与时区

3台都执行

timedatectl set-timezone Asia/Shanghai 

master执行

hostnamectl set-hostname master

node执行

hostnamectl set-hostname node1
hostnamectl set-hostname node2 

3、添加hosts网络主机配置

三台虚拟机都要设置

vi /etc/hosts

192.168.56.200 master
192.168.56.201 node1
192.168.56.202 node2

4、关闭防火墙

三台虚拟机都要设置

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld

5、验证是否配置正确

可以接受到数据,就问题不大

ping master
ping node1
ping node2

在这里插入图片描述

二、安装Kubeadm

上传我们的资源:https://mp.csdn.net/mp_download/manage/download/UpDetailed

1、在每个Centos上安装Docker

参考Centos7使用阿里云镜像加速服务安装Docker

2、确保从cgroups均在同一个从groupfs

docker info | grep cgroup
在这里插入图片描述
集群中这个值应该相同,如果不是groupfs,执行下列语句

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=cgroupfs"]
}
EOF
systemctl daemon-reload && systemctl restart docker

3、安装kubeadm集群部署工具

cd /k8s
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm

4、关闭交换区

临时关闭swap:swapoff -a
可永久关闭swap:删除或者注释掉swap的挂载
-sed -i ‘/swap/s/^/#/’ /etc/fstab
-vi /etc/fstab,注释掉swap这一行
看看是否已经关闭:free -m,看后一行swap 都是0

[root@master k8s]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1837         773          75           9         988         906
Swap:             0           0           0

注:交换区:就是使用硬盘空间模拟内存

5、配置网桥

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0
EOF
sysctl --system

/etc/sysctl.d/k8s.conf是用于存放Kubernetes相关内核参数配置的目录,系统启动时加载
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
表示允许 IPv6/IPv4 数据包通过 Linux 网桥时,调用 IPv6/IPv4 协议族的相关规则(比如防火墙规则)。其值为1表示启用,0表示禁用
控制网桥是否允许使用特定的内核防火墙模块(例如 IPv6 的 iptables、IPv4 的 iptables 和 ARP 的 arptables)
net.ipv4.ip_forward: 这个参数控制是否启用 IP 转发,即将一个接口收到的 IP 数据包转发到另一个接口。在 Kubernetes 中,通常需要将这个参数设置为 1,以便节点之间能够进行通信。
net.ipv4.ip_forward_use_pmtu: 这个参数控制是否使用路径最大传输单元(PMTU)来优化数据包传输。如果设置为 0,则禁用 PMTU 优化。
sysctl --system:生效命令

查看效果:sysctl -a|grep “ip_forward”

6、通过镜像安装k8s

加载本地镜像文件

cd /k8s
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz

7、验证是否配置正确

docker images
在这里插入图片描述
以上操作,3台虚拟机都要执行

三、利用Kubeadm构建集群

1、配置master

kubeadm初始化

kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.56.200

初始化成功后,会提示我们执行下面操作,返回kubeadm join...,这个后面在node节点执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

获取 Kubernetes 集群中所有节点

kubectl get nodes

如果状态不对,执行kubectl get pod --all-namespaces查看
在这里插入图片描述
基础网络组件一直处于Pending状态,缺少flannel网络组件,需要安装

kubectl create -f kube-flannel.yml

2、把node加入集群

执行前面kubeadm init返回的

kubeadm join 192.168.56.200:6443 --token hhpwkf.xq24gwed3urzugmg     --discovery-token-ca-cert-hash sha256:052a21b706da880e1603484b626ee9f9665cba9b42bb8bdb244521cdfcef4d48

如果忘记了,也可以手动拼接,格式为kubeadm join masterip:6443 --token xxx1 --discovery-token-ca-cert-hash sha256:xxx2

  • 查看token,替换xxx1
 kubeadm token list

获取证书hash,替换xxx2

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 

四、Dashboard

使用Dashboard验证一下集群是否正常

原理:master向node1、2发送创建容器指令
k8s会通过健康检查,保证容器质量

1、开启Web UI Dashboard

kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc

2、部署集群

node节点配置node1、2镜像加速,参考:https://blog.csdn.net/qq_36433289/article/details/134499047

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://your.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

注:your替换为阿里云提供的
访问http://192.168.56.201:32000 或 http://192.168.56.202:32000,打开界面

  • 192.168.56.201是我们node的ip
  • 32000端口是kubernetes-dashboard.yaml文件里面配置
    在这里插入图片描述
    通过右上角的新建
    在这里插入图片描述
    填写内容,点击部署
    在这里插入图片描述
    就会自动部署Tomcat容器到我们的node节点,如下,说明已经成功了
    在这里插入图片描述
    点击上图中的副本集,查看我们对外暴露的接口
    在这里插入图片描述
    在这里插入图片描述
    通过node的ip:31288即可访问,如下图,状态码是404就说明成功了
    在这里插入图片描述

五、总结

1、[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2

很明显,就是我们的配置低了,调整我们的CPU配置,至少为2核

2、[ERROR Swap]: running with swap on is not supported. Please disable swap

没有关闭交换区导致,需要执行swapoff -a

3、The connection to the server 192.168.56.200:6443 was refused - did you specify the right host or port?

方案1(不管什么原因,直接操作)

1、重置k8s集群

kubeadm reset

2、删除相关目录

rm -rf $HOME/.kube
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd

3、重新利用Kubeadm构建集群

方案2

检查下是否有错误:systemctl status kubelet

[root@master ~]# systemctl status kubelet 
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: inactive (dead)
     Docs: https://kubernetes.io/docs/

原因很明显,kubelet没启动,之前每次重启都会这样,设置开机自动启动即可

systemctl enable kubelet

4、[ERROR Port-10250]: Port 10250 is in use

找到占用的端口号的进程,杀掉即可

netstat -ntlup|grep 10250
kill -9 pid

在这里插入图片描述
注:如果netstat命令不支持,出现-bash: netstat: command not found,执行yum install net-tools

5、[discovery] Failed to request cluster info, will try again: [Get https://10.0.2.15:6443/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp 10.0.2.15:6443: connect: connection refused]

这个10.0.2.15:6443访问有问题,也就是我们的ip有问题,使用Vagrant生成的虚拟机,默认网卡eth0对应IP地址10.0.2.15,kubeadm init不指定ip的话,默认生成的就是这个ip,所以初始化的时候需要指定ip,就没问题了

6、error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition

重置下集群即可:kubeadm reset -f

7、[kubelet-check] Initial timeout of 40s passed.

如果阻塞这一步,加入集群失败,重置下集群就OK了

kubeadm reset -f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1283539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PCB知识】

PCB知识 1. PCB知识1.1 扩展名1.21.31.4 2.3.4.5. 1. PCB知识 1.1 扩展名 扩展名为 *.opj 的文件可以使用 Origin Project 应用程序打开。 扩展名为*.DSN文件&#xff0c;一般为isis或OrCAD电路图文件&#xff0c; OrCAD为Cadence软件组件&#xff1b; isis为Proteus软件的sc…

整数和浮点数在内存中的存储

文章目录 每日一言整数在内存中的存储方式浮点数在内存中的存储结语 每日一言 You just can’t beat the person who never gives up. 你无法打败那位永不放弃的人。 整数在内存中的存储方式 整数在内存中的存储方式通常采用二进制形式&#xff0c;即将整数的数值转化为二进制…

根据源码梳理Redisson的可重入、锁重试以及看门狗机制原理

Redisson可重入的原理 在上篇文章中我们已经知道了除了需要存储线程标识外&#xff0c;会额外存储一个锁重入次数。那么接下来我们查看使用Redisson时&#xff0c;Redisson的加锁与释放锁流程图。 当开始获取锁时&#xff0c;会先判断锁是否存在&#xff0c;如果存在再进行判断…

拒绝废话,直接开画!Python零基础教程之画图

引文 很多教程&#xff0c;开始教python&#xff0c;就是语法呀&#xff0c;字符类型这些基础的&#xff0c;虽说是基础&#xff0c;你也不能说没用。 但是&#xff0c;对于前期要快速成长的我们来说&#xff0c;属实不够看。 我们是新手&#xff0c;我们是菜鸟&#xff0c;但…

设计简单高效的短链系统

目录 引言 1. 短链系统的原理 1.1 长链接生成短码 1.2 短码映射到长链接 1.3 短码重定向 1.4 过期短 URL 清理 2. 设计与实现 2.1 数据存储 2.2 短码生成 2.3 接口设计 2.4 安全性考虑 2.5 访问性能优化 引言 在当今数字化时代&#xff0c;人们对信息的分享需求不断…

你敢挑战吗?网易面试题,用不规则的3升和5升杯子如何在无限水中得到4升水?

嗨&#xff0c;亲爱的小米粉丝们&#xff01;今天小米要和大家一起挑战一道网易产品面试题&#xff1a;3升的杯子一个&#xff0c;5升的杯子一个&#xff0c;杯子形状不规则&#xff0c;水却是无限的&#xff0c;我们要怎么得到4升的水呢&#xff1f;别急&#xff0c;小米来给你…

大文件分片上传、分片进度以及整体进度、断点续传【前端原生、后端 Koa、Node 原生】(一)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

百望云供应链协同解决方案入选北大创新评论产业研究案例库

11月28日-29日&#xff0c;百望云受邀出席《北大创新评论》2023 Inno China 中国产业创新大会&#xff0c;从战略构建、生态塑造、科技创新等议题出发&#xff0c;与学术专家、产业专家、企业代表共赴盛会&#xff0c;思享汇聚。会上&#xff0c;《北大创新评论产业研究案例库&…

提升--21---JMM(Java内存模型)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JMM--Java Memory ModelJMM 定义JMM规则&#xff1a;线程间通信的步骤&#xff1a; JMM的三大特性&#xff1a;原子性&#xff08;Atomicity&#xff09;可见性&…

uniapp是否可以用vant等移动端UI库、使用步骤以及需要注意的问题

文章目录 使用vant步骤使用中遇到的问题在浏览器中的运行效果综上&#xff0c;不建议uniapp项目使用vant。 使用vant步骤 首先vant可以兼容uniapp&#xff0c;直接用vant版就好。微信小程序专用版本是&#xff1a;vant-weapp。 基本使用步骤&#xff1a; 1、安装 # 安装 Va…

Django创建基本的app应用并配置URL路径-成功运行服务

开发环境&#xff1a;Pycharm2021 Win11 首先创建虚拟环境: 可参考&#xff1a; Pycharm开发环境下创建python运行的虚拟环境&#xff08;自动执行安装依赖包&#xff09;_pycharm自动下载依赖包_heda3的博客-CSDN博客 1、安装 Django 在虚拟环境下安装pip install django …

任意密码重置+CRRF

一、XSS漏洞 在商城的搜索处&#xff0c;输入标准语句的传参直接就可以弹窗 二、逻辑漏洞-用户枚举 在用户注册界面&#xff0c;点击发送验证码&#xff0c;然后用BURP发包 更改手机号传参&#xff0c;这里手机号传参没有进行加密&#xff0c;直接用手机号的位置进行爆破 正确的…

根文件系统lib库添加与初步测试

一. 简介 我们在编译 busybox源码时&#xff0c;选择的是动态编译&#xff0c;所以&#xff0c;制作生成的 根文件系统中/bin或 /sbin目录下软件运行时会调用到一些库文件的。库文件就是交叉编译器的库文件。 前面我们编译 busybox源码时&#xff0c;选择动态编译&#xff0…

JavaEE之多线程编程(一):基础篇

文章目录 一、关于操作系统一、认识进程 process二、认识线程三、进程和线程的区别&#xff08;重点&#xff01;&#xff09;四、Java的线程和操作系统线程的关系五、第一个多线程编程 一、关于操作系统 【操作系统】 驱动程序&#xff1a; 如&#xff1a;我们知道JDBC的驱动程…

【接口测试】POST请求提交数据的三种方式及Postman实现

1. 什么是POST请求&#xff1f; POST请求是HTPP协议中一种常用的请求方法&#xff0c;它的使用场景是向客户端向服务器提交数据&#xff0c;比如登录、注册、添加等场景。另一种常用的请求方法是GET&#xff0c;它的使用场景是向服务器获取数据。 2. POST请求提交数据的常见编…

笔记-模拟角频率和数字角频率的关系理解

先建议阅读前人此文&#xff08;点击这里&#xff09;&#xff0c;有助于理解。 模拟频率&#xff1a;f 模拟角频率&#xff1a;Ω 数字角频率&#xff1a;ω 其中&#xff1a;在模拟信号中Ω 2πf 正弦波表示&#xff1a;sin(2πft) sin(Ωt) 数字信号就是离散的&#xff…

Facebook推广工具功能科普!

随着社交媒体的普及&#xff0c;Facebook已经成为全球使用最广泛的社交平台之一&#xff0c;对于广大营销人员来说&#xff0c;利用Facebook推广工具进行营销已经成为不可或缺的一部分。 那么&#xff0c;这些推广工具到底有哪些功能呢?本文将为您揭秘Facebook推广工具的强大…

Pytest 使用及调用方法

使用python -m pytest调用pytest 2.0版本新增 你可以在命令行中通过Python编译器来调用Pytest执行测试: python -m pytest [...] 通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。 可能出现的执行退出code 执行pytest可能…

公众号50个数量怎么操作?

一般可以申请多少个公众号&#xff1f;公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因&#xff0c;确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个&#xff0c;对于新媒体公司来说&#xff0c;这导致做不了公…

移动端APP自动化测试框架-UiAutomator2基础

很早以前&#xff0c;我用uiautomatorjava实践过Android APP自动化测试&#xff0c;不过今天要提的不是uiautomator&#xff0c;而是uiautomator2。听起来uiautomator2像是uiautomator的升级版&#xff0c;但是这两款框架仅仅是名字上比较相似&#xff0c;实际上没有任何关联。…