利用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,一经查实,立即删除!

相关文章

SQL中字符串截取函数(substring)

1.left(name,4)截取左边的四个字符 案例 select left(20240428,4) 结果 2024 2.right(name,2)截取右边的2个字符 案例 select right(20240428,2) 结果 28 3.substring(name,5,3)截取name这个字段从第五个字…

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

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

【GitHub】登录时的2FA验证

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

目标跟踪算法发展简史

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

Flink 使用 Kafka 作为数据源时遇到了偏移量提交失败的问题

具体的错误日志 21:43:57.069 [Kafka Fetcher for Source: Custom Source -> Map -> Filter (1/1)#2] ERROR org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientIdconsumer-my-group-6, groupIdmy-group] Offset commit failed on pa…

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

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

面试-字符串1

应用 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 规律:第i个字符串 第i-1个字符串取反 第i-1个字符串,其中B、R互为相反字符。求第n个字符串的第k个字符为多少?n从…

C# 通用缓存类开发:开启高效编程之门

引言 嘿,各位 C# 开发者们!在当今快节奏的软件开发领域,提升应用程序的性能就如同给跑车装上涡轮增压,能让你的项目在激烈的竞争中脱颖而出。而构建一个高效的 C# 通用缓存类,无疑是实现这一目标的强大武器。 想象一…

QT调用OpenSceneGraph

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

人工智能领域单词:英文解释

目录 1、前言2、单词组1:15个3、单词组2:15个4、单词组3:15个5、单词组4:15个6、单词组5:15个 1、前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦&#xff0…

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

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

《鸿蒙 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…

Spring Boot + Netty + WebSocket 实现消息推送

1、关于Netty Netty 是一个利用 Java 的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…

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

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

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

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

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

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