利用Kubespray安装生产环境的k8s集群-实施篇

如何安装生产环境下的高可用k8s集群

接上篇

规划k8s集群

本次我预备了6台VMs, 1台作为Jump server,用来部署Ansible并负责在其他5台设备上部署k8s。这台服务器后续可能还要做nfs server。
3台做master,为了给etcd做高可用。(Etcd采用RAFT的算法,需要至少3台服务器部署才可以实现高可用);2台做worker,后续再加几台做worker,同时实践下如何用Kubespray做k8s集群的升级和变更。
总结, 1台堡垒机,k8s cluter:3台master,2台worker。

堡垒机安装必要组件

以下安装均以名叫bill的用户进行,非root用户。后续运行ansible到其他服务器也是bill用户,所以需要其他所有服务器也有bill用户,切bill用户可以免密码进行sudo。
不要嫌麻烦就哪里都用root,这不是个好习惯。

     sudo apt updatesudo apt install -y python3-pip sshpass git #安装一些必须插件sudo pip install ansible  sudo apt install ansible -y  #pip 还是apt安装ansible均可,ansible的版本不能太低,Kubersray安装前会对ansible,python,jinjia等等进行版本检测的。git clone https://github.com/kubernetes-sigs/kubespray.git #我看大部分文档在这里会使用 --recurse-submodules 相关git参数,我没用也没出问题。# submodules相关git参数,是用来完整下载git项目的独立的以另一个git repo存在的子项目的。# 整个kuberspray 就是需要的Kubespray 仓库。具体的目录结构和每个目录的功能,我想有机会的时候单独写一篇。cd kubespray/pip install -r requirements.txt --break-system-packages # --break-system-packages 这个是我加上去的, 确保kubespray可以安装到必须的版本的package,即使整个版本和系统本身冲突。echo $PATH=$PATH:/home/bill/.local/bin #一时不讲究,直接git clone到~目录就装好了。所以加以下$PATHcd inventory/ # inventory 目录下修改inventory.ini 文件,很重要!让Ansible知道你的k8s的集群服务器结构。cp -r inventory/sample inventory/mycluster  # 将sample样本目录cp一个出来,命名为你的clster名字(名字不重要,可不可靠这里的Naming Convention)vim inventory.ini # 稍后贴出我修改好的inventory.ini 文件# 以下为在Ansible server的bill账户下生成一个ssh证书pair,并设置让其他k8s服务器(Ansible server的被管理服务器或client)ssh-keygen -t rsa -b 2048ssh-copy-id bill@192.168.4.34ssh-copy-id bill@192.168.4.35ssh-copy-id bill@192.168.4.36ssh-copy-id bill@192.168.4.37ssh-copy-id bill@192.168.4.3ssh bill@192.168.4.36 # 测试是否可以从Ansible server 免密以相同账号登陆ansible client。 
#以上就完成了最初的准备,接着就可以开始安装了。

inventory.ini
整个文件非常重要,一定要确保配置正确。

# 先定义所有的服务器,指明了ansible通过ssh登陆client时使用bill用户, ansible_become=yes 意思是bill用户可以sudo执行命令,为了方便我采用了client上设置bill可以免密码sudo。 你也可以用其他方法来实现。
[all]
master-1 ansible_host=192.168.4.36 ansible_user=bill ansible_become=yes
master-2 ansible_host=192.168.4.34 ansible_user=bill ansible_become=yes
master-3 ansible_host=192.168.4.35 ansible_user=bill ansible_become=yes
worker-1 ansible_host=192.168.4.37 ansible_user=bill ansible_become=yes
worker-2 ansible_host=192.168.4.38 ansible_user=bill ansible_become=yes[kube_control_plane]
master-1
master-2
master-3[kube_node]
worker-1
worker-2[etcd]
master-1
master-2
master-3[calico_rr]
# 整个后续讲什么是Calico 的 RR
[k8s_cluster:children] 
kube_control_plane
kube_node

安装正式开始

安装确保swapoff和ip_forward等基本配置

既然Ansible已经就绪了,当然是通过Ansible来了,也顺手写个自己的playbook。(现在Chaggpt 已经是相当的牛叉了,我的playbook就是直接说需求让它写的,我一句没改)。
将你写好的playbook 最好放到kubespray的playbooks目录下,和其他kuverspray自己的playbook放一起。
pre_install_k8s.yml

---
- name: Disable Swap and Enable IPv4 Forwardinghosts: allbecome: truetasks:# 禁用 Swap- name: Temporarily disable swapansible.builtin.command: swapoff -a- name: Ensure swap entries are commented out in /etc/fstabansible.builtin.replace:path: /etc/fstabregexp: '^([^#].*swap.*)$'replace: '# \1'- name: Verify swap is disabledansible.builtin.shell: free -h | grep Swapregister: swap_status- debug:msg: "Swap status after disabling: {{ swap_status.stdout }}"# 启用 IPv4 网络转发- name: Temporarily enable IPv4 forwardingansible.builtin.command: sysctl -w net.ipv4.ip_forward=1- name: Persistently enable IPv4 forwardingansible.builtin.lineinfile:path: /etc/sysctl.confregexp: '^net.ipv4.ip_forward'line: 'net.ipv4.ip_forward = 1'create: yes-

把你写好的playbook 运行起来,顺便排排错,热好身就准备一键安装k8s集群了。

ansible-playbook pre_install_k8s.yml -i ../inventory/mycluster/inventory.ini # -i 指定使用特定的inventory文件, 主动加上吧,省得出麻烦。

通过Kubespray 安装Kubernets Cluster

详细看到这里的都是真爱,也相信你已经在上一步执行ansible-palybook时候成功了。接下来要运行ansible来安装整个的kubernets集群,只需要一条命令就可以了。

ansible-playbook -i ../inventory/mycluster/inventory.ini cluster.yml # 在playbooks目录下,执行一个名叫cluster.yml的palybook,接下来几十分钟你喝杯咖啡再回来验收就可以了。(理想还是要有的, 万一实现了呢)

这样整个安装就结束了。下一篇我们做个安装排错,看看我们最后安装过程中常见的错误和解决办法;同时我们对装好未修正过的k8s集群做个验收评估。

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

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

相关文章

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程(三)里面的相关配置,不然你可…

【GitHub】登录时的2FA验证

一、如何进行2FA认证 1.在你的浏览器中下载 Authenticator身份验证插件 2.使用身份验证器添加凭证 2.1 使用身份验证器扫描验证二维码 选择扫描二维码

目标跟踪算法发展简史

单目标跟踪(Single Object Tracking,SOT)是计算机视觉领域中的一个重要研究方向,旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展,单目标跟踪算法经历了从经典方法到深度学习的演…

【Java设计模式-7】责任链模式:我是流水线的一员

一、责任链(Chain of Responsibility Patten)模式是个啥? 想象一下,你要请假。你先把请假申请交给了小组长,小组长一看,这事儿他能决定,就直接批了。要是小组长觉得这事儿得往上汇报&#xff0…

QT调用OpenSceneGraph

OSG和osgQt编译教程,实测通过 一、下载OpenSceneGraph OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph 二、使用CMAKE编译OpenSceneGraph 1.打开cmake,配置源代码目录 2. CMAKE_INSTALL_PREFIX设置为install文件夹,生…

数据结构与算法面试专题——引入及归并排序

数据结构与算法引入 我们都知道数据结构与算法很重要,甚至会将其称为程序员的“内功”,但是我们花了很多时间学的算法和数据结构,好像就只是为了应对算法面试,对日常的开发工作没有什么帮助。 这点对于我们数据工程师来说&#…

《鸿蒙 HarmonyOS 应用开发从入门到精通(第 2 版)》学习笔记 ——HarmonyOS 环境搭建之安装DevEco Studio

作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: 高效智能代码编辑:支持Java、XML、ArkTS、JS、C/C等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、…

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一,它为用户提供了丰富的编辑功能来美化和保护文档。其中,“水印”是一种特别有用的功能,它可以用于标识文档状态(如“草稿”或“机密”)、公司标志或是版权信息等。本…

学习记录之原型,原型链

构造函数创建对象 Person和普通函数没有区别,之所以是构造函数在于它是通过new关键字调用的,p就是通过构造函数Person创建的实列对象 function Person(age, name) {this.age age;this.name name;}let p new Person(18, 张三);prototype prototype n…

logback日志自定义占位符

前言 在大型系统运维中,很大程度上是需要依赖日志的。在java大型web工程中,一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用,比如线程号【%t】、时间【%d】、日志等级【%p】,…

Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅

引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中&#xff0c…

数据恢复常用方法(三)如何辨别固态硬盘故障类型

数据恢复首先需要辨别固态硬盘故障类型,只有先确认故障类型,才能进行下一步动作 如下是一种常见的场景,固态硬盘无法识别,接入电源与数据线,电脑的磁盘管理不显示任何信息。 第一步:确认硬件状态&#xff…

【大数据】机器学习----------强化学习机器学习阶段尾声

一、强化学习的基本概念 注: 圈图与折线图引用知乎博主斜杠青年 1. 任务与奖赏 任务:强化学习的目标是让智能体(agent)在一个环境(environment)中采取一系列行动(actions)以完成一个…

StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级

自 StarRocks 3.0 起,社区明确了以 Lakehouse 为核心的发展方向。Lakehouse 的价值在于融合数据湖与数据仓库的优势,能有效应对大数据量增长带来的存储成本压力,做到 single source of truth 的同时继续拥有极速的查询性能,同时也…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库(Monorepo)搭建指南:从零开始 单体仓库(Monorepo)是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置,并简化依赖管理。本文将通过实际代码示例&#xff0…

基于python的博客系统设计与实现

摘要:目前,对于信息的获取是十分的重要,我们要做到的不是裹足不前,而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能,博主在发表文章后,互联网上的其他用户便可以看到,…

Spring Boot AOP实现动态数据脱敏

依赖&配置 <!-- Spring Boot AOP起步依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>/*** Author: 说淑人* Date: 2025/1/18 23:03* Desc…

SparkSQL函数综合实践

文章目录 1. 实战概述2. 实战步骤2.1 创建项目2.2 添加依赖2.3 设置源目录2.4 创建日志属性文件2.5 创建hive配置文件2.6 创建数据分析对象2.6.1 导入相关类2.6.2 创建获取Spark会话方法2.6.3 创建表方法2.6.4 准备数据文件2.6.5 创建加载数据方法2.6.6 创建薪水排行榜方法2.6.…

ElasticSearch DSL查询之排序和分页

一、排序功能 1. 默认排序 在 Elasticsearch 中&#xff0c;默认情况下&#xff0c;查询结果是根据 相关度 评分&#xff08;score&#xff09;进行排序的。我们之前已经了解过&#xff0c;相关度评分是通过 Elasticsearch 根据查询条件与文档内容的匹配程度自动计算得出的。…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…