K8S1.23.6版本详细安装教程以及错误解决方案(包括前置环境,使用部署工具kubeadm来引导集群)

news2025/4/13 6:05:35

准备工作(来自官方文档)

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux
    发行版以及一些不提供包管理器的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
  • 开启机器上的某些端口。请参见这里了解更多详细信息。
  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。

	# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
	sudo setenforce 0
	sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
	#关闭swap
	swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

可以选择一次性运行命令(不需要执行上面的命令):
sudo setenforce 0 && sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config && swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

转发 IPv4 并让 iptables 看到桥接流量(官网链接)

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay && sudo modprobe br_netfilter

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system

启用必要端口

启用这些必要的端口后才能使 Kubernetes 的各组件相互通信。 可以使用 netcat 之类的工具来检查端口是否启用,例如:

nc 127.0.0.1 6443

你使用的 Pod 网络插件 (详见后续章节) 也可能需要开启某些特定端口。 由于各个 Pod 网络插件的功能都有所不同,请参阅他们各自文档中对端口的要求。

安装容器运行时

为了在 Pod 中运行容器,Kubernetes 使用 容器运行时(Container Runtime)。
默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。
如果你不指定运行时,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的容器运行时。
如果检测到有多个或者没有容器运行时,kubeadm 将抛出一个错误并要求你指定一个想要使用的运行时。

以docker为例

docker运行环境的安装
1、方式一

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
systemctl start docker.service
systemctl enable docker.service
docker -v

2、方式二

① 移除以前docker相关包

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

② 配置yum源

sudo yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

③ 安装docker

yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

④ 启动并设置开机自启

systemctl enable docker --now

配置加速("registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]为阿里云申请的镜像加速,如有需要可自行前往申请),申请方式见链接

这里一定要配置,不然后续kubelet会启动失败,报错如下
在这里插入图片描述

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3i54s1l9.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

基础环境

#各个机器设置自己的域名
hostnamectl set-hostname xxxx

安装 kubeadm、kubelet 和 kubectl

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
   http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

sudo yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 --disableexcludes=kubernetes && sudo systemctl enable --now kubelet

#kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

下面标注##包围的范围内master才需要执行,子节点不需要执行

#####################################################################################################
###############################################主节点执行#############################################
#####################################################################################################

使用 kubeadm 创建集群

准备所需的容器镜像(跳过该步骤)

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
   
chmod +x ./images.sh && ./images.sh

初始化主节点

#所有机器(master+其他worker节点)添加master域名映射,192.168.2.100需要修改为自己的master节点ip
echo "10.8.0.8  cluster-endpoint" >> /etc/hosts

#主节点初始化(master) 10.8.0.8为主节点ip,cluster-endpoint为上一步配置的主节点映射域名,registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images为个人镜像仓库地址
kubeadm init \
--apiserver-advertise-address=10.8.0.8 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.224.0.0/16 \
--pod-network-cidr=192.225.0.0/16

#主节点初始化配置中,所有网络范围不重叠,pod-network-cidr若更改,默认是192.168.0.0/16,注意后续有一项配置也需要更改

初始化成功后见下图(复制kubeadm join相关语句,后续加入节点时会使用)
在这里插入图片描述

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:

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

如果你是 root 用户,则运行:

export KUBECONFIG=/etc/kubernetes/admin.conf

安装网络组件

版本对应关系可访问链接https://docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirements(中间的v3.21版本变化即可访问不同版本的对应关系)
在这里插入图片描述
在这里插入图片描述

前面初始化主节点时提到的配置变化,这里需要注意,将下载的文件做一定的更改,与前面配置的ip相同,如果前面的ip(192.168.0.0)未更改则无需更改

wget https://docs.projectcalico.org/v3.24/manifests/calico.yaml --no-check-certificate

这里是默认的配置
在这里插入图片描述
由于我更改了初始化的ip段,所以这里对应也更改了
在这里插入图片描述

# 执行下面的命令将docker.io/c变更为c,防止直接从docker.io拉去镜像失败
sed -i 's/docker.io\/c/c/g' calico.yaml &&  kubectl apply -f calico.yaml

在这里插入图片描述

#####################################################################################################
###############################################主节点执行结束##########################################
#####################################################################################################

加入node节点

kubeadm join cluster-endpoint:6443 --token vv1m8c.55hlkvzvutu0qk84 \
        --discovery-token-ca-cert-hash sha256:821f36f85d519bfffd6e45f6805588bc99d20805c4ebf9b10333a1c33749bb8c

如果没有令牌,可以通过在主master节点上运行以下命令来获取令牌:

kubeadm token list

默认情况下,令牌会在 24 小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌:kubeadm token create --print-join-command
加入成功后使用kubectl get nodes查看节点信息
在这里插入图片描述

错误解决:

如果使用VPN搭建私有网络时,服务器做master节点,注册时将会报错,显示calico超时的错误,如下

2023-09-07 12:12:18.566 [FATAL][1] cni-installer/<nil> <nil>: Unable to create token for CNI kubeconfig error=Post "https://10.96.0.1:443/api/v1/namespaces/kube-system/serviceaccounts/calico-node/token": dial tcp 10.96.0.1:443: i/o timeout

在这里插入图片描述

此时需要在master节点中的calico配置文件中对应的位置加入下面的语句,然后重新安装calico插件,其中tun0代表的是自己的VPN网卡名称

            - name: IP_AUTODETECTION_METHOD
              value: "interface=tun0"

在这里插入图片描述

如果上面的方式不行,请设置自定义的ip,也许是ip有冲突,就算是看不见冲突,也尝试改变一下,代替默认的ip,同时记得更改calico.yaml中的设置
在这里插入图片描述
当你怎么弄都不行的时候,请尝试所有机器执行以下命令

# 重置kubeadmin(所有)
kubeadmin reset
# 重置iptables(master)
iptables -F
# 删除旧的calico网络配置文件(所有)
 rm -rf /etc/cni/net.d
 # 删除旧的环境变量(master)
rm -rf  $HOME/.kube/config
# 还不行就执行下面的语句(所有),ip对应各个机器的ip地址
echo "10.8.0.8  k8s-master" >> /etc/hosts
echo "10.8.0.4  k8s-node1" >> /etc/hosts
echo "10.8.0.9  k8s-node2" >> /etc/hosts

仍然不行请就自己的问题百度找寻解决方案(该文章为个人搭建学习使用),综合了多方视频教程融合起来整理的方案,若仍未能解决你的问题或满足你的需求,望谅解!

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

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

相关文章

Python中的包管理方法

在Python开发中&#xff0c;包管理与依赖问题一直是开发者头疼的问题之一。随着项目规模的增大和复杂性的增加&#xff0c;管理各种依赖包和解决版本冲突变得尤为重要。本文将分享解决Python中的包管理与依赖问题的方法和工具&#xff0c;帮助开发者更好地管理项目中的依赖关系…

Chrome浏览器旧版本和驱动114113老版本下载

搜了下硬盘&#xff0c;只发现了78版本和113版本的&#xff0c;找114版本的没找到 浏览器安装包和驱动都有&#xff0c;配套使用 113版本已关闭自动更新&#xff0c;78版本包含360极速浏览器 链接&#xff1a;点击进入网盘下载 提取码&#xff1a;XjAu

C++新经典10--vector以及其使用

vector vector类型是一个标准库中的类型&#xff0c;代表一个容器、集合或者动态数组这样一种概念。既然是容器&#xff0c;那就可以把若干个对象放到里面。当然&#xff0c;这些对象的类型必须相同。简单来说&#xff0c;可以把一堆int型数字放到vector容器中去&#xff0c;复…

量化交易全流程(一)

-----------------------------------前沿介绍-------------------------------------- 量化投资基本概念&#xff1a;凡是借助于数学模型和计算机实现的投资方法都可以成为量化投资&#xff0c;多因子策略&#xff0c;期货CTA策略&#xff0c;套利策略和高频交易策略。 量化…

一片编程文章

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

QQ聊天记录删除了怎么恢复?果粉都是这么做的

QQ自1999年推出以来就广受欢迎&#xff0c;在这二十多年里&#xff0c;QQ已经建立起了庞大的用户基础。即使微信崛起&#xff0c;仍旧有很多小伙伴不愿“抛弃”QQ。在使用QQ的过程中&#xff0c;您是否会遇到误删聊天记录的情况&#xff1f;qq聊天记录删除了怎么恢复&#xff1…

赋能工业物联网 | 数据驱动,加速智能制造

行业背景 工业物联网场景下&#xff0c;随着智能设备及物联网技术的广泛应用&#xff0c;数据是最重要的资源之一&#xff0c;企业需要对各种机器、设备和传感器产生的时序数据进行采集、存储与分析。 因此&#xff0c;何为行之有效的数据库解决方案&#xff1f;企业普遍更为…

Charles基础使用指南

##Charles 基本使用指南 Charles 在本地构建一个HTTP代理服务器&#xff0c;可以实现对HTTP、HTTPS请求的抓取&#xff0c;也就是我们常说的抓包&#xff0c;以及对请求响应的修改等。 Charles 官网地址 https://www.charlesproxy.com/ ###一、移动端的抓包实现 1. PC端开启…

3招“挽回”:微信怎么恢复聊天记录

由于工作需要&#xff0c;经常使用微信与客户对接。害怕内存不足&#xff0c;所以我每个月都会清理一些不需要的文件&#xff0c;结果却不小心误删了与客户的聊天记录&#xff0c;有什么方法能够恢复回来吗&#xff1f; 聊天记录是微信的一个重要组成部分&#xff0c;里面保存着…

基于javaweb的CT图像管理系统(servlet+jsp)

系统简介 本项目采用eclipse工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 三个角色&#xff1a;管理员&#xff0c;普通用户&#xff0c;医生 模块简介 管理员&#xff1a; 1、登录 2、用户管理 3、医生管…

科技部副部长:以负责任的态度推动大模型发展,加强国际交流合作

源自&#xff1a;澎湃新闻 ChatGPT大模型技术拉开了迈向通用人工智能的序幕&#xff0c;通用人工智能将引发经济、社会、文化等领域的变革&#xff0c;有望推进人类社会迈向智能增强的时代。 要坚持开源协作&#xff0c;加强大模型技术持续创新&#xff0c;协同解决透明性、稳…

SEO优化的优势(让你的网站脱颖而出)

随着互联网技术的快速发展&#xff0c;现如今每个企业或个人都拥有自己的网站。然而&#xff0c;要想在竞争激烈的网络世界中脱颖而出并吸引更多的用户&#xff0c;SEO优化就显得尤为重要。在本文中&#xff0c;我们将详细介绍SEO优化所带来的优势。 一&#xff1a;提高网站排名…

电子电路学习笔记之NCV84120DR2G——车规级单通道高压侧驱动器

关于车规级芯片&#xff1a; 关于车规级芯片&#xff08;Automotive Grade Chip&#xff09;&#xff0c;车规级芯片是专门用于汽车行业的芯片&#xff0c;具有高可靠性、高稳定性和低功耗等特点&#xff0c;以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&…

数据库深分页介绍及优化方案 | 京东云技术团队

在前端页面显示&#xff0c;为了避免一次性展示全量数据&#xff0c;通过上下翻页或指定页码的方式查看部分数据&#xff0c;就像翻书一样&#xff0c;这就利用了MySQL的分页查询。 一、MySQL的深分页 查询偏移量过大的分页会导致数据库获取数据性能低下&#xff0c;以如下SQ…

vue设置全局变量:让你的数据无处不在!

前言 在 vue 开发中&#xff0c;如何设置全局变量是一个关键问题。本文将介绍多种方法&#xff0c;帮助大家轻松实现全局变量的共享&#xff0c;提升 vue 项目的开发效率。让我们一起来探索这些方法&#xff0c;为你的 vue 项目带来更好的开发体验。 方法一&#xff1a;使用 Vu…

Simulink搭建C语言仿真模型*

Simulink搭建C语言仿真模型 1、 在library库中查找S-Function Builder模块&#xff0c;拖入到空白区&#xff1b; 2、 该模块即为C语言代码模块&#xff0c;双击该模块&#xff0c;在Initialization栏&#xff0c;设置sample mode为离散采样&#xff0c;采样时间间隔Sample ti…

fastjson(反序列化)漏洞复现

fastjson 1. 漏洞描述 ​ FastJson是Alibaba的一款开源Json解析库&#xff0c;可用于将Java对象转换为其Json表示形式&#xff0c;也可以用于将Json字符串转换为等效的Java对象。近几年来FastJson漏洞层出不穷。RCE漏洞的源头&#xff1a;17年FastJson爆出的1.2.24反序列化漏…

软件测试报告加盖和不加盖CMA/CNAS标识的区别有哪些?

一、CNAS是什么&#xff1f; “CNAS”是China National Accreditation Service for Conformity Assessment&#xff08;ZG合格评定国家认可委员会&#xff09;的英文缩写。zg合格评定国家认可委员会的规定&#xff0c;由国家认证认可监督管理委员会批准设立并授权的国家认可机…

在群晖上安装Nextcloud-AIO详解

本文是应网友 刘源 的要求折腾的&#xff1b; 什么是 Nextcloud AIO &#xff1f; Nextcloud AIO 就是 Nextcloud All-in-One &#xff0c;顾名思义就是一个 Nextcloud 的 All-in-One 版本&#xff0c;这是一个基于 Docker 的项目&#xff0c;它允许仅安装一个容器&#xff0c;…

苹果铃声怎么设置?3招教你设置个性化铃声!

苹果手机因其颜值、性能与生态吸引了一大批粉丝用户。在拿到新手机后&#xff0c;大家第一时间就是给手机设置好听的铃声。那么&#xff0c;苹果铃声怎么设置呢&#xff1f;手机铃声能设置成自己喜欢的歌曲吗&#xff1f;当然可以了&#xff01;本文将给大家介绍3种轻松设置苹果…