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

文章目录

  • 一、环境准备
    • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚信安慧AntDB数据库中级培训ACP上线,中国移动总部首批客户认证通过

近日&#xff0c;亚信安慧AntDB数据库ACP&#xff08;AntDB Certified Professional&#xff09;中级培训课程于官网上线。在中国移动总部客户运维团队、现场项目部伙伴和AntDB数据库成员的协同组织下&#xff0c;首批中级认证学员顺利完成相关课程的培训&#xff0c;并获得Ant…

LAMP安装部署网站

目录 什么是LAMP? 实验&#xff08;搭建一个论坛&#xff09; 一&#xff0c;安装apache 1.关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.优化配置文件路径&#xff0c;并把httpd服务的可执行程序文件…

【LeetCode:1466. 重新规划路线 | DFS + 图 + 树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

区块链如何影响数字营销的各个方面?

在过去的几年里&#xff0c;由于区块链等新技术和趋势的进步&#xff0c;数字营销领域发生了各种变化和发展。区块链是加密货币爱好者和投资者当前的流行语。然而&#xff0c;它的可能性已经超出了加密货币的世界&#xff0c;今天&#xff0c;来自不同行业的组织正在获得他们的…

Python接口自动化测试:断言封装详解

概要 在进行API接口测试时&#xff0c;断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中&#xff0c;我们可以利用一些库来实现断言功能。 1. 安装必要的库 在Python中&#xff0c;我们主要会使用两个库&#xff1a;requests和jsonpath。…

人脸检测,人脸识别综述

Retinaface SCRFD [PDF] CenterFace: Joint Face Detection and Alignment Using Face as Point | Semantic Scholar

SpringBoot 配置文件使用@ @取值

目录 一、背景 二、遇到的问题 三、解决办法 一、背景 &#xff08;1&#xff09;我在项目中引入了如下依赖&#xff0c;目的是开启SpringBoot为我们提供的监控(Actuator)功能。 <!-- 引入SpringBoot 监控功能 --> <dependency><groupId>org.springframew…

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一个由Apache基金会所开发的用于解决海量数据的存储及分析计算问题的分布式系统基础架构。 广义上来说&#xff0c;Hadoop通常指一个跟广泛的概念——Hadoop生态圈。 以下是hadoop生态圈中的技术&#xff1a; Hadoop优势 hadoop组成 HDFS…

MangoDB数据可updata报错

报错详情 报错原因 语法错误&#xff0c;我们调整语法即可 update&#xff08;{要修改的行}&#xff0c;{$set{要修改的字段}}&#xff09;

Spring--10--Spring Bean的生命周期

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.Spring Bean1.1 什么是 Bean简而言之&#xff0c;bean 是由 Spring IoC 容器实例化、组装和管理的对象。 1.2 Spring框架管理Bean对象的优势 2.Bean的生命周期实例…

【分享】我想上手机器学习

目录 前言 一、理解机器学习 1.1 机器学习的目的 1.2 机器学习的模型 1.3 机器学习的数据 二、学习机器学习要学什么 2.1 学习机器学习的核心内容 2.2 怎么选择模型 2.3 怎么获取训练数据 2.4 怎么训练模型 三、机器学习的门槛 3.1 机器学习的第一道门槛 3.2 机器…

文件上传和下载

文件上传 1.文件上传的原理: 要实现Web开发中的文件上传功能&#xff0c;通常需完成两步操作&#xff1a;一是在Web项目的页面中添加上传输入项&#xff0c;二是在Servlet中读取上传文件的数据&#xff0c;并保存到目标路径中。 由于大多数文件的上传都是通过表单的形式提交…

北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯(bug已解决 更新至3.0)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1一些更新和讲解 1.2改正后的…

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号&#xff01;用来区分不同的软件进程 被规定总共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一协议下&#xff0c;端口号不可以冲突占用 端口分类&#xff1a; 公有端口&#xff1a;0~1023 HT…

Linux环境下用yum安装postgres15

1. 下载PostgreSQL 15 安装包 在官网选择对应版本的安装包 https://www.postgresql.org/download/ Linux | CentOS 7 | PostgreSQL 15 2. 安装PostgreSQL 15 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-la…

chrome安装jsonview

写在前面 通过jsonview可以实现&#xff0c;当http响应时application/json时直接在浏览器格式化显示&#xff0c;增加可读性。本文看下如何安装该插件到chrome中。 1&#xff1a;安装 首先在这里 下载插件包&#xff0c;然后解压备用。接着在chrome按照如下步骤操作&#xf…

小程序一键生成工具哪个好?

在这个数字化时代&#xff0c;小程序已经成为商家吸引客户、提升业务的重要工具。但是&#xff0c;传统的小程序开发方式既费时又费力&#xff0c;让许多商家望而却步。 现在&#xff0c;有了乔拓云小程序模板开发平台&#xff0c;一切都变了。 乔拓云提供了大量精心设计的模板…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展&#xff0c;手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员&#xff0c;了解手机销售技巧是必不可少的。本文将通过案例分析与实践&#xff0c;为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…

自动化运维工具-ansible部署

首先我们来谈一下&#xff0c;为什么要引入自动化运维呢&#xff1f; 引入自动化运维的目的是为了提高运维效率、降低人工操作的错误率、减少重复性的工作、提高系统的可靠性和稳定性。传统的手动运维方式存在以下问题&#xff1a; 出现了大量的人工干预&#xff0c;运维人员需…

Web端在线云剪辑方案

视频内容已经成为企业传播信息、展示品牌形象的重要手段。然而&#xff0c;视频制作并非易事&#xff0c;需要专业的技术和设备支持。为了帮助企业解决这个问题&#xff0c;美摄科技推出了Web端在线云剪辑方案&#xff0c;提供广播级专业技术赋能&#xff0c;帮助企业快速搭建视…