《Kubernetes部署篇:Ubuntu20.04基于外部etcd+部署kubernetes1.24.16集群(多主多从)》

news2024/12/23 9:41:54

一、架构图

如下图所示:

在这里插入图片描述


二、环境信息

1、部署规划

主机名 K8S版本 系统版本 内核版本 IP地址 备注
k8s-master-63 1.24.16 Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.63 master节点 + etcd节点
k8s-master-64 1.24.16 Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.64 master节点 + etcd节点
k8s-master-65 1.24.16 Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.65 master节点 + etcd节点
k8s-worker-66 1.24.16 Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.66 worker节点
- - - - 192.168.1.146 vip
k8s-lb-01 - Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.185 Nginx + keepalived
k8s-lb-02 - Ubuntu 20.04.5 LTS 5.15.0-69-generic 192.168.1.205 Nginx + keepalived

2、集群网段

宿主机 集群Pod网段 集群Service网段
192.168.1.0/24 10.48.0.0/16 10.96.0.0/16

说明:Kubernetes高可用集群基于kubeadm工具部署,其中etcd集群采用二进制方式部署。由于测试机器数量有限,etcd服务部署在master节点上,你可以根据自己需要,使用单独的主机部署etcd集群服务。


三、安装和配置先决条件

3.1、主机名设置

说明:分别在对应的节点IP上设置主机名。

root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-master-63
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-master-64
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-master-65
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-worker-66
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-lb-01
root@lolaage-virtual-machine:~#  hostnamectl set-hostname k8s-lb-02

3.2、配置主机hosts

说明:以下操作无论是master节点和worker节点均需要执行。

root@lolaage-virtual-machine:~# vim /etc/hosts
192.168.1.63  k8s-master-63
192.168.1.64  k8s-master-64
192.168.1.65  k8s-master-65
192.168.1.66  k8s-worker-66
192.168.1.185 k8s-lb-01
192.168.1.205 k8s-lb-02

3.3、关闭防火墙

说明:以下操作无论是master节点和worker节点均需要执行。

root@lolaage-virtual-machine:~# ufw disable && systemctl stop ufw && systemctl disable ufw

3.4、关闭swap分区

说明:以下操作无论是master节点和worker节点均需要执行。

root@lolaage-virtual-machine:~# swapoff -a
root@lolaage-virtual-machine:~# sed -i '/swap/ s/^/#/  /etc/fstab

3.5、时间时区同步

说明:以下操作无论是master节点和worker节点均需要执行。

1、设置时区为Asia/Shanghai,如果已经是则请忽略

root@k8s-master-65:~# timedatectl
               Local time: 五 2023-03-31 14:11:36 CST
           Universal time: 五 2023-03-31 06:11:36 UTC
                 RTC time: 五 2023-03-31 06:11:36    
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes                       
              NTP service: active                    
          RTC in local TZ: no  

2、使用chrony同步时间

root@k8s-master-63:~# apt install chrony -y
root@k8s-master-63:~# vim /etc/chrony/chrony.conf
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
#pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

root@k8s-master-63:~# systemctl enable chronyd.service
root@k8s-master-63:~# systemctl restart chronyd.service
root@k8s-master-63:~# systemctl status chronyd.service

阿里云NTP服务器地址列表,状态检测如下所示:
在这里插入图片描述

chrony客户端上的一些常用命令:

# 1、查看可用的时间同步源
chronyc sources -v
# 2、查看时间同步源的状态
chronyc sourcestats -v
# 3、对客户端系统时间进行强制同步
chronyc -a makestep

3.6、修改内核参数

说明:以下操作无论是master节点和worker节点均需要执行。

说明:有一些ipv4的流量不能走iptables链,因为linux内核是一个过滤器,所有流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失。配置k8s.conf文件,如下所示:

# 1、加载br_netfilter和overlay模块
root@k8s-master-63:~# cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
root@k8s-master-63:~# modprobe overlay
root@k8s-master-63:~# modprobe br_netfilter
# 2、设置所需的sysctl参数,参数在重新启动后保持不变
root@k8s-master-63:~# cat <<EOF | 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
# 3、应用sysctl参数而不重新启动
root@k8s-master-63:~# sysctl --system

3.7、启用IPVS模式

说明:以下操作无论是master节点和worker节点均需要执行。

# kube-proxy开启ipvs的前提需要加载以下的内核模块
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

注意:如果出现modprobe: FATAL: Module nf_conntrack_ipv4 not found in directory /lib/modules/5.15.0-69-generic错误,这是因为使用了高内核,当前内核版本为5.15.0-69-generic,在高版本内核已经把nf_conntrack_ipv4替换为nf_conntrack了。

# 1、安装ipvs
root@k8s-master-63:~#  apt -y install ipvsadm ipset sysstat conntrack
# 2、加载内核模块脚本
root@k8s-master-63:~# cat > /etc/profile.d/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 3、赋予权限
root@k8s-master-63:~# chmod 755 /etc/profile.d/ipvs.modules
# 4、执行加载模块脚本
root@k8s-master-63:~# bash /etc/profile.d/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

四、安装etcd集群

4.1、生成etcd集群相关证书

说明:手动创建证书比较麻烦,这里采用了etcd证书一键生成工具来创建etcd相关证书,可以在任意一节点主机上生成etcd集群相关证书。

操作步骤如下图所示:
在这里插入图片描述
说明:有一些ipv4的流量不能走iptables链,因为linux内核是一个过滤器,所有流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失。配置k8s.conf文件,如下所示:

1、其中ca-key.pem、ca.pem、apiserver-etcd-client.pem、apiserver-etcd-client-key.pem文件是kube-apiserver连接etcd所需证书。这4个证书文件必须要上传到 所有master节点上,需提前手动创建好证书存放目录。其中ca-key.pem、ca.pem建议目录为/etc/kubernetes/pki/etcd,apiserver-etcd-client.pem、apiserver-etcd-client-key.pem建议目录为 /etc/kubernetes/pki

2、其中ca-key.pem、ca.pem、healthcheck-client-key.pem、healthcheck-client.pem、peer-key.pem、peer.pem、server-key.pem、server.pem是etcd集群所需要证书。这8个证书文件必须要上传到 所有etcd节点上。这8个证书文件建议目录为/etc/kubernetes/pki/etcd。

3、如果某一个节点如k8s-master-63节点,它即为master节点,也是etcd节点,则证书文件列表如下所示:
在这里插入图片描述

4、这里就默认在k8s-master-63(即192.168.1.63)节点上生成相关证书,并将证书分别复制到etcd各个节点相应目录及master节点相关目录下,其中证书目录需提前创建好,当前K8S集群环境apiserver节点和etcd节点为同一主机,所以拷贝完之后证书文件列表如上图所示,这里就以k8s-master-63(即192.168.1.63)节点展示,其它节点也跟这个一样。

证书文件 秘钥文件 建议路径 节点 说明
ca.pem ca-key.pem /etc/kubernetes/pki/etcd master节点 etcd集群ca根证书
peer.pem peer-key.pem /etc/kubernetes/pki/etcd master节点 etcd集群peer证书
server.pem server-key.pem /etc/kubernetes/pki/etcd master节点 etcd集群server证书
healthcheck-client.pem healthcheck-client-key.pem /etc/kubernetes/pki/etcd master节点 etcd集群client证书
apiserver-etcd-client.pem apiserver-etcd-client-key.pem /etc/kubernetes/pki master节点 apiserver连接etcd客户端证书

4.2、二进制安装etcd集群

4.2.1、下载etcd二进制安装包

wget https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz
tar axf etcd-v3.5.6-linux-amd64.tar.gz 
mv etcd-v3.5.6-linux-amd64/etcd* /usr/bin

4.2.2、创建Service文件

1、etcd01节点etcd.service文件如下所示:
root@k8s-master-63:~# cat /etc/systemd/system/etcd.service 
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd
ExecStart=/usr/bin/etcd \
  --name=etcd01 \
  --cert-file=/etc/kubernetes/pki/etcd/server.pem \
  --key-file=/etc/kubernetes/pki/etcd/server-key.pem \
  --peer-cert-file

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

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

相关文章

【TA 挖坑02】RayMarching SDF 物体黏合

写在前面 由于实习和忙着论文很久没经营博客了&#xff0c;最近以各种方式收集到了一些想实现的效果&#xff0c;其中一个就是卡通云融合、变大变小、聚散收拢的效果如何实现的问题&#xff0c;这就不得不提搁置了很久的RayMarching... 挖坑&#xff01;整理一下有帮助的文章…

origin修改默认的字体等

因为默认是中文宋体&#xff0c;每次切换成英文尤其是希腊字母就很麻烦。 选择菜单栏的【设置】——【选项】点击。 弹出窗口中选择【文本字体】 设置成你需要的字体就好。 这里同样可以更改页面、图等的默认设置。 效果&#xff1a; 选择插入文字后&#xff0c;自动更改成…

PyQt5登录界面跳转

目录 1、设计ui界面 2、设计逻辑代码&#xff0c;实现登录界面跳转 3、结果 1、设计ui界面 设计后的ui界面 在这里可以设置密码不显示 这里可以设置快捷键 最后将ui界面转为py文件后获得的逻辑代码为&#xff1a;&#xff08;文件名为Login.py&#xff09; # -*- coding: u…

Windows上使用dump文件调试

dump文件 dump文件记录当前程序运行某一时刻的信息&#xff0c;包括内存&#xff0c;线程&#xff0c;线程栈&#xff0c;变量等等&#xff0c;相当于调试程序时运行到某个断点上&#xff0c;把程序运行的信息记录下来。可以通过Windbg打开dump&#xff0c;查看程序运行的变量…

DispatcherServlet doDispatch()方法解析(1)

目录 简介doDispatch() 源码解析this.mappingRegistry 简介 在DispatcherServlet类中, 最关键的就是doDispatch()这个方法, 每一次请求都需要经过这个方法, 对每个请求进行转发, 通过反射调用对应的方法 doDispatch() 源码解析 可以看到最关键的代码就是1047行, 根据请求对象…

Python规范

PEP8 风格指南&#xff1a; 缩进&#xff0c;用 4 个空格&#xff0c;不要用制表符。(Python 不允许混合制表符和空格进行缩进。)换行&#xff0c;一行不超过 79 个字符。用空行分隔函数和类&#xff0c;及函数内较大的代码块。 用两个空行包围顶级函数和类定义。类内的方法定…

算法通关村第十关 | 数组中第k个最大元素

1.数组中第k大的数字 题目&#xff1a; LeetCode&#xff1a;数组中的第k个最大元素&#xff0c;给定整数数组nums和整数k&#xff0c;请返回数组中第k个最大的元素&#xff0c;请注意&#xff0c;你需要找的是数组排序后第k个最大的元素&#xff0c;而不是第k个不同的元素。 运…

【【STM32-SPI通信协议】】

STM32-SPI通信协议 STM32-SPI通信协议 •SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 •四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;、MISO…

stm32F103R6实现流水灯参考源代码

#include "main.h" #include "gpio.h" void SystemClock_Config(void); void sleep(int a) {int i0,j0;for(i0;i<a;i){for(j0;j<2000;j);}} 真正发挥效果的是这个main函数// int main(void) {int i0;HAL_Init();SystemClock_Config();MX_GPIO_Init()…

4.UE数字人工程运行逻辑及程序逻辑

1.Fay-UE5数字人工程导入 2.UE数字人语音交互 3.UE基本操作及数字人工程模块组成&#xff08;UE数字人系统教程&#xff09; 一、3个状态&#xff1a;鸡汤广告、交互&#xff08;聊天与否&#xff09;、跳舞 1、启动即开始循环鸡汤广告模式 2、第一次交互&#xff08;助理版…

gromacs教程练习1

gromacs能在win上运行&#xff0c;还是个开源的软件&#xff0c;这都很值得入手学习 记录下gromacs教程的练习情况&#xff1a; Lysozyme in water 水中的溶菌酶&#xff0c;嗯&#xff0c;估计就是把蛋白处理后放在显试溶剂里跑MD这个模拟。 1、文件的准备&#xff1a; 1、…

JVM虚拟机:初始化的介绍

本文重点 我们前面学习了三个步骤: 装载 连接 初始化 初始化 初始化的时候,会为静态成员变量赋值初始值,它有两种方式: ①声明类变量是指定初始值 ②使用静态代码块为类变量指定初始值 例子 最后输出的结果为3,它的过程是这样的: main方法中输出T.count,由于count是…

产品经理如何提高用户画像效果?SIKT模型

产品经理做用户画像&#xff0c;最担心被业务方反馈&#xff1a;没效果。这往往是由用户画像与业务场景脱节造成的。那么我们该如何从业务场景出发&#xff0c;让用户画像更有效&#xff1f;一般来说&#xff0c;我们可以采用SIKT模型解决这个问题。 用户画像 ​ 1、SIK…

使用CLI添加磁盘到VM

登录 https://portal.azure.com/#home&#xff0c;点击右上角的控制台图标 &#xff0c;打开CLI 在控制台中输入如下指令&#xff0c;在NetworkWatcherRG创建一个名字为TEST的虚拟机&#xff0c;使用的镜像是Win2019datacenter&#xff0c;username是aaa,password是1234567890A…

SpringBoot 操作Redis、创建Redis文件夹、遍历Redis文件夹

文章目录 前言依赖连接 RedisRedis 配置文件Redis 工具类操作 Redis创建 Redis 文件夹查询数据遍历 Redis 文件夹 前言 Redis 是一种高性能的键值存储数据库&#xff0c;支持网络、可基于内存亦可持久化的日志型&#xff0c;而 Spring Boot 是一个简化了开发过程的 Java 框架。…

JDBC Vertica Source Connector 使用文档

支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取外部数据源数据。 支持的数据源信息 DatasourceSupported versionsDriverUrlMavenVerticaDifferent depen…

SAP和APS系统超级BOM核对(SAP配置BOM攻略八)

2023年是华为自动驾驶上路元年&#xff0c;8月问界M5的自驾版已经开通了第一批五大城市的自动驾驶功能&#xff0c;年底逐步开放的城市会多达60个。问界M9会也会在年底发布&#xff0c;而M9的生产工厂也在紧锣密鼓的建设中。 APS (Advanced Planning Scheduling) 高级计划与排…

SD WebUI 扩展:prompt-all-in-one

sd-webui-prompt-all-in-one 是一个基于 Stable Diffusion WebUI 的扩展&#xff0c;旨在提高提示词/反向提示词输入框的使用体验。它拥有更直观、强大的输入界面功能&#xff0c;它提供了自动翻译、历史记录和收藏等功能&#xff0c;它支持多种语言&#xff0c;满足不同用户的…

【自用】云服务器 docker 环境下 HomeAssistant 安装 HACS 教程

一、进入 docker 中的 HomeAssistant 1.查找 HomeAssistant 的 CONTAINER ID 连接上云服务器&#xff08;宿主机&#xff09;后&#xff0c;终端内进入 root &#xff0c;输入&#xff1a; docker ps找到了 docker 的 container ID 2.config HomeAssistant 输入下面的命令&…

1 树 1.1 树的基本概念 1.1.1 什么是树&#xff1f; 树是n(n > 0)个结点的有限集。当n 0时&#xff0c;称为空树。在任意一颗非空树上应该满足&#xff1a; 有且仅有一个特定的称为根的结点当n>1时&#xff0c;其余结点可分为m&#xff08;m>0&#xff09;个互不相…