kubeadm部署k8s-1.32版本集群(1个master,1个worker)

使用最新版的kubeadm部署一个最小版的k8s集群,只有一个master和1个worker,这种部署方式,不满足高可用,仅限于本地学习使用,不可以放到生产上用,先看一下文章的目录。

文章目录

  • 1、基本信息
    • 1.1、服务器基本信息
    • 1.2、k8s版本
  • 2、关闭swap
  • 3、启用ip转发功能
  • 4、安装容器运行时
    • 4.1、部署containerd
    • 4.2、安装runc
    • 4.3、安装CRI
    • 4.4、生成config.toml文件
  • 5、安装kubectl、kubeadm、kubelet
    • 5.1、更新 apt 包索引并安装使用 Kubernetes apt仓库所需要的包
    • 5.2、下载用于 Kubernetes 软件包仓库的公共签名密钥
    • 5.3、添加 Kubernetes apt仓库
    • 5.4、更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
  • 6、使用kubeadm部署master节点
  • 7、保存k8s集群的安全配置文件
  • 8、安装网络插件
  • 9、部署Rook项目
  • 10、查看master节点的状态以及master节点的pod
  • 11、worker节点部署
  • 12、验证k8s集群
    • 12.1、编写yaml文件
    • 12.2、部署nginx的pod
    • 12.3、查看pod的启动过程
    • 12.4、查看nginx是否启动成功
  • 13、参考文档

1、基本信息

1.1、服务器基本信息

linux版本机器配置k8s角色
ubuntu 22.04 LTS 64位4C8G,50G硬盘master
ubuntu 22.04 LTS 64位2C4G,50G硬盘worker

1.2、k8s版本

     1.32版本

2、关闭swap

sudo swapoff -a

3、启用ip转发功能

sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#保存并退出执行,该命令会从 /etc/sysctl.conf 文件中重新加载所有参数设置。
sudo sysctl -p

4、安装容器运行时

可以参考这个文档里的option1安装容器运行时。也可以直接看我下面的描述,在两台机器都验证过,保证可用
简单提下,容器运行时,比如我们常说的docker,就是一种容器运行时的解决方案,k8s通过CRI操作容器运行时来增删改容器

4.1、部署containerd

(1)、下载并安装containerd
通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
containerd下载

//将containerd解压到/usr/local目录
tar Cxzvf /usr/local containerd-2.0.4-linux-amd64.tar.gz

(2)、配置systemd服务
通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
containerd.service文件下载

//文件放置目录
/usr/local/lib/systemd/system/

(3)、服务化containerd

systemctl daemon-reload
systemctl enable --now containerd

4.2、安装runc

通过查看uname -m命令查看适合你机器的版本,如果命令反馈x86,就下载amd版本
runc下载

//安装runc
install -m 755 runc.amd64 /usr/local/sbin/runc

4.3、安装CRI

CRI下载

mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.6.2.tgz

4.4、生成config.toml文件

默认情况下,containerd不会生成config.toml文件,所以需要手动生成并配置下

//1、生成config.toml文件
containerd config default > config.toml
//2、将config.toml文件移动到/etc/containerd/目录,目录不存在,就创建下
mkdir -p /etc/containerd/

5、安装kubectl、kubeadm、kubelet

可以参考官方文档
也可以看我写的,我也是从官方文档上拿下来的,在两台机器验证过
我是ubuntu机器,所以参考的是Debian的方案

5.1、更新 apt 包索引并安装使用 Kubernetes apt仓库所需要的包

# 更新apt包
sudo apt-get update
# 安装Kubernetes apt仓库所需要的包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

5.2、下载用于 Kubernetes 软件包仓库的公共签名密钥

# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

5.3、添加 Kubernetes apt仓库

# 1.32版本适用。此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

5.4、更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

6、使用kubeadm部署master节点

kubeadm init

出现下面的内容代表master部署成功

Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.conf
# 这个链接要保存一下。后面worker节点需要通过执行该命令来加入这个master所在的k8s集群
kubeadm join 192.168.17.142:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:8bcc34481b37c8325791bc0d275bf7aab6b1c9222c4ea23f5dfa4988d3f21f60

7、保存k8s集群的安全配置文件

部署master成功后的输出里,k8s提示我们需要执行以下三个命令。因为访问k8s集群是需要加密访问的,这三条命令的意思就是使用刚刚生成的安全配置文件来访问k8s集群

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

8、安装网络插件

网络插件的选择有很多种,有Flannel、calico以及weave等等,相对来说,weave要简单点。我们这里使用weave

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

9、部署Rook项目

Rook 项目是一个基于 Ceph 的 Kubernetes 存储插件,我们需要让pod能共享存储,所以需要使用这种分布式的存储方式。
官方的quickStart
访问不了,也可以看我下面的描述,从官方文档上抄下来的

#先把Rook的代码克隆到本地
git clone --single-branch --branch v1.16.5 https://github.com/rook/rook.git
#进入examples目录
cd rook/deploy/examples
#安装Rook
命令1:kubectl create -f crds.yaml -f common.yaml -f operator.yaml
命令2:kubectl create -f cluster.yaml

10、查看master节点的状态以及master节点的pod

(1)、查看master节点的状态

kubectl get nodes

(2)、查看master节点的pod

kubectl get pods -n kube-system

11、worker节点部署

worker节点初始化之前,先要把标题1到标题4的所有步骤都执行一遍,也就是说worker节点上也需要有kubeadm、kubelet、kubectl这些组件。
组件安装好后,把刚刚部署master成功的kubeadm init命令复制过来执行即可

kubeadm join 192.111.10.042:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:8bcc34481b37c8325791bc0d275bf7aab6b1c9222c4ea23f5dfa4988d3f21f60

12、验证k8s集群

为了验证我们部署的k8s集群是否可用,下面我们部署一个nginx的pod

12.1、编写yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:selector:matchLabels:app: nginxreplicas: 2template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.27.4ports:- containerPort: 80

12.2、部署nginx的pod

kubectl create -f nginx-deployment.yaml

12.3、查看pod的启动过程

kubectl describe pod nginx-deployment-67594d6bf6-9gdvr

在这里插入图片描述
Events描述了这个pod的部署过程,这个信息很重要,后面我们debug时,很多时候要从这个地方看容器的部署情况

12.4、查看nginx是否启动成功

可以进入nginx的容器

kubectl exec -it nginx-deployment-558d6675d6-gvrm8 -- /bin/bash

然后访问一下80端口看下

$ curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

容器方式部署nginx成功

13、参考文档

参考了这个老哥的文档,感谢老哥分享,https://blog.csdn.net/weixin_44102162/article/details/142640088

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

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

相关文章

阀门流量控制系统MATLAB仿真PID

以下是一个基于MATLAB的PID控制仿真程序&#xff0c;用于模拟智能阀门流量控制系统。该程序包含系统模型、PID控制器以及饱和限制处理。 % 石油管道流量PID控制仿真 % 系统参数 valve_min 4; % 阀门最小电流 (mA) valve_max 25; % 阀门最大电流 (mA) max_flow 10…

UE4学习笔记 FPS游戏制作30 显示击杀信息 水平框 UI模板(预制体)

文章目录 一制作单条死亡信息框水平框的使用创建一个水平框添加子元素调整子元素顺序子元素的布局插槽尺寸填充对齐 制作UI 根据队伍&#xff0c;设置文本的名字和颜色声明变量 将变量设置为构造参数根据队伍&#xff0c;设置文本的名字和颜色在构造事件中&#xff0c;获取玩家…

机器学习——LightGBM

LightGBM(light gradient boosting machine&#xff0c;轻量梯度提升机)是对XGBoost进行改进的模型版本&#xff0c;其三者之间的演变关系为&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次对性能进行优化&#xff0c;尽管XGBoost已经很高效了&#xff0c;但是仍然有缺…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程&#xff0c;这些作业由Microsoft SQL Server中的SQL Server代理管理&#xff0c;对于自动执行日常任务&#xff08;如数据库系统中的备份、数据导入和报告生成&#xff09;以及确保及时准确地处理和更新数据…

小程序内表格合并功能实现—行合并

功能介绍&#xff1a;支付宝小程序手写表格实现行内合并&#xff0c;依据动态数据自动计算每次需求合并的值&#xff0c;本次记录行内合并&#xff0c;如果列内合并&#xff0c;同理即可实现 前端技术&#xff1a;grid布局 display&#xff1a;grid 先看实现效果: axml&…

CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)

目录 日期天数 需要考虑的几个问题 1.天数加在日上,有可能会溢出,需要进位 2.对月进位,也有可能导致月会溢出,需要进位 3.对年进位,需要考虑是否为闰年 代码设计 取得指定月的天数GetMonthDay函数 方法1:if判断或switch/case 方法2:查表 版本1 版本2 operator 初始…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…

新手村:逻辑回归-理解04:熵是什么?

新手村&#xff1a;逻辑回归04&#xff1a;熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前&#xff0c;需要掌握以下基础知识&#xff1a; 概率论与统计学&#xff1a; 概率分布&#xff08;如伯努利分布、正态分布&#xff09;。条件概率和贝叶斯定理。期…

linux》》docker 、containerd 保存镜像、打包tar、加载tar镜像

Linux》》docker: 默认情况下&#xff0c;Docker镜像保存在/var/lib/docker/目录下。 当您使用docker pull命令从Docker Hub或私有镜像仓库中拉取镜像时&#xff0c;Docker会自动将镜像文件保存在/var/lib/docker/image/目录下。 每个镜像都由一个或多个层组成&#xff0c;这些…

Processor System Reset IP 核 v5.0(vivado)

这个IP的作用&#xff0c;我的理解是&#xff0c;比普通按键复位更加高效灵活&#xff0c;可以配置多个复位输出&#xff0c;可以配置复位周期。 1、输入信号&#xff1a; 重要的信号有时钟clk信号&#xff0c;一般连接到系统时钟&#xff1b;输入复位信号&#xff0c;一般是外…

SQL中累计求和与滑动求和函数sum() over()的用法

[TOC](SQL中累计求和与滑动求和函数sum() over()的用法) 一、窗口函数功能简介 sum(c) over(partition by a order by b) 按照一定规则汇总c的值&#xff0c;具体规则为以a分组&#xff0c;每组内按照b进行排序&#xff0c;汇总第一行至当前行的c的加和值。 sum()&#xff1a…

优雅的开始一个Python项目

优雅的开始一个Python项目 这是我在初始化一个Python项目时&#xff0c;一键生成的项目文件。它自动完成了git初始化、环境管理、日志模块这三件事情&#xff0c;并在最后进入了虚拟环境。 uv安装 uv是一个现代的Python包管理和项目管理工具。uv中文文档 安装uv: # unix: …

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录&#xff0c;编写HTML模板&#xff08;含有模板语法&#xff0c;继承&#xff0c;{% static ‘xx’ …

Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?

&#x1f680; Vue 2 探秘&#xff1a;visible 和 append-to-body 是谁的小秘密&#xff1f;&#x1f914; 父组件&#xff1a;identify-list.vue子组件&#xff1a;fake-clue-list.vue 嘿&#xff0c;各位前端探险家&#xff01;&#x1f44b; 今天我们要在 Vue 2 的代码丛林…

docker-compese 启动mysql8.0.36与phpmyadmin,并使用web连接数据库

1、找一个文件夹&#xff0c;比如 E:\zqy\file\mysql&#xff0c;cd到这个目录下创建文件docker-compose.yml 2、将下面的代码块复制到docker-compose.yml文件中 version: 3.3 services:mysql:image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306netw…

【Java SE】包装类 Byte、Short、Integer、Long、Character、Float、Double、Boolean

参考笔记&#xff1a;java 包装类 万字详解&#xff08;通俗易懂)_java包装类-CSDN博客 目录 1.简介 2.包装类的继承关系图 3.装箱和拆箱 3.1 介绍 3.2 手动拆装箱 3.3. 自动拆装箱 ​4.关于String类型的转化问题 4.1 String类型和基本类型的相互转化 4.1.1 String —…

《网络安全等级测评报告模版(2025版)》

网络安全等级保护&#xff08;以下简称“等保测评”&#xff09;制度是我国网络安全领域现行的基本制度。所谓等保测评&#xff0c;即具有资质的测评机构&#xff0c;依据国家网络安全等级保护规范规定&#xff0c;按照有关管理规范和技术标准&#xff0c;对等保对象&#xff0…

【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2DEffector效应器

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南

本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具&#xff08;一款跨平台、命令行驱动的烧录利器&#xff09;&#xff0c;通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤&#xff0c;帮助用户实现Air780E…

SpringMVC的请求与响应

SpringMVC的请求与响应 SpringMVC请求处理流程请求映射和参数绑定RequestMapping注解RequestMapping的属性RequestMapping的请求参数绑定HTML代码JavaBean代码controller代码在控制器中使用原生的ServletAPI对象 SpringMVC响应数据处理及跳转结果跳转方式ModelAndViewServletAP…