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 -mtotal        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 AgentLoaded: loaded (/usr/lib/systemd/system/kubelet.service; disabled; vendor preset: disabled)Drop-In: /usr/lib/systemd/system/kubelet.service.d└─10-kubeadm.confActive: 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.mzph.cn/news/196744.shtml

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

相关文章

继承 多态 拆箱装箱 128陷阱 枚举类

继承 在java里一个类只能继承一个类&#xff0c;但可以被多个类继承&#xff1b;c里一个类可以继承多个类&#xff1b; 子类可以使用父类的方法&#xff1b; 在java中&#xff0c;Object是所有类的父类&#xff1b; equals方法比较的是对象是否指向同一个地方&#xff0c;这个方…

C语言面试之旅:掌握基础,探索深度(面试实战之ARM架构一)

从前不会回头&#xff0c;往后不会将就。 ----小新 一.ARM采用32位架构 ARM约定一个Byte是8 bits&#xff0c;一个Halfword是16 bits (2 byte)&#xff0c;一个Word是32 bits (4 byte)。大部分ARM core …

华清远见嵌入式学习——C++——作业3

作业要求&#xff1a; 代码&#xff1a; #include <iostream>using namespace std;class Per { private:string name;int age;double *high;double *weight; public://有参构造函数Per(string n,int a,double h,double w):name(n),age(a),high(new double(h)),weight(ne…

Vue3.x 中 hooks 函数封装和使用

一、hooks 是什么 vue3 中的 hooks 就是函数的一种写法&#xff0c;就是将文件的一些单独功能的 js 代码进行抽离出来进行封装使用。 它的主要作用是 Vue3 借鉴了 React 的一种机制&#xff0c;用于在函数组件中共享状态逻辑和副作用&#xff0c;从而实现代码的可复用性。 注…

Python类型注解必备利器:typing模块解读指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块&#xff0c;介绍其基本概念、常用类型注解以及使用示例&am…

Web前端 ---- 【vue】vue 组件传值(props、全局事件总线、消息的订阅与发布)

目录 前言 父子组件 父传子 子传父 全局事件总线 什么叫全局事件总线 如何创建全局事件总线 如何在组件上获取到这个全局vc对象 最常用的创建全局事件总线 兄弟组件 消息订阅与发布 安装 使用 爷孙组件 前言 在上篇文章我们介绍了父子组件之间的传值通信&#xff…

写 SVG 动画必看!SVG系列文章3-动画标签

1、SMIL animation概览 SMIL不是指「水蜜梨」&#xff0c;而是Synchronized Multimedia Integration Language&#xff08;同步多媒体集成语言&#xff09;的首字母缩写简称&#xff0c;是有标准的。本文所要介绍的SVG动画就是基于这种语言。 SMIL允许你做下面这些事情&#…

单基因也可以这么做,经典生信文章思路,简单易复现更可升级

今天给同学们分享一篇生信文章“High Expression of PSRC1 Predicts Poor Prognosis in Lung Adenocarcinoma”&#xff0c;这篇文章发表在J Cancer期刊上&#xff0c;影响因子为3.9。 结果解读&#xff1a; LUAD和LUSC中PSRC1表达高 从TCGA数据集中&#xff0c;有535名LUAD患…

Redis实战篇笔记(最终篇)

Redis实战篇笔记&#xff08;七&#xff09; 文章目录 Redis实战篇笔记&#xff08;七&#xff09;前言达人探店发布和查看探店笔记点赞点赞排行榜 好友关注关注和取关共同关注关注推送关注推荐的实现 总结 前言 本系列文章是Redis实战篇笔记的最后一篇&#xff0c;那么到这里…

集成开发环境PyCharm的使用【侯小啾python基础领航计划 系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python基础领航计划 系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

从零开始实现神经网络(二)_CNN卷积神经网络

参考文章: 介绍卷积神经网络1 介绍卷积神经网络2 在过去的几年里&#xff0c;关于卷积神经网络&#xff08;CNN&#xff09;的讨论很多&#xff0c;特别是因为它们彻底改变了计算机视觉领域。在这篇文章中&#xff0c;我们将建立在神经网络的基本背景知识的基础上&#xff0c;探…

2023/12/4JAVAmysql

流程控制函数 部门不存在,这个不存在交集,所有没出现

【Docker实操】创建一个Node服务

一、安装node 请查看阿里云官网教程&#xff1a;如何快速部署Node.js项目。&#xff08;注意要在根目录操作&#xff09;apt install nodejs、apt install npm执行上面两个命名来安装 安装完成后&#xff0c;执行node -v、npm -v&#xff0c;如果出现版本&#xff0c;就是安装…

你好!斐波那契查找【JAVA】

1.有幸遇见 斐波那契查找算法&#xff0c;也称黄金分割查找算法&#xff0c;是一种基于斐波那契数列的查找算法。与二分查找类似&#xff0c;斐波那契查找也是一种有序查找算法&#xff0c;但它的查找点不是中间位置&#xff0c;而是根据斐波那契数列来确定&#xff0c;因此又称…

工程师业余生活之制作蔬菜盆景

工程师业余生活陶冶情操之制作蔬菜盆景 &#xff08;蔬 果 盆 景 裝 點 家 居&#xff09; 市場上好多蔬菜瓜果,稍用一些心思,將一些價廉的蔬果製成別致的盆景, 便能使家居充滿自然氣息&#xff0c;增添生活情趣。以下介紹幾種製作方法&#xff1a; 【番薯盆景】 (番薯又名地…

4K-Resolution Photo Exposure Correction at 125 FPS with ~8K Parameters

MSLTNet开源 | 4K分辨率125FPS8K的参数量&#xff0c;怎养才可以拒绝这样的模型呢&#xff1f; 错误的曝光照片的校正已经被广泛使用深度卷积神经网络或Transformer进行广泛修正。尽管这些方法具有令人鼓舞的表现&#xff0c;但它们通常在高分辨率照片上具有大量的参数数量和沉…

avue页面布局 api 引用

展示 index.vue <template><basic-container><avue-crud :option"option":table-loading"loading":data"data":page"page":permission"permissionList":search.sync"search":before-closebefore…

GitHub项目推荐-Deoldify

有小伙伴推荐了一个老照片上色的GitHub项目&#xff0c;看了简介&#xff0c;还不错&#xff0c;推荐给大家。 项目地址 GitHub - SpenserCai/sd-webui-deoldify: DeOldify for Stable Diffusion WebUI&#xff1a;This is an extension for StableDiffusions AUTOMATIC1111 w…

多多情报通:助力拼多多商家选品运营的数据分析工具

多多情报通&#xff08;原名多多参谋&#xff09;是一款专为拼多多商家设计的数据分析工具&#xff0c;旨在帮助商家进行选品、运营优化和提高销售业绩。通过多多情报通&#xff0c;商家可以更好地了解市场趋势、消费者需求和竞争对手状况&#xff0c;从而制定有效的运营策略。…

RH850P1X芯片学习笔记-Pin Functions

文章目录 Pin Connection Diagrams术语定义 Pin ListPort OverviewIntroductionFunctional OverviewPort CategoryOperation Mode运行模式 Port Function寄存器地址映射 Port寄存器描述Pn/JP0 — Port RegisterPPRn/JPPR0 — Port Pin Read RegisterPMn/JPM0 — Port Mode Regi…