当前位置: 首页 > news >正文

Kubespray部署企业级高可用K8S指南

目录

  • 前言
  • 1 K8S集群节点准备
    • 1.1 主机列表
    • 1.2 kubespray节点python3及pip3准备
      • 1.2.1. 更新系统
      • 1.2.2. 安装依赖
      • 1.2.3. 下载Python 3.12源码
      • 1.2.4. 解压源码包
      • 1.2.5. 编译和安装Python
      • 1.2.6. 验证安装
      • 1.2.7. 设置Python 3.12为默认版本(可选)
      • 1.2.8. 安装pip
      • 1.2.9. 验证pip
    • 1.3 kubespray源文件获取
    • 1.4 kubespray环境准备
    • 1.5 配置主机清单
    • 1.6 准备K8S集群配置文件
    • 1.7 准备k8s集群插件文件
    • 1.8 设置kubespray主机免密登录到其他集群主机
      • 1.8.1. 在kubespray主机生成ssh密钥
      • 1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机
      • 1.8.3. 在K8S集群节点添加sysops用户指行授权
    • 1.9 k8s集群主机安全设置
    • 1.10 k8s集群主机路由转发设置
    • 1.11 禁用swap分区
  • 2 k8s集群部署及可用性验证
    • 2.1 k8s集群部署
    • 2.2 查看集群节点的配置是否已就绪
    • 2.3 验证集群部署成功
  • 3 移除节点
  • 4 增加节点
  • 5 清理k8s集群

前言

Kubespray 是一个自由开源的工具,它提供了 Ansible 剧本(playbook) 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。

它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。

1 K8S集群节点准备

1.1 主机列表

主机名称IP地址硬件配置主机角色
node1192.168.191.133/244C4G1Tmaster
node2192.168.191.129/244C4G1Tmaster
node3192.168.191.128/244C4G1Tmaster
node4192.168.191.130/244C4G1Tworker
node5192.168.191.132/244C4G1Tworker
kubespray192.168.191.131/244C4G1Tansible

所有的node节点均为centos9
在这里插入图片描述

1.2 kubespray节点python3及pip3准备

此操作只需要在 kubespary 节点!!!

1.2.1. 更新系统

首先,确保系统是最新的:

sudo dnf update -y

1.2.2. 安装依赖

安装编译Python所需的依赖包:

sudo dnf install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel sqlite-devel readline-devel tk-devel xz-devel libuuid-devel

1.2.3. 下载Python 3.12源码

前往Python官网下载Python 3.12的源码包,或使用wget直接下载:

wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz

1.2.4. 解压源码包

解压下载的源码包:

tar -xvf Python-3.12.0.tgz

1.2.5. 编译和安装Python

进入解压后的目录并编译安装Python:

cd Python-3.12.0
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall

make altinstall 用于避免覆盖系统自带的Python 2.x或3.x版本。

1.2.6. 验证安装

安装完成后,验证Python 3.12是否安装成功:

python3.12 --version

1.2.7. 设置Python 3.12为默认版本(可选)

如果你希望将Python 3.12设置为默认的Python版本,可以更新alternatives

sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
sudo alternatives --config python3

1.2.8. 安装pip

确保pip已安装:

python3.12 -m ensurepip --upgrade

1.2.9. 验证pip

验证pip是否安装成功:

pip3.12 --version

如果日志提醒升级pip也可以根据提示命令去升级到提示版本
下面是我kuberspray主机上的版本
在这里插入图片描述

1.3 kubespray源文件获取

此操作只需要在 kubespary 节点!!!

创建个空目录,我本地创建的目录叫workspace
在这里插入图片描述

在workspace下通过kubespray官网下载代码
在这里插入图片描述

下载完后查看目录
在这里插入图片描述
本篇部署是基于release-2.26这个版本部署的,所以切换到对应的版本

git checkout release-2.26
git branch

在这里插入图片描述

1.4 kubespray环境准备

此操作只需要在 kubespary 节点!!!

kubespray部署所需要的环境及配置说明在kubespray/requirements.txt这个文件下
在这里插入图片描述

使用pip进行下载

pip3 install -r requirements.txt

下载一定要注意报错!!确保所有的环境都成功安装!!

查看ansible是否安装成功,这个是重中之重!

ansible --version

在这里插入图片描述

1.5 配置主机清单

此操作只需要在 kubespary 节点!!!

inventory/sample这个文件夹是一个样例,我们拷贝一份叫mycluster,再进行配置

cp -rfp inventory/sample inventory/mycluster

声明集群ip,这里替换成你的master及node的节点ip

declare -a IPS=(192.168.191.133 192.168.191.129 192.168.191.128 192.168.191.130 192.168.191.132)

创建主机清单

CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

上面的命令会给我们生成配置到inventory/mycluster/hosts.yaml这个文件下,这个就是主机清单

[root@kubespray kubespray]# ls inventory/mycluster/
group_vars  inventory.ini  patches[root@kubespray kubespray]# CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}DEBUG: Adding group all
DEBUG: Adding group kube_control_plane
DEBUG: Adding group kube_node
DEBUG: Adding group etcd
DEBUG: Adding group k8s_cluster
DEBUG: Adding group calico_rr
DEBUG: adding host node1 to group all
DEBUG: adding host node2 to group all
DEBUG: adding host node3 to group all
DEBUG: adding host node4 to group all
DEBUG: adding host node5 to group all
DEBUG: adding host node1 to group etcd
DEBUG: adding host node2 to group etcd
DEBUG: adding host node3 to group etcd
DEBUG: adding host node1 to group kube_control_plane
DEBUG: adding host node2 to group kube_control_plane
DEBUG: adding host node1 to group kube_node
DEBUG: adding host node2 to group kube_node
DEBUG: adding host node3 to group kube_node
DEBUG: adding host node4 to group kube_node
DEBUG: adding host node5 to group kube_node
[root@kubespray kubespray]# ls inventory/mycluster/
group_vars  hosts.yaml  inventory.ini  patches

这个清单还不正确,让我们查看并修改一下

vim inventory/mycluster/hosts.yaml

在这里插入图片描述
核对一下master节点和work节点是否符合要求,不符合进行对应的调整

1.6 准备K8S集群配置文件

此操作只需要在 kubespary 节点!!!

修改k8s的集群的配置文件

vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml

在这里插入图片描述
这里有一些集群的配置,确保这里的版本是v1.28.0,如果不是请修改为该版本,因为我们使用的是kubespray的release-2.26版本

1.7 准备k8s集群插件文件

此操作只需要在 kubespary 节点!!!

要启用 Kuberenetes 仪表板和入口控制器等插件,请在文件inventory/mycluster/group_vars/k8s_cluster/addons.yml 中将参数设置为已启用

根据业务自身去进行修改

vim inventory/mycluster/group_vars/k8s_cluster/addons.yml

在这里插入图片描述
我这里只开启了helm和dashboard

1.8 设置kubespray主机免密登录到其他集群主机

1.8.1. 在kubespray主机生成ssh密钥

[root@kubespray ~]# ssh-keygen

1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机

下面的过程会有页面交互,输入yes后还会验证目标主机的密码,输入即可

[root@kubespray ~]# ssh-copy-id root@192.168.191.133
[root@kubespray ~]# ssh-copy-id root@192.168.191.129
[root@kubespray ~]# ssh-copy-id root@192.168.191.128
[root@kubespray ~]# ssh-copy-id root@192.168.191.130
[root@kubespray ~]# ssh-copy-id root@192.168.191.132

成功后直接ssh任何集群主机无需密码登录即可,这一步是保证ansible成功部署的关键!
在这里插入图片描述

1.8.3. 在K8S集群节点添加sysops用户指行授权

⬇️此操作需要在集群中的所有节点!!!

echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops

1.9 k8s集群主机安全设置

此操作只需要在 kubespary 节点!!!

ansible all -i inventory/mycluster/hosts.yaml -m shell -a "systemctl stop firewalld && systemctl disable firewalld"

1.10 k8s集群主机路由转发设置

ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | tee -a /etc/sysctl.conf"

1.11 禁用swap分区

ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab &&  swapoff -a"

以上就是所有的环境准备了,只有一步需要在集群节点操作,其他的都在kubespray节点上操作即可!!!

2 k8s集群部署及可用性验证

2.1 k8s集群部署

建议接下来的操作可以开科学上网!!!

执行部署集群的代码

ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

如果上面的部署失败了可以重复执行,如果重复报错相同错误可以在上面的命令后面加-vvv可以打印详细报错。不明白的就复制到ai里!!

部署成功应该是如下这样,没有红色的报错,且failed=0
在这里插入图片描述

2.2 查看集群节点的配置是否已就绪

我们现在登录到集群节点执行获取节点状态的命令

kubectl get nodes

在这里插入图片描述
查看kube配置

kubectl config view

在这里插入图片描述
可以看到集群配置不正确

kubespray生成了一份配置没有替换,我们手动执行一下

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

再去查看kube配置
在这里插入图片描述

2.3 验证集群部署成功

查看node节点

kubectl get nodes

在这里插入图片描述

3 移除节点

不用修改hosts.yaml文件

[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root remove-node.yml -v -b --extra-vars "node=node5"

4 增加节点

需要修改hosts.yaml文件,在inventory/mycluster/hosts.yaml中添加新增节点信息

[root@kubespray kubespray]# cat inventory/mycluster/hosts.yaml
all:hosts:node1:ansible_host: 192.168.10.160ip: 192.168.10.160access_ip: 192.168.10.160node2:ansible_host: 192.168.10.161ip: 192.168.10.161access_ip: 192.168.10.161node3:ansible_host: 192.168.10.162ip: 192.168.10.162access_ip: 192.168.10.162node4:  添加ansible_host: 192.168.10.163ip: 192.168.10.163access_ip: 192.168.10.163node5:  添加ansible_host: 192.168.10.164ip: 192.168.10.164access_ip: 192.168.10.164children:kube_control_plane:hosts:node1:node2:node3:kube_node:hosts:node4:  添加node5:  添加etcd:hosts:node1:node2:node3:k8s_cluster:children:kube_control_plane:kube_node:calico_rr:hosts: {}
[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root scale.yml -v -b

5 清理k8s集群

[root@kubespray ~]# cd kubespray/
[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root reset.yml

相关文章:

Kubespray部署企业级高可用K8S指南

目录 前言1 K8S集群节点准备1.1 主机列表1.2 kubespray节点python3及pip3准备1.2.1. 更新系统1.2.2. 安装依赖1.2.3. 下载Python 3.12源码1.2.4. 解压源码包1.2.5. 编译和安装Python1.2.6. 验证安装1.2.7. 设置Python 3.12为默认版本(可选)1.2.8. 安装pi…...

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…...

优选算法的智慧之光:滑动窗口专题(二)

专栏:算法的魔法世界​​​​​​ 个人主页:手握风云 目录 一、例题讲解 1.1. 最大连续1的个数 III 1.2. 找到字符串中所有字母异位词 1.3. 串联所有单词的子串 1.4. 最小覆盖子串 一、例题讲解 1.1. 最大连续1的个数 III 题目要求是二进制数组&am…...

Kylin麒麟操作系统服务部署 | NFS服务部署

以下所使用的环境为: 虚拟化软件:VMware Workstation 17 Pro 麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服务概述 NFS(Network File System),即网络文件系统。是一种使用于…...

7.1.2 计算机网络的分类

文章目录 分布范围交换方式 分布范围 计算机网络按照分布范围可分为局域网、广域网、城域网。局域网的范围在10m~1km,例如校园网,网速高,主要用于共享网络资源,拓扑结构简单,约束少。广域网的范围在100km,例…...

Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理

1. Nacos 介绍 1.1 什么是 Nacos? Nacos(Naming and Configuration Service)是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理,适用于微服务架构,尤其是基于 Spring Cloud …...

【数据结构】LRUCache|并查集

目录 一、LRUCache 1.概念 2.实现:哈希表双向链表 3.JDK中类似LRUCahe的数据结构LinkedHashMap 🔥4.OJ练习 二、并查集 1. 并查集原理 2.并查集代码实现 3.并查集OJ 一、LRUCache 1.概念 最近最少使用的,一直Cache替换算法 LRU是Least Recent…...

智能合约中权限管理不当

权限管理不当 : 权限管理不当是智能合约中常见的安全问题之一,尤其是在管理员或特定账户被过度赋予权限的情况下。如果合约中的关键功能,如转移资产、修改合约状态或升级合约逻辑,可以被未经授权的实体随意操作,这将构…...

MariaDB Galera 原理及用例说明

一、底层原理 MariaDB Galera 集群是一种基于同步多主架构的高可用数据库解决方案,适合需要高并发、低延迟和数据强一致性的场景。以下是部署和配置 MariaDB Galera 集群的简明步骤: 1. 环境准备 节点要求:至少 3 个节点(奇数节点…...

【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 文章目录 向量数据库的核心价值主流工具横向对比 FAISS:Meta 的高效检索引擎Pinecone:全托管商业…...

关于服务器cpu过高的问题排查

1.定位是哪个程序造成的cpu过高 如果有云服务器,就用云服务器自带的监控功能,查时间段 如果没有,则使用: ps -eo pid,comm,pcpu,pmem,cputime --sort-cputime | head -n 100 2.定位到问题 发现是uwsgi的cpu消耗过高&#xff0…...

Gpt翻译完整版

上一篇文章收到了很多小伙伴的反馈,总结了一下主要以下几点: 1. 说不知道怎么调api 2. 目前只是把所有的中文变成了英文,如果想要做多语言还需要把这些关键字提炼出来成放到message_zh.properties和message_en.properties文件中&#xff0c…...

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点: 容器:Docker 使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能…...

美股回测:历史高频分钟数据的分享下载与策略解析20250305

美股回测:历史高频分钟数据的分享下载与策略解析20250305 在金融分析和投资决策的精细化过程中,美股历史分钟高频数据发挥着至关重要的作用。这些数据以其详尽性和精确性,记录了股票每分钟的价格波动和成交量变化,为投资者提供了…...

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…...

[Python入门学习记录(小甲鱼)]第3章 Python基础知识

第3章 基础知识 前面三章都没啥用,这一章开始进入主题。 3.1 变量 变量顾名思义就是一个可变的量,但Python的变量更像是一个名字,通过这个名字可以找到我们想要的值。注意点如下: Python不需要显式声明,但使用之前…...

某系统webpack接口泄露引发的一系列漏洞

视频教程在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 目录: 信息搜集 未授权敏感信息泄露越权任意用户密码重置 1.越权访问 2.大量敏感信息 越权 任意用户密码重置 信息搜集 这里找到从小穿一条裤子长大的兄弟,要挟他交…...

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用? 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…...

决策树(Decision Tree)基础知识

目录 一、回忆1、*机器学习的三要素:1)*函数族2)*目标函数2.1)*模型的其他复杂度参数 3)*优化算法 2、*前处理/后处理1)前处理:特征工程2)后处理:模型选择和模型评估 3、…...

Nat Mach Intell | AI分子对接算法评测

《Nature Machine Intelligence》发表重磅评测,系统评估AI与物理方法在虚拟筛选(VS)中的表现,突破药物发现效率瓶颈。 核心评测体系:三大数据集 研究团队构建了三个新型测试集: TrueDecoy:含14…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...