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

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

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux
    发行版以及一些不提供包管理器的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。 CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
  • 开启机器上的某些端口。请参见这里了解更多详细信息。
  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config#关闭swapswapoff -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
EOFsudo 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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOFsudo 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
EOFchmod +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_METHODvalue: "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.rhkb.cn/news/128910.html

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

相关文章

Git 提交时忽略某些文件

Git 提交时忽略某些文件 ①打开项目目录&#xff0c;找到.gitignore文件 ②编辑.gitignore文件&#xff0c;加上要忽略的文件后缀 以上是针对还没有提交过的文件进行过滤 如果已经这些后缀的文件已经提交过&#xff0c;则需要删除远程的该后缀文件 git rm --cached示例&…

Es6中的拓展运算符参数解构在实际项目当中应用

扩展操作符 … 是ES6中引入的&#xff0c;将可迭代对象展开到其单独的元素中,常见的应用场景有:拷贝数组对象,合并数组,参数传递,数组去重,字符串转字符数组,解构变量等 单纯的学习某个技术知识点,很容易的,但是能在实际项目中运用进去,那就不简单了的 单纯的学习某个语言的语法…

【LeetCode-简单题】69. x 的平方根

文章目录 题目方法一&#xff1a;二分查找 题目 方法一&#xff1a;二分查找 假设求8的平方根&#xff0c;那就设置left 0 &#xff0c;right 8&#xff1b; 每次取最中间的元素的平方和8对比&#xff0c;如果大于8&#xff0c;则right mid-1&#xff0c;如果小于8 left mi…

python趣味编程-数独游戏

数独游戏是一个用Python编程语言编写的应用程序。该项目包含可以显示实际应用程序的基本功能。该项目可以让修读 IT 相关课程并希望开发简单应用程序的学生受益。这个Python 数独游戏是一个简单的项目,可用于学习tkinter库的实践。这个数独游戏可以提供Python编程的基本编码技…

JAVASE事件监听

代码&#xff1a; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner;import javax.swing.JButton; import javax.…

PowerBI - 匹配并从另一个表中获取值

我有 2 个表通过列 A 相互连接。我想将列 C 与列 A 匹配并获得列 B 的值。 DAX 函数是 LOOKUPVALUE . MatchedOutput LOOKUPVALUE(Table2[ColB],Table2[ColA],Table1[ColC])这将查找 Table2[ColB] 中的值哪里Table2[ColA]匹配 Table1[ColC] .

信息系统项目管理师(第四版)教材精读思维导图-第十三章项目资源管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图源文件 13.1 管理基础 13.2 管理过程 13.3 规划资源管理 13.4 估算活动资源 13.5…

[Qt]基础数据类型和信号槽

文章目录 1. Qt基本结构1.1 Qt本有项目1.1.1 项目文件&#xff08;.pro&#xff09;1.1.2 main.cpp1.1.3 mainwindow.ui1.1.4 mainwindow.h1.1.5 mainwindow.cpp 1.2 Qt中的窗口类1.2.1基础窗口类1.2.2 窗口的显示 1.3 内存回收 2. Qt中的基础数据类型2.1 基础类型2.2 log输出2…

爬虫系统的核心:如何创建高质量的HTML文件?

在网页抓取或爬虫系统中&#xff0c;HTML文件的创建是一项重要的任务。HTML文件是网页的基础&#xff0c;包含了网页的所有内容和结构。在爬虫系统中&#xff0c;我们需要生成一个HTML文件&#xff0c;以便于保存和处理网页的内容。 在这种情况下&#xff0c;可以使用Java函数…

Spring Boot深度解析:快速开发的秘密

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

C++初阶之模板深化讲解

模板深化讲解 非类型模板模板的特化1.函数模板特化2.类模板特化 模板分离编译1.什么是分离编译2.模板的分离编译 模板总结 非类型模板 非类型模板&#xff08;Non-Type Template&#xff09;是 C 中的一种模板形式&#xff0c;它允许你在模板中传递除了类型以外的其他值&#x…

Leetcode---361周赛

题目列表 2843. 统计对称整数的数目 2844. 生成特殊数字的最少操作 2845. 统计趣味子数组的数目 2846. 边权重均等查询 一、统计对称整数的数目 这题看一眼数据范围&#xff0c;直接就可以开始暴力求解了&#xff0c;按照题目要求模拟就行&#xff0c;代码如下 class Solu…

安装K8s基础环境软件(二)

所有节点执行 1、安装docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl…

19 螺旋矩阵

螺旋矩阵 题解1 循环&#xff08;4个标志——根据顺时针&#xff09;题解2 方向 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 提示&#xff1a; - m matrix.length - n matrix[i].length - 1 < m, n <…

机器学习——boosting之提升树

提升树和adaboost基本流程是相似的 我看到提升树的时候&#xff0c;懵了 这…跟adaboost有啥区别&#xff1f;&#xff1f;&#xff1f; 直到看到有个up主说了&#xff0c;我才稍微懂 相当于&#xff0c;我在adaboost里的弱分类器&#xff0c;换成CART决策树就好了呗&#xff1…

欧科云链与HashKey Exchange达成合作,助力香港虚拟资产合规化

继8月10日 欧科云链 与 华为云 达成合作之后&#xff0c; 今天&#xff0c;欧科云链 又与 Hashkey Exchange 共同宣布正式达成合作&#xff01; 这次与Hashkey达成合作&#xff0c;双方又将在Web3行业中谱写怎样的故事&#xff1f; 9月6日&#xff0c;欧科云链控股有限公司&…

python关闭指定进程以excel为例

先说下环境&#xff1a; Excel版本&#xff1a; Python2.7.13和Python3.10.4并存。 2、打开两个excel工作簿 看进程是这样的&#xff1a; 3、用python编程kill进程 # -*- coding: utf-8 -*- import os proc_nameEXCEL.EXE if __name__ __main__:os.system(taskkill /im {} /…

CentOS 8 通过YUM方式升级最新内核

CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…

idea:java: Compilation failed: internal java compiler error

java: Compilation failed: internal java compiler error错误 检查下面2个即可&#xff1a;

bit、bin 、mcs文件区别

FPGA里面的可执行文件都涉及到 *.bit&#xff0c; *.mcs&#xff0c; *.bin 和 *.elf。 bit文件 bit 文件一般用于JTAG在线进行调试的时候&#xff0c;是把bit文件是烧写到FPGA中进行在线调试。 bin文件 bin 文件是二进制文件&#xff0c;按顺序只包含原始字节流&#xff0c…