个人博客站—运维鹿:http://www.kervin24.top/
CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?type=blog
 

一、kubernetes介绍

Kubernetes本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行过管理。它的目的就是实现资源管理的自动化,主要提供了以下的主要功能:

  • 自我修复:一旦某个容器崩溃,能够在1秒中左右迅速启动新的容器

  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务

  • 负载均衡:如果一个服务启动了多个容器,能够自动实现请求的负载均衡

  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  • 存储编排:可以根据容器自身的需求自动创建存储卷

1657245546539

二、 集群环境搭建

2.1、集群类型

Kubernertes集群大体分为两类:一主多从多主多从

  • 一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适合用于测试环境

  • 多主多从:多台master节点和多台node节点,搭建麻烦,安全性高,适合用于生产环境

image-20250802201550110

2.2、安装方式

Kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点kubernetes的工具

  • kubeadm:应该用于快速搭建kubernetes集群的工具

  • 二进制包:从官网下载每个组件的二进制包,依次去安装

2.3、环境搭建

2.3、环境搭建1.33版【kubeadm方式】

主机名IP配置系统发行版
master192.168.80.104C2GCentOS Linux release 7.8
node1192.168.80.114C2GCentOS Linux release 7.8
node2192.168.80.124C2GCentOS Linux release 7.8
2.3.1、搭建三台虚拟机

搭建k8s,系统发行版需要至少centos7.5,需要预留/var目录下预留≥5G的足够的空间

 1  这里采用了阿里云7.8的CentOS-7-x86_64-Minimal-2003.iso链接地址:https://mirrors.aliyun.com/centos-vault/7.8.2003/isos/x86_64/?spm=a2c6h.25603864.0.0.454a60bdb8NRXT​2 如果是挂载新iso,利用F2或者F12进BIOS,改光盘驱动安装iso​3、更改centos的yum源为阿里云cd /etc/yum.repos.d/mv CentOS-Base.repo CentOS-Base.repo.backupcurl https://mirrors.aliyun.com/repo/Centos-7.repovi  CentOS-Base.repo 将curl内容复制进去​4、yum install -y wgt 验证成功

2.3.2、主机名解析
 主机名成解析  编辑三台服务器的/etc/hosts文件,添加下面内容# 192.168.80.10  master# 192.168.80.11  node1# 192.168.80.12  node2

2.3.3、时间同步

kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间

 #启动chronyd服务[root@master ~]# systemctl start chronyd#设置chronyd服务开机自启[root@master ~]# systemctl enable chronyd#chronyd服务启动稍等几秒钟,就可以使用date命令验证时间了[root@master ~]# date2025年 08月 04日 星期一 17:08:57 CST

2.3.4、禁用iptables和firewalld服务

kubernetes和docker在运动中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

 #关闭firewalld服务[root@master ~]# systemctl stop firewalld[root@master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.​#关闭iptables服务[root@master ~]# systemctl stop iptablesFailed to stop iptables.service: Unit iptables.service not loaded.

2.3.5、禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

 #编辑/etc/selinux/config文件,修改SELINUX的值为disabled#注意修改完毕之后需要重启linux服务SELINUX=disabled

image-20250805182023236

#通过getenforce来命令检查是否生效

image-20250805182534038

2.3.6、禁用swap分区

swap分区指的是虚拟内存分区,它的作用是在物

 #编辑分区配置文件/etc/fstab,注释掉swap分区一行#注意修改完毕之后需要重启linux服务[root@master ~]# vim /etc/fstab /dev/mapper/centos00-root /                       xfs     defaults        0 0UUID=77663676-1afb-461c-997d-26c7b5e1f096 /boot                   xfs     defaults        0 0#/dev/mapper/centos00-swap swap                    swap    defaults        0 0

理内存使用完之后,将磁盘空间虚拟成内存来使用。启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap,就需要在集群安装过程当中通过明确的参数进行配置说明。

--------------------------------------------

检查是否swap为禁用状态

image-20250807202405778

2.3.7、修改linux的内核参数
 #修改linux的内核参数,添加网桥过滤和地址转发功能#编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1​#重新加载配置[root@master ~]# sysctl -p​#加载网桥过滤模块[root@master ~]# modprobe br_netfilter​#查看网桥过滤模块是否加载成功[root@master ~]# lsmod | grep br_netfilterbr_netfilter           22256  0 bridge                151336  1 br_netfilter

2.3.8、配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果需要使用它,需要手动载入ipvs模块

 #1 安装ipset和ipvsadm[root@master yum.repos.d]# yum install ipset ipvsadmin -y​#2 添加需要加载的模块写入脚本[root@master yum.repos.d]#cat <<EOF > /etc/sysconfig/modules/ipvs.modules#!/bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4EOF​#3 为脚本文件添加执行权限[root@master modules]# chmod +x /etc/sysconfig/modules/ipvs.modules ​#4 执行脚本文件[root@master modules]# /bin/bash /etc/sysconfig/modules/ipvs.modules ​#5 查看对应的模块是否加载成功[root@master modules]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4 nf_conntrack_ipv4      15053  0 nf_defrag_ipv4         12729  1 nf_conntrack_ipv4ip_vs_sh               12688  0 ip_vs_wrr              12697  0 ip_vs_rr               12600  0 ip_vs                 145497  6 ip_vs_rr,ip_vs_sh,ip_vs_wrrnf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

-----------------------------------------------------

执行完以上所有步骤,需要重新启动linux系统

reboot

2.4、安装docker和cri-dockerd

三台都需要安装

2.4.1、安装docker

详见Docker基本管理 - 运维鹿 docker基础教程

1、安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2-------------------------------------yum-utils:提供了yum-config-manager工具。devicemapper:是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。device mapper:存储驱动程序需要device-mapper-persistent-data和lvm2。​2、设置阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo​3、安装Docker-CE并设置为开机自动启动yum install -y docker-ce docker-ce-cli containerd.io-----------------------------------报错解决:这个报错是container-selinux版本低或者是没安装的原因yum 安装container-selinux 一般的yum源又找不到这个包需要安装epel源 才能yum安装container-selinux然后在安装docker-ce就可以了。########################wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum install epel-releaseyum makecacheyum install container-selinux####################systemctl start docker.servicesystemctl enable docker.service--------------------------------------------------安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。​​4、配置镜像加速配置修改配置文件/etc/docker/daemon.json(没有时新建该文件)。-------------------{"registry-mirrors": ["https://docker.xuanyuan.me" ,"https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]}---------------------systemctl daemon-reload ###然后重启Docker Daemon。systemctl restart docker

2.4.2、安装cri-dockerd

以下参考实战Kubernetes之快速部署 K8s 集群 v1.28.0-云社区-华为云

kubernetes1.24版本开始不再支持docker

因此,还需要安装cri-dockerd来用于为Docker提供一个能够支持K8S容器运行时标准的工具

#安装cri-dockerd
# 通过 wget 命令获取 cri-dockerd软件
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm# 通过 rpm 命令执行安装包
rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm#安装完成后修改配置文件(/usr/lib/systemd/system/cri-docker.service),
在 “ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://” 
这一行增加 “--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9”。#配置文件修改后,重新加载配置并开启 cri-dockerd 服务。
# 加载配置并开启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

2.5、安装kuberbetes组件

三台都需要安装

1、 #编辑/etc/yum.repos.d/kubernetes.repo,添加以下配置
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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF2、#安装kubeadm、kubelet和kubect1 (目前最新版本1.28-0)
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0#配置kubernet的cgroup
#编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"3、# 设置 kubelet 自启动
systemctl enable kubelet#在安装kubernetes集群之前,查看所需镜像可以通过下面命令查看
[root@master yum.repos.d]# kubeadm config images list
I0807 22:34:11.171481    4387 version.go:256] remote version is much newer: v1.33.3; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.15
registry.k8s.io/kube-controller-manager:v1.28.15
registry.k8s.io/kube-scheduler:v1.28.15
registry.k8s.io/kube-proxy:v1.28.15
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1

2.6、集群初始化

2.6.1、Master节点加入K8S集群

下面的操作只需要在master节点上执行

kubeadm init \--apiserver-advertise-address=192.168.80.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock \--ignore-preflight-errors=all相关参数解释:
apiserver-advertise-address:集群广播地址,用 master 节点的内网 IP。
image-repository:由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
kubernetes-version: K8s 版本,与上面安装的软件版本一致。
service-cidr:集群 Service 网段。
pod-network-cidr:集群 Pod 网段。
cri-socket:指定 cri-socket 接口,我们这里使用 unix:///var/run/cri-dockerd.sock。

image-20250808093409012

执行命令后耐心等待,直到安装完成,会出现以上内容。

其中,在以上返回结果中有 3 条命令需要立即执行,这是用来设置 kubectl 工具的管理员权限,执行之后就可以在 Master 节点上通过终端窗口使用 kubectl 命令。

# 在 Master 节点上执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.6.2、Node节点加入K8S集群

K8s 初始化之后,就可以在其他 2 个工作节点上执行 “kubeadm join” 命令,

因为我们使用了 cri-dockerd ,需要在命令加上 “–cri-socket=unix:///var/run/cri-dockerd.sock” 参数。

在master节点上,可重新生成并获取token和sha256
[root@master /]# kubeadm token create --print-join-command
kubeadm join 192.168.80.10:6443 --token uobpxl.g3wk6xz24ubdw0hi --discovery-token-ca-cert-hash sha256:fe73798d15cf93f4cd1051d85502237505aeddf0d78653a04664e9f4d167c44c# 在两个工作节点上执行
kubeadm join 192.168.80.10:6443 --token uobpxl.g3wk6xz24ubdw0hi \--discovery-token-ca-cert-hash sha256:fe73798d15cf93f4cd1051d85502237505aeddf0d78653a04664e9f4d167c44c \--cri-socket=unix:///var/run/cri-dockerd.sock#在master节点上执行get nodes查看集群节点状态        
[root@master /]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   NotReady   control-plane   23m   v1.28.2
node1    NotReady   <none>          26s   v1.28.2
node2    NotReady   <none>          7s    v1.28.2
注意到所有节点的状态都是 “NotReady”,这是由于集群还缺少网络插件,集群的内部网络还没有正常运作。

2.7、安装网络插件calico

kubernetes支持多种网络插件,比如flannel、calico、canal等等,本次选择calico

# 下载 Calico 插件部署文件
wget https://docs.projectcalico.org/manifests/calico.yaml通过vi编辑器修改 “calico.yaml”的4601和4602行
文件中的 “CALICO_IPV4POOL_CIDR” 参数,
需要与前面 “kubeadm init” 命令中的 “–pod-network-cidr” 参数一样(10.244.0.0/16)[root@master opt]# kubectl apply -f calico.yaml
#这里要稍微等一会,calico生效很慢,可以重启服务器尝试

image-20250808105117719

至此,kubernetes集群已经安装成功

image-20250808172832818

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

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

相关文章

MySQL高可用方案之MySQL InnoDB Cluster高可用架构实战指南:从零搭建到生产部署

MySQL InnoDB Cluster高可用架构实战指南:从零搭建到生产部署 一、引言:为什么选择MySQL InnoDB Cluster 在当今数据驱动的商业环境中,数据库高可用性已成为企业IT基础设施的核心需求。MySQL作为全球最受欢迎的开源关系型数据库,其高可用解决方案备受关注。而MySQL InnoD…

祝融号无线电工作频段

前面深入查证了旅行者1号的无线电工作频段&#xff1a; 旅行者1号无线电工作频段-CSDN博客 下面尝试查证我国祝融号无线电工作频段。 一、百度百科 来自百度百科&#xff1a; 我注意到一条关键信息&#xff1a; 这说明祝融号在国际上是有合作的&#xff0c;而不是我们国家单…

Kafka生产者相关原理

前言前面已经介绍了Kafka的架构知识并引出了Kafka的相关专业名称进行解释这次分享一下Kafka对生产者发送消息进行处理的运行机制和原理生产者发送消息两种方式同步发送消息程序中线程执行完消息发送操作之后会等待Kafka的消息回应ack默认等待30秒没有回应就会抛出异常等待时间和…

Python 获取对象信息的所有方法

在 Python 里&#xff0c;我们经常需要检查一个对象的类型、属性、方法&#xff0c;甚至它的源码。这对调试、学习和动态编程特别有用。今天我们就来聊聊获取对象信息的常见方法&#xff0c;按由浅入深的顺序来学习。 参考文章&#xff1a;Python 获取对象信息 | 简单一点学习…

vuhub Beelzebub靶场攻略

靶场下载&#xff1a; 下载地址&#xff1a;https://download.vulnhub.com/beelzebub/Beelzebub.zip 靶场攻略&#xff1a; 主机发现&#xff1a; nmap 192.168.163.1/24 端口扫描&#xff1a; nmap -p-65535 -A 192.168.163.152 发现没有额外端口。 页面扫描&#xff1…

开启单片机

前言&#xff1a;为未来拼搏的第n天&#xff0c;从单片机开始。为什么要学习单片机呢&#xff0c;单片机的工作涉及范围及其广如&#xff1a;消费电子&#xff0c;游戏机音响&#xff1b;工业控制&#xff1a;机器人控制&#xff1b;医疗设备&#xff0c;通信设备&#xff0c;物…

人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?

案例&#xff1a;鸢尾花数据集的聚类一.聚类简介神经网络能够从输入数据中自动提取有意义的特征&#xff0c;而竞争学习规则使得单层神经网络能够根据相似度将输入样本进行聚类&#xff0c;每个聚类由一个输出神经元代表并作为该类别的“原型”&#xff0c;从而实现对输入模式的…

Windows安装mamba全流程(全网最稳定最成功)

windows系统下安装mamba会遇到各种各样的问题。博主试了好几天&#xff0c;把能踩的坑都踩了&#xff0c;总结出了在windows下安装mamba的一套方法&#xff0c;已经给实验室的windows服务器都装上了。只要跟着我的流程走下来&#xff0c;大概率不会出问题&#xff0c;如果遇到其…

Autosar Dem配置-最大存储的DTC信息个数配置-基于ETAS软件

文章目录 前言 Autosar Dem相关配置 ETAS工具中的配置 生成文件分析 测试验证 总结 前言 诊断DTC开发中,会有故障快照和扩展数据的存储需求,但由于控制器的可用存储空间有限,所以无法存储所有DTC的信息,这时就需要限制存储的数量,本文介绍该参数在ETAS软件中的配置。 Au…

【MySQL】EXISTS 与 NOT EXISTS 深度解析:从原理到实战的完整指南

在复杂的业务查询中&#xff0c;我们常常需要判断“是否存在满足某条件的记录”或“找出不满足某些条件的记录”。这时&#xff0c;EXISTS 和 NOT EXISTS 子查询便成为强大的工具。它们不仅逻辑清晰、语义明确&#xff0c;而且在某些场景下性能远超 IN 或 JOIN。然而&#xff0…

面对信号在时频平面打结,VNCMD分割算法深度解密

“ 信号迷宫中的破壁者&#xff1a;VNCMD如何分解纠缠的时空密码&#xff1f;——从鲸歌到机械故障&#xff0c;宽带信号分解新纪元。”01—痛点直击&#xff1a;为什么传统方法集体失效&#xff1f;2017年&#xff0c;上海交大团队提出了一项突破性研究&#xff1a;变分非线性…

CSS优先级、HTTP响应状态码

CSS优先级 优先级&#xff1a;看CSS的来源、样式引入方式、选择器、源码顺序。 行内样式/内联样式&#xff1a;直接在HTML元素的style属性中编写CSS样式。这种方式适用于少量样式的情况&#xff0c;但不推荐在大规模开发中使用&#xff0c;因为它会使HTML文件变得冗长和难以维…

项目一系列-第2章 Git版本控制

第2章 Git版本控制 2.1 Git概述 Git是什么&#xff1f;Git是一个分布式版本控制工具&#xff0c;于管理开发过程中的文件。 Git有哪些作用&#xff1f; 远程备份&#xff1a;Git可以将本地代码备份到远程服务器&#xff0c;防止数据丢失。多人协作&#xff1a;Git运行多个开发者…

Java异常:认识异常、异常的作用、自定义异常

目录1.什么是异常&#xff1f;1&#xff09;运行时异常2&#xff09;编译时异常2.异常的作用1&#xff09;Java 异常在定位 BUG 中的核心作用2&#xff09;Java 异常作为方法内部特殊返回值的作用3&#xff09;自定义异常1.什么是异常&#xff1f; Error:代表的系统级别错误(属…

第十九天-输入捕获实验

一、输入捕获概述1、输入捕获框图2、输入捕获工作详解①设置输入捕获滤波器可以设置滤波&#xff0c;滤除一些高电平脉宽不足的脉冲信号。②设置捕获极性③输入捕获映射④输入捕获分频器这里的捕获是将计数器的值存入比较寄存器中&#xff0c;分频次的作用是设置几个上升沿/下降…

多线程问题,子线程同时操作全局变量,使用后需要清空吗 ?

背景&#xff1a;目前有一个全局变量 &#xff0c;某个方法中通过多线程&#xff0c;都操作这个变量&#xff0c;向这个全局变量中去添加元素&#xff0c;然后等所有子线程执行完了之后&#xff0c;对这个全局变量进行批量保存&#xff0c;然后这个全局变量还需要手动去清空吗&…

Netty知识储备:BIO、NIO、Reactor模型

学习Netty之前&#xff0c;首先先掌握这些基础知识&#xff1a;阻塞&#xff08;Block&#xff09;与非阻塞&#xff08;Non-Block&#xff09;&#xff0c;同步&#xff08;Synchronous&#xff09;与异步&#xff08;Asynchronous&#xff09;&#xff0c;Java BIO与NIO对比。…

用生成器守住架构,用 AI 放大效率:一套可落地的 AI 编程方法论

背景与问题 现实困境: 直接让 AI 产出整块业务代码&#xff0c;常常与现有架构风格、分层边界、依赖策略不一致&#xff0c;后续改造成本高&#xff1b;AI 对现实业务语境、领域规则难以精准把握&#xff1b;在既定模板成熟的场景下&#xff0c;代码生成器往往更快、更整齐。目…

码头岸电系统如何保障供电安全?安科瑞绝缘监测及故障定位方案解析

当岸电电网是TN-S系统时&#xff0c;船体未接专用接地线且船舶电网未与岸电零线接通&#xff0c;船舶电网发生单相接地故障时&#xff0c;人站在岸上触及船体会有触电危险&#xff0c;零线上可能出现高电压&#xff0c;单相接地电流大。当船体接专用接地线且船舶电网接入岸电零…

ESP32_u8g2移植

前言 U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD&#xff0c;并支持如SSD1306 SSD1315等多种类型的OLED驱动&#xff0c;几乎市面上常见都支持。 U8g2源码 download&#xff1a;https://github.com/olikraus/u8g21&#xff1a;环境 ESP32 S3(ESP32-S3-Dev…