【K8S 从0到1实战】Kubernetes一主多从部署实战指南

news2024/11/26 15:00:19

目录

    • 前言
    • 前置准备
      • 安装虚拟机
      • 关闭防火墙
      • 禁用 `SELinux`
      • 关闭 `Swap ` 分区
      • 时区设置和时间同步
      • 主机名和域名解析配置
      • 转发 `IPv4` 并让 `iptables ` 看到桥接流量
    • Docker 安装
    • cri-docker 安装
    • Kubernetes 部署
      • 配置 Kubernetes 镜像源
      • Kubernetes 组件安装
      • Master 节点初始化
      • Node 节点加入集群
    • Calico 网络插件安装
    • K8S 部署成功验证
    • 结语

前言

在本实战指南中,我们将使用 kubeadm 工具来安装和部署Kubernetes 1.24.9版本的一主多从环境。因为 Kubesphere 的版本兼容 的原因这里并没有选择最新版本的 K8S,不过好在不同版本安装和部署的过程差异并不大。

前置准备

安装虚拟机

K8S 一主两从的3 台 Linux 系统服务器配置如下:

主机名K8S角色IP配置操作系统
k8s-masterMaster节点192.168.179.214核CPU 8G内存 20G硬盘CentOS 7.9
k8s-node1Worker节点192.168.179.224核CPU 8G内存 20G硬盘CentOS 7.9
k8s-node2Worker节点192.168.179.234核CPU 8G内存 20G硬盘CentOS 7.9

❗️ 如果你没有安装虚拟机,你可以按照这篇文章 VMware 基于CentOS 7.9 镜像搭建 K8S 一主多从本地虚拟服务器 的步骤来完成搭建。

关闭防火墙

💥 所有节点均要执行

# 关闭防火墙
systemctl stop firewalld
# 重启禁用防火墙    
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld

禁用 SELinux

💥 所有节点均要执行

sed -i 's/enforcing/disabled/' /etc/selinux/config

关闭 Swap 分区

💥 所有节点均要执行

swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

时区设置和时间同步

# 时区设置
sed -i '$a\export TZ=Asia/Shanghai' /etc/profile && source /etc/profile && date

# 时间校准(阿里云 ntp 时间服务器)
yum -y install ntpdate
ntpdate time1.aliyun.com

主机名和域名解析配置

192.168.179.21 主机执行

# 192.168.179.21 设置主机名 k8s-master
hostnamectl set-hostname k8s-master

# 立即生效设置
exec bash

192.168.179.22 主机执行

# 192.168.179.22 设置主机名 k8s-node1
hostnamectl set-hostname k8s-node1

# 立即生效设置
exec bash

192.168.179.23 主机执行

# 192.168.179.23 设置主机名 k8s-node2
hostnamectl set-hostname k8s-node2

# 立即生效设置
exec bash

配置域名解析 (💥 所有节点机器均要执行💥 )

cat >> /etc/hosts << EOF
192.168.179.21  k8s-master
192.168.179.22  k8s-node1
192.168.179.23  k8s-node2
EOF

转发 IPv4 并让 iptables 看到桥接流量

💥 所有节点机器均要执行💥

官方文档:转发 IPv4 并让 iptables 看到桥接流量

执行下述指令:

# 
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
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_netfilteroverlay 模块被加载:

lsmod | grep br_netfilter
lsmod | grep overlay

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

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

Docker 安装

💥 所有节点机器均要执行💥

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2 

配置 Docker 阿里云 yum

yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 docker-ce

yum install -y docker-ce

配置 Docker 阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g6jp4cfd.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }   
}
EOF
sudo systemctl daemon-reload

启动 Docker

# 启动 Docker & 开机自启  
systemctl enable --now docker

cri-docker 安装

Kubernetes v1.24 版本开始,已移除了 Dockershim。然而,Docker Engine 默认不支持 CRI 规范,这导致无法直接集成两者。为了解决这个问题,MirantisDocker 共同创建了 cri-dockerd 项目,它提供了一个适配器来支持 CRI 规范,使得 Kubernetes 可以通过 CRI 控制 Docker Engine

💥 所有节点机器均要执行💥

下载 cri-dockerd

⬇️下载地址 (无法访问请移步 百度网盘)

# 网络不好可多尝试几次,实在不行从网盘下载再上传文件至服务器安装
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm

安装 cri-dockerd

rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

配置 cri-dockerd

vi /usr/lib/systemd/system/cri-docker.service
# ExecStart=/usr/bin/cri-dockerd 追加配置
--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8

启动 cri-dockerd

# 设置 cri-docker 开机自启 & 立即启动
systemctl enable --now cri-docker 
# 查看 cri-docker 状态
systemctl status cri-docker

cri-docker 运行状态

Kubernetes 部署

配置 Kubernetes 镜像源

💥 所有节点机器均要执行💥

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

Kubernetes 组件安装

kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件:

组件说明
kubeadmkubeadm 是一个命令行工具,用于初始化和管理 Kubernetes 集群的引导工具。
kubeletkubelet 是运行在每个 Kubernetes 节点,负责管理节点上的容器运行时,并与 Kubernetes 控制平面通信。
kubectlkubectl 是 Kubernetes 的命令行工具,可以执行各种操作,如创建、删除和管理 Kubernetes 资源

💥 所有节点机器均要执行💥

# 查看版本
yum list kubeadm --showduplicates | sort -r
# 安装
yum install -y kubelet-1.24.9-0 kubeadm-1.24.9-0 kubectl-1.24.9-0 
# 启动 & 开机自启
systemctl enable --now kubelet 
# 查看状态
systemctl status kubelet

Master 节点初始化

💥 Master 节点机器执行💥

kubeadm init\
    --apiserver-advertise-address=192.168.179.21 \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.24.9	\
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16  \
    --cri-socket unix:///var/run/cri-dockerd.sock

初始化成功提示信息如下(重要):

根据提示执行以下命令来配置 kubectl

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

复制 Node 节点加入集群命令(下文用)

Node 节点加入集群

💥 Node节点机器执行💥

kubeadm join 192.168.179.21:6443 --token 2gu3ls.e1l6gdi97o92zxlr \
        --discovery-token-ca-cert-hash sha256:280e47038be497d46c065cbcef5212918d93910642e5ea808e79944340cb6a8b \
--cri-socket unix:///var/run/cri-dockerd.sock

Calico 网络插件安装

💥 Master 节点机器安装💥

Calico 是一个强大的容器网络插件,为 Kubernetes 提供 IP 网络互连、网络策略和跨主机网络连接等功能,实现高性能和安全的容器通信。

🚀🚀 官方:Calico 安装和配置

下载配置

curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

修改配置

在上节「Master 节点初始化」 Pod 分配的 IP 地址范围 --pod-network-cidr=10.244.0.0/16 ,而非 192.168.0.0/16 ,根据官网安装步骤2需要将配置中的 CALICO_IPV4POOL_CIDR 变量设置为 10.244.0.0/16

vi calico.yaml

安装 Calico

sudo kubectl apply -f calico.yaml

稍等片刻…

K8S 部署成功验证

Master 节点执行 kubectl get nodes 命令查看各个节点状态为 Ready 表示 Kubernetes 安装成功

结语

至此,我们成功完成了一主多从的Kubernetes环境搭建。后续文章中,我们将进行Kubesphere的安装,以便将前后端分离项目 youlai-boot + vue3-element-admin 和微服务项目 youlai-mall 部署到Kubernetes集群上。

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

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

相关文章

基于Ti_AWR2243级联板的发射端波束形成(相控阵)的实践

说明 Ti的级联板功能十分强大&#xff0c;用这块板子做TDM(时分)的发射以及TDM发射模式下的数据处理可能更为大家所熟知&#xff0c;但其实因为AWR2243芯片在每个发射链路上有6bit的移相器&#xff0c;再加上板子上有9个发射天线是排布在同一个水平线上的&#xff0c;所以也可以…

万物的算法日记|第二天

笔者自述&#xff1a; 一直有一个声音也一直能听到身边的大佬经常说&#xff0c;要把算法学习搞好&#xff0c;一定要重视平时的算法学习&#xff0c;虽然每天也在学算法&#xff0c;但是感觉自己一直在假装努力表面功夫骗了自己&#xff0c;没有规划好自己的算法学习和总结&am…

JavaSE进阶——玩转IO流

文章目录 前言一、File类介绍1、概念引入2、实际应用2.1 操作文件2.2 操作文件夹 二、IO流介绍三、字符流1、读文件1.1 一次读一个1.2 一次读多个&#xff0c;使用char数组去装 2、写文件2.1 一次写一个2.2 一次写完&#xff0c;使用字符数组 3、文件复制3.1 综合应用3.2 使用缓…

论文解读:ExamPle:用于预测植物小分泌肽的可解释的深度学习框架

ExamPle: explainable deep learning framework for the prediction of plant small secreted peptides 期刊&#xff1a;Bioinformatics 影响因子&#xff1a;6.931 中科院分区&#xff1a;小类数学与计算生物2区 出版日期&#xff1a;2023年3月10日 Github:https://gith…

Seata客户端的启动过程 学习记录

Seata客户端的启动过程 1.自动装配4个配置类 将在SpringBoot启动时往容器中添加4个类 1. 自动配置类 SeataAutoConfiguration SeataAutoConfiguration将会往容器中添加两个bean failureHandler 事务处理失败执行器globalTransactionScanner failureHandler failureHandle…

03 表达关系的术语

文章目录 表达关系的术语关联关联的语义表达(6点) 泛化细化(也称为实现)依赖例题 UML 基本关系的一般用法① 模型化简单依赖②模型化单继承③模型化结构关系例题 表达关系的术语 关联 定义&#xff1a;关联是类目之间的结构关系&#xff0c;描述了一组具有相同结构、相同语义…

【MySQL数据库一】MySQL数据库初体验

MySQL数据库初体验 1.数据库基本概念1.1 数据Data1.2 表1.3 数据库1.4 数据库管理系统1.5 数据库系统 2.数据库的发展3.主流的数据库介绍3.1 SQL Server&#xff08;微软公司产品&#xff09;3.2 Oracle &#xff08;甲骨文公司产品&#xff09;3.3 DB2&#xff08;IBM公司产品…

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【二】

安卓高通机型的基带移植 修改 编译的相关 增加信号 支持5G等【一】 前面分享了这篇帖子&#xff0c;很多友友希望更新下新机型的基带替换方法。今天对其中做一些补充说明。由于安卓机型跨版本幅度较大。有的机型从出厂安卓8有可能官方目前已经更新到安卓12 13等等。所以任何的教…

每天五分钟机器学习:如何确定梯度下降中的学习率?

本文重点 学习率是梯度下降算法中的一个重要参数,它控制着每次迭代中参数的更新幅度,因此学习率的大小直接影响着算法的收敛速度和精度。在实际应用中,如何选择合适的学习率是一个非常重要的问题。 手动调整法 最简单的方法是手动调整学习率。我们可以根据经验或者试错的…

sealos 五年磨一剑——云操作系统正式发布

这是计划的一部分 这是一个宏伟的计划&#xff0c;漫长且有趣。。。 2018 年的一个晚上&#xff0c;我写下了 sealos 第一行代码&#xff0c;当时仓库命名 “kubeinit”&#xff0c;后一想格局太小&#xff0c;我不可能只做一个安装 kubernetes 的事&#xff0c;安装只是计划…

不知道测试什么?这些是你需要知道的软件测试类型和常识

有多少软件测试类型呢? 我们作为测试人员了解很多种不同的软件测试类型&#xff0c;例如功能测试(Functional Test)、非功能测试、自动测试、敏捷测试、以及它们的各种子类型. 尽管在我们的测试过程中会接触很多种测试类型, 或者听说过某些测试类型&#xff0c;但是很少人敢说…

小姐姐们,一起学数据分析

&#x1f496; 亲爱的女生们&#xff0c;听我说&#xff01;数据分析&#xff0c;给你的未来注入浪漫与激情&#xff01;&#x1f496; 嗨&#xff0c;小姐姐们&#x1f46d;&#xff0c; 我想和你们分享一个令人兴奋的话题——数据分析&#xff01;或许你们会觉…

Liunx系统重修

Liunx中以“树”结构的形式来管理文件和文件夹的&#xff01;

ISP下载原理分析

STM32的启动方式&#xff0c;系统存储器启动就是通过ISP下载 ISP简介 ISP下载是指可以通过串行外设&#xff0c;直接将程序下载Flash中&#xff0c;然后自动运行程序的启动方式。 ISP的时候需要用到bootloder(自举程序)&#xff0c;bootloader存储在STM32内部的自举ROM存储器…

webpack踩坑

因为电脑重新装了系统 所以很多环境都需要配置 1.首先去node.js官网下载了node&#xff0c;node下载后对应的npm版本也会自动下载好 2.想要成功跑通项目&#xff0c;还需要下载webpack 全局安装webpack npm -i webpack -Dnpm install webpack-cli -g但一直在报错 查看webpac…

基于Java毕业生就业信息统计系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

2023互联网Java高级工程师1080道面试题(附答案)分享

Java 面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。现如今&#xff0c;Java 面试的本质就是八股文&#xff0c;把八股文面试题背好&#xff0c;面试才有可能表现好。…

python字符串格式化控制数值经度

python字符串格式化通过占位符拼接演示了字符串格式化拼接的方法 但是大家应该有注意到 我们的 8.70 就变成了 8.700000 那么 我们就需要对浮点数 做一个经度控制 我们先编写如下代码 dom1 110; dom2 1234.1234567; print(dom1) print(dom2)运行结果如下 我们定义了一个整…

【RuoYi-Cloud-Plus】学习笔记 07 - Sentinel(二)Node ProcessorSlotChain 总览与知识整理

文章目录 前言参考目录版本说明学习笔记1、Sentinel 架构图2、Node2.1、入口节点 EntranceNode2.2、链路节点 DefaultNode2.3、簇点 ClusterNode2.4、统计节点 StatisticNode3、Slot Chain3.1、DefaultSlotChainBuilder3.1.1、Slot 排序的实现3.1.2、SPI 文件读取3.2、NodeSele…

Java并发工具之ThreadLocal

一、ThreadLocal 简介 1. ThreadLocal 是什么&#xff1f; ThreadLocal 字面意思是本地线程&#xff0c;其实更准确来说是线程局部变量&#xff0c;线程类 Thread 有个变量叫做 threadLocals&#xff0c;其类型就是ThreadLocal.ThreadLocalMap 类型&#xff0c;他其实不是一个…