基于centos7的k8s最新版v1.29.2安装教程

k8s概述

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

Kubernetes 架构

 

K8s安装步骤

1、环境要求及准备

  • 一台或多台运行兼容 deb/rpm 的 Linux 操作系统的计算机;例如:Ubuntu 或 CentOS。
  • 每台机器 2 GB 以上的内存,内存不足时应用会受限制。
  • 用作控制平面节点的计算机上至少有 2 个 CPU。
  • 集群中所有计算机之间具有完全的网络连接。你可以使用公共网络或专用网络。

 准备三台虚拟机

节点IP节点角色
192.168.42.138k8s-master
192.168.42.139k8s-node01
192.168.42.140k8s-node02

关闭防火墙firewalld

systemctl stop firewalld

systemctl disable firewalld

关闭selinux

setenforce 0   #临时关闭

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config   #永久关闭

时间进行同步

yum install ntpdate -y 

ntpdate cn.pool.ntp.org (如果服务器时间不一致才做)

关闭swap

swapoff -a                                   # 临时

sed -i 's/.swap./#&/' /etc/fstab     #永久注释swap开机挂载行

三台节点配置主机名解析

cat >> /etc/hosts << EOF 
192.168.42.138  k8s-master
192.168.42.139  k8s-node01
192.168.42.140  k8s-node02
EOF

设置主机名

主机名根据自己的主机去使用这条命令,注意要跟上面的主机名解析保持一致

hostnamectl set-hostname xxxx

 转发 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

通过运行以下指令确认 br_netfilter 和 overlay 模块被加载:

lsmod | grep br_netfilter
lsmod | grep overlay

通过运行以下指令确认 net.bridge.bridge-nf-call-iptablesnet.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

 

2、选择容器运行时

容器运行时是负责运行容器的软件。

在集群内每个节点上都需要安装一个 容器运行时 以使 Pod 可以运行在上面。

常见的容器运行时有:

  • containerd
  • CRI-O
  • Docker Engine
  • Mirantis Container Runtime

 说明:

v1.24 之前的 Kubernetes 版本直接集成了 Docker Engine 的一个组件,名为 dockershim。 这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。

v1.20版本之后,docker已经从k8s中剥离出来了,但是官方依然支持,只是不再是必须安装的组件。

下面的表格包括被支持的操作系统的已知端点。

运行时Unix 域套接字
containerdunix:///var/run/containerd/containerd.sock
CRI-Ounix:///var/run/crio/crio.sock
Docker Engine(使用 cri-dockerd)unix:///var/run/cri-dockerd.sock

这里我们依旧选择当下最流行的Docker引擎做容器运行时:

Docker Engine安装

这里使用rpm包管理工具安装docker最新版,也是官方文档提供的安装方案

注意:三台节点都需要容器运行时,也就是都要安装docker

Install Docker Engine on CentOS | Docker Docs

2.1 设置镜像仓库
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

这两个命令执行完后,会在系统上自动下载对应的docker-ce.repo文件。

2.2 安装docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.3 启动服务
sudo systemctl start docker

镜像加速器

Daocloud公司建议使用,提高镜像下载速度,使用k8s官方默认的cgroup的

#vi /etc/docker/daemon.json 
{ 
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"], 
  "exec-opts":["native.cgroupdriver=systemd"] 
} 
重启docker 
#systemctl restart docker 

3、安装 kubeadm、kubelet 和 kubectl

  • kubeadm:用来初始化集群的指令。

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

  • kubectl:用来与集群通信的命令行工具。

注意:三台节点都安装

3.1 添加 Kubernetes 的 yum 仓库

# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

3.2 安装 kubelet、kubeadm 和 kubectl,并启用 kubelet 以确保它在启动时自动启动

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

 

4、使用 kubeadm 创建集群

4.1 初始化控制平面节点

控制平面节点是运行控制平面组件的机器, 包括 etcd(集群数据库) 和 API 服务器 (命令行工具 kubectl 与之通信)。

要初始化控制平面节点,请运行:

kubeadm init <args>

 实际命令:

注意:这个初始化命令只在k8s-master节点执行

kubeadm init --apiserver-advertise-address=192.168.42.138 --control-plane-endpoint=k8s-master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.29.2 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16

参数解释:

--apiserver-advertise-address 可用于为控制平面节点的 API 服务器设置广播地址

--control-plane-endpoint 可用于为所有控制平面节点设置共享端点,允许 IP 地址和可以映射到 IP 地址的 DNS 名称。

--image-repository 声明使用阿里云官方镜像

--kubernetes-version 指定k8s安装的版本,这里我安装最新的 

--service-cidr 集群内部虚拟网络,Pod统一访问入口

--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

 初始化过程

kubeadm init 首先运行一系列预检查以确保机器为运行 Kubernetes 准备就绪。 这些预检查会显示警告并在错误时退出。然后 kubeadm init 下载并安装集群控制平面组件。这可能会需要几分钟。

 完成之后你应该看到:

 要使非 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

记录 kubeadm init 输出的 kubeadm join 命令。 你需要此命令将节点加入集群。

4.2 将节点加入集群

在其他从节点上执行如下命令,这个命令的token以你的虚拟机kubeadm init为准

139执行:

 140执行:

 

 4.3 验证安装结果

提示使用kubectl get nodes在控制节点查看从节点的加入情况,当然其他节点也可以执行

在139执行命令报错如下:

 出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行

解决办法

1.将主节点(master节点)中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下:

2.从节点配置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

3.立即生效

source ~/.bash_profile

两个node执行后则再指令kubectl get nodes命令则都可以返回

注意:以前老版本的Roles字段显示master,新版本已经被control-plane替代

 

5、安装 Pod 网络附加组件

[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

5、验证安装结果

出现上述结果,说明我们已经安装成功!

也可通过查看kube-system名字空间下的pod资源判断

当所有组件状态都是running时才能确保k8s正常使用。

过程中报错

1、CNI网络插件未初始化

"Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized"

 解决方案:

三台节点都重启kubelet进程后再查看node状态

 

2、无法从API端点获取集群ConfigMap信息

Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get config map: Get "https://master:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s": dial tcp: lookup master on 223.5.5.5:53: no such host

这个报错是由于我之前把kubeadm init命令那里的--control-plane-endpoint=master,我实际上是k8s-master,导致主机名解析失败,找不到https://master:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s这个api端点,那必然会报错,修改正确后,使用kubeadm reset重置,然后重新Init就好了

3、拉取 registry.k8s.io/pause:3.6 镜像失败 导致sandbox 创建不了而报错 

报错:detected that the sandbox image "registry.k8s.io/pause:3.6" of the container runtime is inconsistent with that used by kubeadm.  It is recommended that using "registry.aliyuncs.com/google_containers/pause:3.9" as the CRI sandbox image.

 解决方案:

### 三台节点执行如下命令 生成 containerd 的默认配置文件
containerd config default > /etc/containerd/config.toml 
### 查看 sandbox 的默认镜像仓库在文件中的第几行 
cat /etc/containerd/config.toml | grep -n "sandbox_image"  
### 使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 registry.aliyuncs.com/google_containers/pause:3.9/pause:3.6
vim /etc/containerd/config.toml  
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9/pause:3.6"  
### 重启 containerd 服务  
systemctl daemon-reload  
systemctl restart containerd.service 

修改完成后记得重启containerd服务

 

4、k8s初始化int时出现Initial timeout of 40s passed

可以先使用以下命令查看k8s的启动日志:

systemctl status kubelet

或使用以下命令查看最近的k8s日志:

journalctl -xeu kubelet

具体参考:k8s初始化int时出现Initial timeout of 40s passed | 思维网络|站长博客|陈配锋

 

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

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

相关文章

CentOS无法解析部分网站(域名)

我正在安装helm软件&#xff0c;参考官方文档&#xff0c;要求下载 get-helm-3 这个文件。 但是我执行该条命令后&#xff0c;报错 连接被拒绝&#xff1a; curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 # curl: (7) Fai…

深入探索Java中的MarkWord与锁优化机制——无锁、偏向锁、自旋锁、重量级锁

引言 在Java并发编程领域&#xff0c;有效管理对共享资源的访问显得尤为关键。为了保障线程安全&#xff0c;Java虚拟机&#xff08;JVM&#xff09;引入了一系列精妙的锁机制&#xff0c;这其中的核心概念就是Java对象头中的MarkWord。本文将详尽解析MarkWord的作用&#xff…

基于Centos7部署OceanBase4.2版本单副本集群

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

1.绪论

目录 1.1 Web原理基础 1.1.1 Internet与万维网 1.1.2 Web架构 1.2 Web前端技术基础 1.2.1 HTML技术 1.2.2 CSS技术 1.2.3 JavaScript技术 1.3 Web前端新技术 1.3.1 HTML5技术 1.3.2 CSS3技术 1.3.3 jQuery技术 1.4 Web开发工具 1.1 Web原理基础 1.1.1 Internet与万…

Java实现PDF文字内容识别,结合OCR实现PDF图片实现

使用插件&#xff1a;UMI-OCR、PDFBOX 实现思路&#xff1a;通过PDFBOX识别PDF文字&#xff0c;如果是图片&#xff0c;则识别不出来&#xff0c;再调用OCR进行识别返回文字&#xff1b;OCR识别较慢&#xff0c;长图识别不出来&#xff0c;目前HTTP方式只支持图片格式&#xf…

2024年【流动式起重机司机】考试题及流动式起重机司机模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 流动式起重机司机考试题参考答案及流动式起重机司机考试试题解析是安全生产模拟考试一点通题库老师及流动式起重机司机操作证已考过的学员汇总&#xff0c;相对有效帮助流动式起重机司机模拟考试题学员顺利通过考试。…

008:安装Docker

安装Docker 如果不太熟悉Linux命令&#xff0c;不想学习Linux命令&#xff0c;可以直接看文末NAS面板章节&#xff0c;通过面板&#xff0c;像使用Window一样操作NAS。 一、安装 Docker 1.安装 Docker wget -qO- https://get.docker.com/ | sh2.启动 Docker 服务 sudo sys…

Ubuntu系统的安装及基础操作

目录 一、VMware虚拟机安装Ubuntu20.04过程 1、安装前的准备工作 2、VMware虚拟机创建Ubuntu操作系统 步骤一&#xff1a;以管理员的身份运行VMware虚拟机 步骤二&#xff1a;新建虚拟机 步骤三&#xff1a;选择类型配置 步骤四&#xff1a;选择安装客户机操作系统 步骤…

100W-150W电阻器-TO-247模压厚膜电阻(1)

EAK封装的TO-247功率电阻器为设计工程师提供稳定的晶体管式封装的大功率电阻器件&#xff0c;功率为100W-150W。这些电阻器专为需要精度和稳定性的应用而设计。该电阻器采用氧化铝陶瓷层设计&#xff0c;可将电阻元件和安装片分开。 EAK模压TO-247厚膜功率电阻器 这种结构提供了…

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…

react04- mvc 、 mvvm

MVC与MVVM stackoverflow论坛网站 react前端框架 使用框架前&#xff1a; 操作dom > js获取dom元素&#xff0c;事件侦听&#xff0c;修改数据&#xff0c;设置样式。。。 操作dom问题: 直接操作dom&#xff0c;会造成大量的回流、重绘&#xff0c;消耗大量性能操作起来也…

物联网终端telegraf采集设备信息

背景 低功耗设备上资源有限&#xff0c;但又比较重要。对其的管理难度很大&#xff0c;有些时候又必须时刻了解其运行状况。我们自然想到的是能否有办法监控它呢&#xff1f;当时是有的&#xff01;而且很成熟的解决方案。TICK技术栈&#xff0c;那TICK是什么呢&#xff1f; TI…

云仓酒庄2024年培训专业化:强化销售与品酒技能,酒业新动态

云仓酒庄2024年培训专业化&#xff1a;强化销售与品酒技能&#xff0c;共筑酒业新动态 在风云变幻的市场竞争中&#xff0c;云仓酒庄始终秉持着创新、进取的理念&#xff0c;不断探索与实践&#xff0c;以推动酒业行业的持续健康发展。2024年&#xff0c;云仓酒庄在培训专业化…

SpringBoot(自定义转换器+处理Json+内容协商)

文章目录 1.自定义转换器1.代码实例1.save.html2.编写两个bean1.Car.java2.Monster.java 3.WebConfig.java 配置类来自定义转换器4.测试 2.注意事项和细节1.debug查看转换器总数1.打断点2.执行到断点后&#xff0c;选左边的1923.可以看出&#xff0c;加上自定义的转换器一共125…

Day63:WEB攻防-JS应用算法逆向三重断点调试调用堆栈BP插件发包安全结合

目录 前置知识 JS调试分析 JS分析调试结合Burp JS分析调试知识点&#xff1a; 1、JavaScript-作用域&调用堆栈 2、JavaScript-断点调试&全局搜索 3、JavaScript-Burp算法模块使用 前置知识 JS加密数据走向 浏览器调试 1、作用域&#xff1a;&#xff08;本地&全…

论文阅读——RingMo

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling 与自然场景相比&#xff0c;RS图像存在以下困难。 1&#xff09;分辨率和方位范围大&#xff1a;受遥感传感器的影响&#xff0c;图像具有多种空间分辨率。此外&#xff0c;与自然图像的实例通常由于重…

《1w实盘and大盘基金预测 day3》

上贴指数预测拉满&#xff0c;上证最低位置和最高位置预测的八九不离十&#xff0c;个人预测最高3062实际3060&#xff0c;最低3017实际3020 昨天的预测 3017-3031-3062 低开反抽&#xff0c;回落下杀 明天看是否能阳包阴&#xff0c;得看蓝筹、证券发力。&#xff08;AI板块…

对OceanBase进行 sysbench 压测前,如何用 obdiag巡检

有一些用户想对 OceanBase 进行 sysbench 压测&#xff0c;并向我询问是否需要对数据库的各种参数进行调整。我想起有一个工具 obdiag &#xff0c;具备对集群进行巡检的功能。因此&#xff0c;我正好借此机会试用一下这个工具。 obdiag 功能的比较丰富&#xff0c;详细情况可参…

【机器学习300问】37、什么是迁移学习?

一、什么是迁移学习&#xff1f; &#xff08;1&#xff09;它的出现是为了解决什么问题&#xff1f; 迁移学习是为了解决深度学习中由于数据不足导致的学习效果受限以及跨领域知识的有效利用等问题而发展起来的一种重要技术手段。 ① 缺少训练数据 在许多实际应用中&#xf…

手动创建线程池各个参数的意义?

今天我们学习线程池各个参数的含义&#xff0c;并重点掌握线程池中线程是在什么时机被创建和销毁的。 线程池的参数 首先&#xff0c;我们来看下线程池中各个参数的含义&#xff0c;如表所示线程池主要有 6 个参数&#xff0c;其中第 3 个参数由 keepAliveTime 时间单位组成。…