万字长文,只为给小白说明白搭建一个单节点多工作节点k8s如何操作!!!

news2024/9/22 9:53:55

这里写目录标题

    • 1. Kubernetes 基础概念
      • 1.1 什么是 Kubernetes?
      • 1.2 核心组件
    • 本次搭建的机器演示
    • 具体的安装部署步骤
      • 修改主机的机器名称
      • 依次修改主机的host文件
      • 配置免密登录
      • 当前用户的 SSH 公钥复制到远程主机
      • 关闭交换区分区
      • 加载 br_netfilter 内核模块
        • 为什么安装 Kubernetes 需要执行这个命令?
      • 启动相关内核参数修改
      • 修改 Linux 系统中 SELinux(Security-Enhanced Linux)的配置,将其状态从 enforcing 改为 disabled。
        • 为什么需要操作这一步
      • 配置镜像下载的加速
      • 配置K8s镜像源加速
      • 配置时间同步
      • 安装Docker-CE和Containerd服务
        • 创建/etc/crictl.yaml文件
        • 配置Containerd镜像加速器
        • 创建证书等目录文件
        • 重启Containerd来使配置生效
        • 安装Docker,配置Docker镜像加速
      • 安装部署Kubernetes集群
        • 安装Kubernetes集群需要的包
        • 配置开机自启动
        • Kubeadm初始化Kubernetes集群
        • kubeadm初始化Kubenetes集群
      • 配置Kubectl配置文件config
        • 查看k8s集群
        • 扩容Kubernets集群
      • 安装网络插件Calico
        • 下载文件信息
        • 执行文件加载命令
      • 安装可视化界面kuboard
        • 配置集群信息
    • 致谢

写在前面,这里就是部署的是单个master多个worker节点的K8s。要是你本地内存够大的话,可以采用VMware多开多个虚拟机来进行操作练手。本次我的搭建环境是4台4C10G虚拟机进行演示。需要说明的是在开始之前我已经关闭了防火墙。话不多说,直接开车。

1. Kubernetes 基础概念

Kubernetes(希腊语):舵手、飞行员
源自于谷歌Borg
使用golang语言开发
简称为k8s

1.1 什么是 Kubernetes?

Kubernetes 是一个开源的容器编排平台,能够自动化应用程序的部署、扩展和管理。它主要用于管理容器化应用程序在集群环境中的运行。

1.2 核心组件

  • Pod: Kubernetes 中的最小部署单位,一个 Pod 可以包含一个或多个容器,这些容器共享相同的网络命名空间和存储。
  • Node: 是 Kubernetes 集群中的一台物理机或虚拟机,负责运行 Pod。Node 上运行着 Kubelet 和 kube-proxy。
  • Cluster: 一组 Node 组成的集群。
  • Namespace: 用于隔离集群中的资源和对象,便于不同环境或团队之间的资源管理。
  • Deployment: 提供声明式更新的机制,管理 Pod 和 ReplicaSet。
  • Service: 抽象出一组 Pod 的访问方式,提供负载均衡和服务发现功能。

本次搭建的机器演示

在这里插入图片描述

具体的安装部署步骤

修改主机的机器名称

下面这个操作是直接在上述四台服务器上分别执行。

hostnamectl set-hostname master01 && bash
hostnamectl set-hostname worker01 && bash
hostnamectl set-hostname worker02 && bash
hostnamectl set-hostname worker03 && bash

依次修改主机的host文件

vim /etc/hosts
# 执行下面命令
192.168.65.10	master01
192.168.65.20	worker01
192.168.65.21	worker02
192.168.65.22	worker03

在这里插入图片描述

配置免密登录

配置 SSH 密钥在 Kubernetes 安装过程中有利于提高集群节点间的通信效率,增强安全性,并且支持无密码自动化操作,从而大大简化了集群的管理和维护流程。

执行下面命令一路敲击回车就行

ssh-keygen

在这里插入图片描述

当前用户的 SSH 公钥复制到远程主机

执行下面的命令将上面master节点配置的公钥传输到服务器中,下面的命令在master节点的机器上运行的命令

ssh-copy-id master01
ssh-copy-id worker01
ssh-copy-id worker02
ssh-copy-id worker03

在这里插入图片描述

关闭交换区分区

这里采用永久关闭交换区分区的形式,可以直接编辑这个文件,或者使用finalshell工具双击打开之后注释掉下面截图中的信息之后重启机器。凡是涉及到的机器都需要关闭一下交换区的分区。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
重启之后交换区就会为0
在这里插入图片描述

加载 br_netfilter 内核模块

需要在四台机器上执行这个命令
在这里插入图片描述

为什么安装 Kubernetes 需要执行这个命令?

在 Kubernetes 安装过程中,特别是当 Kubernetes 使用 kube-proxy 或其他网络插件(如 flannel, calico 等)来管理节点和 Pod 之间的通信时,需要在每个节点上进行网络包的转发和过滤。为确保跨网络桥接的数据包能够被正确处理,br_netfilter 模块必须被加载。

具体原因包括:

包过滤和转发:在 Kubernetes 中,集群内部的 Pod 之间需要通过网络进行通信。br_netfilter 模块确保这些网络包能够被 Linux 内核中的 iptables 规则所管理和过滤,以实现正确的网络隔离和安全性。
网络插件依赖:许多 Kubernetes 的网络插件(如 flannel, calico)依赖于内核的网络包过滤机制来管理和控制 Pod 的网络流量。加载 br_netfilter 确保这些插件能够正常工作,保证 Pod 的网络通信稳定和安全。

modprobe br_netfilter

启动相关内核参数修改

四台机器都需要执行

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF

sysctl -p /etc/sysctl.d/k8s.conf

在这里插入图片描述

修改 Linux 系统中 SELinux(Security-Enhanced Linux)的配置,将其状态从 enforcing 改为 disabled。

为什么需要操作这一步

与容器和网络插件兼容性问题:Kubernetes 使用容器来运行应用程序,而一些容器引擎(如 Docker)以及 Kubernetes 网络插件可能在 SELinux 开启的情况下遇到权限问题。这是因为 SELinux 的强制访问控制机制会限制一些容器的行为,导致它们无法正常工作。

简化配置:对于一些 Kubernetes 安装和管理工具(如 kubeadm),禁用 SELinux 可以避免因为权限问题导致的复杂配置和兼容性问题,特别是在网络通信和文件系统操作方面。

避免权限冲突:SELinux 施加的严格权限管理可能与 Kubernetes 的访问控制策略冲突,特别是涉及到 Pod 之间的通信和共享资源时。因此,禁用 SELinux 可以避免不必要的权限冲突问题。

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

上述四台机器都要执行,执行完上述命令需要重启机器然后查看一下是否关闭了
在这里插入图片描述

配置镜像下载的加速

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

要是执行这个命令出现问题,可以安装一下,下面这个工具,说不定就可以配置上了。四台机器都需要配置加速!

sudo yum install -y yum-utils

在这里插入图片描述

配置K8s镜像源加速

如果这个步骤不配置,需要在centos中开启科学上网,算了还是配置一下吧。

vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

执行完上述操作之后复制给其他的三台worker节点机器


scp /etc/yum.repos.d/kubernetes.repo worker01:/etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo worker02:/etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo worker03:/etc/yum.repos.d/

在这里插入图片描述

配置时间同步

下面这个操作四台机器都需要执行,这里有一个小插曲就是出现这个,上面说的命令执行时候最好是一段段分开执行,不然会出现下面的报错,这展示一下执行完的效果。

yum -y install ntpdate # 安装软件
ntpdate cn.pool.ntp.org # 同步网络时间

crontab -e
* * * * * /usr/sbin/ntpdate cn.pool.ntp.org		# 定时任务同步时间,每分钟执行一次

重启定时任务
service crond restart

在这里插入图片描述
在这里插入图片描述

安装Docker-CE和Containerd服务

下面四台机器都需要执行,最好是分开执行。

yum install -y containerd.io


# 生成containerd配置文件
containerd config default > /etc/containerd/config.toml

vim /etc/containerd/config.toml
# 修改/etc/containerd/config.toml,只需改动一下内容
SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

在这里插入图片描述

创建/etc/crictl.yaml文件
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

在这里插入图片描述

配置Containerd镜像加速器
vim /etc/containerd/config.toml

config_path = "/etc/containerd/certs.d" #指定containerd的证书存放目录

在这里插入图片描述

创建证书等目录文件
# 创建目录
mkdir /etc/containerd/certs.d/docker.io/ -p

vim /etc/containerd/certs.d/docker.io/hosts.toml		# 创建文件

# 内容如下
[host."https://6yqx5sih.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
capabilities = ["pull","push"]

在这里插入图片描述

重启Containerd来使配置生效
systemctl restart containerd

在这里插入图片描述

安装Docker,配置Docker镜像加速
yum install -y docker-ce
systemctl enable docker

vim /etc/docker/daemon.json

{
    "registry-mirrors":[
        "https://6yqx5sih.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com"
    ]
}

systemctl restart docker

安装部署Kubernetes集群

安装Kubernetes集群需要的包

四台机器都执行

yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0

在这里插入图片描述

配置开机自启动
#开机自启
systemctl enable kubelet
Kubeadm初始化Kubernetes集群

这里需要说明一下就是执行下面这个命令之后。会在你执行命令的路径下出现kubeadm.ymal这个文件,修改即可
在这里插入图片描述

kubeadm config print init-defaults > kubeadm.ymal

修改配置信息

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.153.180	# ip地址
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: xiaolumaster1	# 主机
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers	# 阿里云镜像仓库
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16	# pod网段
  serviceSubnet: 10.96.0.0/12	# service网段
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

kubeadm初始化Kubenetes集群
kubeadm init --config=kubeadm.ymal --ignore-preflight-errors=SystemVerification

在这里插入图片描述

配置Kubectl配置文件config

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # 将config拷过来更名

sudo chown $(id -u):$(id -g) $HOME/.kube/config # 设置权限

在这里插入图片描述

查看k8s集群
kubectl get nodes
扩容Kubernets集群

在master节点上执行

kubeadm token create --print-join-command

执行完上述的命令之后,会出现下面的join命令,然后将下面的命令在worker节点执行并进行加入
在这里插入图片描述
在这里插入图片描述
加入完成之后,色现在都是None,通常来讲我们是将另外三个none角色的节点称之为工作节点,在controller中将它们两个设置为worker即可

kubectl label node worker01 node-role.kubernetes.io/worker=worker
kubectl label node worker02 node-role.kubernetes.io/worker=worker
kubectl label node worker03 node-role.kubernetes.io/worker=worker

在这里插入图片描述

安装网络插件Calico

下载文件信息
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
执行文件加载命令
kubectl apply -f calico.yaml

在这里插入图片描述
在这里插入图片描述

安装可视化界面kuboard

执行docker安装命令

sudo docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 80:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://192.168.65.10:80" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /root/kuboard-data:/data \
  eipwork/kuboard:v3

在这里插入图片描述
访问登录默认用户名密码
admin Kuboard123
在这里插入图片描述

配置集群信息

按照下图所示进行
在这里插入图片描述
在这里插入图片描述
配置完成之后可以在自己的集群下建立个性化的节点信息
在这里插入图片描述
在这里插入图片描述

致谢

最后感谢大佬的干货文章分享,然后要是上述有不清楚的地方可以结合下面文章一起查看就能轻易上手搭建出K8s服务。
https://blog.csdn.net/weixin_45248492/article/details/139200457?spm=1001.2014.3001.5506

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

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

相关文章

iptables防火墙的通俗理解,和k8s中的iptables策略使用

iptables是什么&#xff1f; 是ip table s ip 表格 多个 就是 多个和ip有关系的表格 什么是ip&#xff1f; 每个网络设备的唯一标识 有这个&#xff0c;能和别的有ip的设备聊天 没这个&#xff0c;得想别的办法 拿四版本来说 ip是32个二进制数 比如…

JAVA并发编程JUC包之CAS原理

在JDK 1.5之后&#xff0c;java api中提供了java.util.concurrent包&#xff0c;简称JUC包。这个包定义了很多我们非常熟悉的工具类&#xff0c;比如原子类AtomicXX&#xff0c;线程池executors、信号量semaphore、阻塞队列、同步器等。日常并发编程要用的熟面孔基本都在这里。…

Rk3588 Android12 AIDL 开发

AIDL (Android Interface Definition Language) 和 HIDL (HAL Interface Definition Language) 都是 Android 系统中用于定义接口的工具&#xff0c;但它们有不同的用途和特性。 AIDL (Android Interface Definition Language) 用途&#xff1a; 主要用于应用程序之间的进程间…

基于SpringBoot的智能物流仓库管理系统-源代码-论文

&#x1f4a5;&#x1f4a5;源码和论文下载&#x1f4a5;&#x1f4a5;&#xff1a;基于SpringBoot的智能物流仓库管理系统-源代码-论文-数据库 1. 系统介绍 物流快递仓库管理是一项非常繁琐复杂的工作&#xff0c;每天要处理大量的单据数据&#xff0c;包括入库、出库、退库、…

Web:攻防世界unseping

目录 一、初见 二、解题步骤 一、初见 刚拿到这个题目&#xff0c;可以发现是一串PHP代码&#xff0c;关注到unserialize(base64_decode($ctf))函数&#xff0c;就知道是考php反序列化。 审计PHP类ease&#xff1a; __construct($method, $args) &#xff1a;构造器需要传入两…

k8s中的层级结构,及节点组件的作用

可以从三个层面来看待k8s集群 第一个层 是client主机 为什么要有client主机 不是在控制节点上管理计算节点吗 是的 但是&#xff0c;当有多个k8s集群需要管理的时候 一般不会每管理一个集群&#xff0c;就登录到那个集群的控制节点上 这样来来回回切换登录 client主机…

电路分析 ---- 加法器

1 同相加法器 分析过程 虚短&#xff1a; u u − R G R G R F u O u_{}u_{-}\cfrac{R_{G}}{R_{G}R_{F}}u_{O} u​u−​RG​RF​RG​​uO​ i 1 u I 1 − u R 1 i_{1}\cfrac{u_{I1}-u_{}}{R_{1}} i1​R1​uI1​−u​​&#xff1b; i 2 u I 2 − u R 2 i_{2}\cfrac{u_{…

同时播放多个视频

介绍一款小众的视频播放器&#xff0c;之前有小伙伴找那种可以同时播放多个视频的软件&#xff0c;“恒硕加播放”可以做到这一点&#xff0c;功能不是太多&#xff0c;但是日常播放是足够了。 同时播放多个视频控制多个视频跳到指定进度同时暂停/播放/停止/静音/倍速浏览系统…

金属3D打印与压铸模具的融合:创新引领制造新纪元

步入工业4.0的新纪元&#xff0c;3D打印技术犹如一股强劲的东风&#xff0c;为制造业的转型升级插上了智慧的翅膀。作为铸造领域的核心&#xff0c;压铸模具在工业领域扮演着不可或缺的角色&#xff0c;其重要性不言而喻。然而&#xff0c;面对日益多样化的压铸件需求&#xff…

力扣最热一百题——和为K的子数组

目录 题目链接&#xff1a;560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;暴力枚举 Java写法&#xff1a; C写法&#xff1a; 解法二&#xff1a;前缀和哈希表 计算子数组和 如何优化问题 代码解…

混合部署 | 在RK3568上同时部署RT-Thread和Linux系统-迅为电子

RT-Thread 是一个高安全性、实时性的操作系统&#xff0c;广泛应用于任务关键领域&#xff0c;例如电力、轨道交通、车载系统、工业控制和新能源等。它的加入让 RK3568 能够在保证系统实时性和安全性的同时&#xff0c;灵活处理复杂的任务场景。 在一般情况下&#xff0c;iTOP-…

AI聊天应用不能上架?Google play对AI类型应用的规则要求是什么?

随着生成式AI模型的广泛应用&#xff0c;很多开发者都有在开发AI应用或将其整合到应用中。我们知道&#xff0c;谷歌是非常注重应用生态的&#xff0c;去年开始就推出了一些针对生成式AI应用的政策&#xff0c;对AI应用的内容质量和合规性问题提出了一些要求。 几天前&#xff…

Deep Ocr

1.圈出内容,文本那里要有内容.然后你保存,并导出数据集. 2.找出deep_ocr_recognition_training_workflow.hdev 文件.修改“DatasetFilename : Test.hdict” 310行 write_deep_ocr (DeepOcrHandle, BestModelDeepOCRFilename) 3.推理test.hdev 但发现很慢&#xff0c;没有mlp…

STM32快速复习(九)RTC时钟模块

文章目录 前言一、RTC是什么&#xff1f;RTC的工作原理&#xff1f;二、库函数以及示例1.标准库函数2.示例代码 总结 前言 STM32 的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xf…

ARM----时钟

时钟频率可以是由晶振提供的,我们需要高频率,但是外部接高的晶振会不稳定,所有使用PLL(锁相环)来放大频率。接下来就让我们学习用外部晶振提供的频率来配置时钟频率。 一.时钟源的选择 在这里我们选择外部晶振作为时钟源,通过查看芯片手册和原理图来看我们的时钟源。 这是…

2024高教社杯全国大学生数学建模竞赛C题解析 | 思路 代码 论文

C题 农作物种植策略 完整论文模型的建立与求解数据清洗问题一的建模与求解问题二的建模与求解问题三的建模与求解 代码第一问 完整论文 本题是一个运筹优化问题。 对于第一问&#xff0c;题目要求在假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于2023年保…

信号的捕捉处理

文章目录 4 信号的捕捉处理4.1 内核如何实现信号的捕捉4.2 sigaction4.2.1 使用这个函数对2号信号进行捕捉4.2.2 pending位图什么时候由1变04.2.3 不允许信号重复发送 5. 其他5.1 可重入函数5.2 volatile5.3 SIGCHLD信号5.4 信号生命周期 4 信号的捕捉处理 4.1 内核如何实现信…

鸿蒙(API 12 Beta6版)图形加速【Vulkan平台】超帧功能开发

业务流程 基于Vulkan图形API平台&#xff0c;集成超帧内插模式的主要业务流程如下&#xff1a; 用户进入超帧适用的游戏场景。游戏应用调用[HMS_FG_CreateContext_VK]接口创建超帧上下文实例。游戏应用调用接口配置超帧实例属性。包括调用[HMS_FG_SetAlgorithmMode_VK]&#x…

第T11周:使用TensorFlow进行优化器对比实验

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09; 二、导入数据1、导入数据2、检查数据3、配置数据集4、数据可视化 三、…

淘宝和微信支付“好”上了,打翻了支付宝的“醋坛子”?

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 最近&#xff0c;淘宝将全面接入微信支付的消息&#xff0c;在整个互联网圈里炸开了锅。 虽说阿里系平台与腾讯之间“拆墙”的消息&#xff0c;早就不算是啥新鲜事了。而且进一步互联互通&#xff0c;无论是对广大用户&…