kubeadm搭建单master多node的k8s集群--小白文,图文教程
参考文献
K8S基础知识与集群搭建
kubeadm搭建单master多node的k8s集群—主要参考这个博客,但是有坑,故贴出我自己的过程,坑会少很多
注意:
- 集群配置是:一台master:zabbixagent-k8smaster,两台node:k8snode1和k8snode2
- 当没有明说master机器做什么或者node机器做什么时,所有操作步骤默认是三台机器都要进行配置
- 操作系统:centos 7,且master的cpu要配置2核及以上,否则跑不动k8s!!!
1.环境准备
a.修改机器的ip地址并设置为静态ip
- vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b841150d-bab6-4e52-802d-83c990f6b00f
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.0.50
NETMASK=255.255.255.0
GATEWAY=192.168.0.2
DNS1=192.168.0.2
上述代码中主要设置:
BOOTPROTO=static
IPADDR=your ip
NETMASK=your netmask
GATEWAY=your gateway
DNS1=your dns
- 修改后重启生效:systemctl restart network
b.修改主机名
- 修改主机名:hostnamectl set-hostname yournmae && bash
- master IP:192.168.0.51

- Node1 IP:192.168.0.52

- Node2 IP:192.168.0.53

c.关闭selinux和关闭防火墙
- 关闭selinux:
- sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
- 重启以生效:reboot
- 使用getenforce查看selinux的状态

- 关闭防火墙
- systemctl stop firewalld && systemctl disable firewalld
d.修改hosts⽂件
- 目的:让各个节点都能够通过主机名访问到其他节点。修改每个机器的/etc/hosts⽂件
- 每台机器执行以下命令:
echo '192.168.0.51 zabbixagent-k8smaster
192.168.0.52 k8snode1
192.168.0.53 k8snode2' >> /etc/hosts
其中ip地址及对应的主机名改为你自己对应的。
- 查看修改后的hosts文件

e.机器上配置 yum 源
- 删除原有的yum源:rm -rf /etc/yum.repos.d/*.repo
- 下载centos7的reposity(因为我的操作系统是centos):wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo (如果没有wget,去 http://mirrors.aliyun.com/repo/ 下载CentOS-Base.repo,再上传CentOS-Base.repo文件到/etc/yum.repos.d/目录下)
- 清楚缓存:yum clean all && yum makecache
- 安装lrzsz、scp、vim、wget、net-tools:yum install -y lrzsz scp vim wget net-tools yum-utils
f.配置国内 docker 的 repo、epel 源
- 下载repo:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 下载epel源:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- 查看文件:ls /etc/yum.repos.d/

g.配置主机间免密登录-命令按先后步骤执行(注意看本节每个字)
- 目的:每台机器设置免密登录,因为k8s集群中的各个节点之间需要通过 ssh 进行通信
- 生成密钥:ssh-keygen(一路回车)–注意:下方图片横线处,如果没有生成这个或者接下来的步骤执行不成功,再次执行“ssh-keygen”命令

- 将本地生成的密钥文件和私钥文件拷贝到zabbixagent-k8smaster节点(此处是你自己的节点名字):ssh-copy-id zabbixagent-k8smaster --注意:下方图片横线处,需要输入zabbixagent-k8smaster的密码。

- 将本地生成的密钥文件和私钥文件拷贝到k8snode1节点(此处是你自己的的节点):ssh-copy-id k8snode1 --注意:下方图片横线处,需要输入k8snode1的密码。

- 将本地生成的密钥文件和私钥文件拷贝到k8snode2节点(此处是你自己的节点):ssh-copy-id k8snode2 --注意:下方图片横线处,需要输入k8snode2的密码。

- 上面是在zabbixagent-k8smaster执行了“ssh-keygen、ssh-copy-id zabbixagent-k8smaster、ssh-copy-id k8snode1、ssh-copy-id k8snode2”,,这些命令还需要在k8snode1和k8snode2执行一遍
h.关闭 swap 分区
- 目的:swap交换分区,在机器内存不够时会使用,但是swap分区的性能较低,k8s设计时为了提升性能,默认不允许使用交换分区。kubeadm初始化的时候会检查是否开启了swap分区,如果开启了,会报错,所以需要关闭swap分区。如果不想关闭交换分区,可以使用–ignore-preflight-errors=Swap参数忽略检查。
- 在master节点上:vim /etc/fstab,然后注释掉/dev/mapper…

- 在两个节点是上:vim /etc/fstab,需要注释掉/dev/…和uuid

i.修改机器内核参数
- 目的:k8s需要修改机器内核参数,使其支持路由转发和桥接,否则会报错
- 三台机器分别执⾏修改内核参数
- vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
- modprobe br_netfilter
- sysctl -p /etc/sysctl.d/k8s.conf

j.配置安装k8s组件的yum源
- vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
k.配置时间同步
- 目的:使ntpdate同步时间
- 安装ntpdate:yum install -y ntpdate
- 与ntp服务器同步时间:ntpdate cn.pool.ntp.org
- 将时间同步命令写⼊:crontab -e
0 2 * * * /usr/sbin/ntpdate cn.pool.ntp.org
- 重启crontab服务:systemctl restart crond
m.开启 ipvs
- ipvs(IP Vertual Server):实现了传输层的负载均衡,是一种高性能、可扩展的负载均衡方案。
- Linux内核的一部分,承担着负载均衡的功能。
- 通过ipvsadm工具来配置ipvs。
- ipvs可基于TCP和UDP的服务请求转发到真实服务器上
- ipvs和iptables的区别:
- ipvs是在传输层工作,iptables是在网络层工作。
- ipvs是基于内容的负载均衡,iptables是基于地址的负载均衡。
- ipvs为大型集群提供了高性能的负载均衡,iptables为小型集群提供了负载均衡。
- ipvs支持更多的负载均衡算法,iptables只支持轮询算法。
- ipvs支持服务器健康检查、连接重试等功能,iptables不支持。
- 准备ipvs.modules⽂件:vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1 if [ 0 -eq 0 ]; then /sbin/modprobe ${kernel_module} fi
done
- 修改ipvs.modules文件权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

n.安装基础软件包
yum install -y device-mapper-persistent-data lvm2 net-tools conntrack-tools wget nfs-utils telnet gcc gcc-c++ make cmake libxml2-devel openssl-devel curl-devel unzip sudo ntp libaio-devel ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet
o.安装 iptables
- iptables是Linux系统上常用的防火墙软件,用于设置、审计和检查IPv4和IPv6数据包过滤规则以及NAT表的工具。
- 安装iptables:yum install -y iptables-services
- 禁⽤iptables:systemctl stop iptables && systemctl disable iptables
- 清空防⽕墙规则:iptables -F
p.安装docker
- 安装docker-ce和containerd:yum install -y docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io
- 启动docker:systemctl enable docker && systemctl start docker
q.配置docker镜像加速器
- 创建配置⽂件:mkdir -p /etc/docker
- 创建daemon.json⽂件:vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://rsbud4vc.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

- 加载配置、重启docker:systemctl daemon-reload && systemctl restart docker
2.kubernetes集群部署
a.安装初始化Kubernetes需要软件包
- kubeadm: 用于初始化集群的指令;kubelet: 运行在集群所有节点上,负责启动 Pod 和容器等;kubectl: 用于与集群通信的命令行工具
- 安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 --nogpgcheck
- 开机启动kubelet:systemctl enable kubelet
- 下载k8s所需要的镜像,并load到docker
- k8simage-1-20-6.tar.gz下载链接:https://pan.baidu.com/s/1K4n61u8yM3sUciiQoKlMPg 提取码:wjq9
- docker load -i k8simage-1-20-6.tar.gz

b.使⽤kubeadm初始化k8s集群
- 只在主节点(master)上执行此命。 注意:apiserver-advertise-address=your master IP
kubeadm init --kubernetes-version=v1.20.6 \
--apiserver-advertise-address=192.168.0.51 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/16 \
--ignore-preflight-errors=SystemVerification
上面命令行的含义:
--kubernetes-version 指定k8s版本
--apiserver-advertise-address 指定apiserver的地址
--image-repository 指定镜像仓库地址
--pod-network-cidr 指定pod网络地址
--ignore-preflight-errors 忽略检查

c.配置kubectl的配置文件config
- 目的:操作相当于对 kubectl 命令行工具进行初始化,使其能够与 Kubernetes 集群通信
- 只在主节点上执行下方命令
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 查看集群状态:kubectl get nodes(由于还没有安装网络插件,所以下图状态是NotReady)

- 只在主节点上生成配置文件并修改:kubeadm config print init-defaults > a.yaml
- 修改a.yaml:vim a.yaml(下方代码片中name: zabbixagent-k8smaster这处需要改为自己的master的名称,然后就可以全部复制粘贴,将a.yaml替换)
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 10.104.26.192bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockimagePullPolicy: IfNotPresentname: zabbixagent-k8smastertaints: 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.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.20.6
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}
- 在三台机器上都执行,修改containerd配置⽂件:
- containerd config default > /etc/containerd/config.toml
- vi /etc/containerd/config.toml
# 添加下⾯内容
SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

- 三台机器重启运行时:systemctl restart containerd
- 在主节点上,重新初始化主节点:kubeadm init --config a.yaml(如果此步骤报错,可能的情况之一是:a.yaml中两个apiVersion:应该改为kubeadm.k8s.io/v1beta2)

- mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config
d.扩容k8s集群-添加node节点
- 目的:将另外两台节点加入到集群中
- 两台node机器分别执行:
- systemctl restart containerd
- 然后在主节点执行:kubeadm token create --print-join-command(这一步是获取node节点加入master所需的token等信息。)
- 主节点打印出来的东西,复制到两个node上执行,看下面这张图

- 在master上查看集群信息:kubectl get nodes

解释:
1.ROLES为<none>,说明这个节点时工作节点
2. STATUS为NotReady,说明这个节点还没有安装网络插件
- 主节点上执行。将两个节点的roles设置为workers:
- kubectl label node k8snode1 node-role.kubernetes.io/worker=worker
- kubectl label node k8snode2 node-role.kubernetes.io/worker=worker

3.布置⽹络插件
a.安装⽹络插件
- 去https://github.com/hqs2212586/docker-study/blob/main/calico.yaml下载calico.yaml,然后上传到master节点
- master上执行,使用yaml文件安装calico.yaml:kubectl apply -f calico.yaml
- master执行,查看节点状态:kubectl get nodes

b.测试在k8s创建pod是否可以正常访问网络
- 在两台node节点拉取busybox:1.28镜像:docker pull busybox:1.28
![[image-20231211185738265.png]] - 在主节点创建 pod:kubectl run busybox --image=busybox:1.28 --restart=Never --rm -it busybox – sh(当出现/ #时ping一个网址,能ping通说明网络是通的)

c.测试k8s集群部署tomcat服务
- 在两个node节点 pull tomcat:docker pull tomcat:8.5-jre8-alpine
- 在 master节点创建tomcat.yaml:vim tomcat.yml
apiVersion: v1 #pod属于k8s核心组v1
kind: Pod #创建的是一个Pod资源
metadata: #元数据name: demo-pod #pod名字namespace: default #pod所属的名称空间labels:app: myapp #pod具有的标签env: dev #pod具有的标签
spec:containers: #定义一个容器,容器是对象列表,下面可以有多个name- name: tomcat-pod-java #容器的名字ports:- containerPort: 8080image: tomcat:8.5-jre8-alpine #容器使用的镜像imagePullPolicy: IfNotPresent
- 在 master节点创建pod:kubectl apply -f tomcat.yaml

- 在 master节点创建tomcat-service.yml:vim tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:name: tomcat
spec:type: NodePortports:- port: 8080nodePort: 30080selector:app: myappenv: dev
- 在 master节点创建pod:kubectl apply -f tomcat-service.yaml
- 查看服务状态:kubectl get svc

- 访问三台机器ip加30080,看到Tomcat初始界面


相关文章:
kubeadm搭建单master多node的k8s集群--小白文,图文教程
参考文献 K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客,但是有坑,故贴出我自己的过程,坑会少很多 注意: 集群配置是:一台master:zabbixagent-k8smaster,两台…...
CSS层叠样式表一
1,CSS简介 1.1 CSS-网页的美容师 CSS的主要使用场景就是美化网页,布局页面的 CSS也是一种标记语言 CSS主要用于设置HTML页面中的文本内容(字体,大小,对齐方式等)、图片的外形(宽高、边框样式…...
【等保】安徽省等保测评机构名单看这里!
随着互联网技术的飞速发展,网络安全已成为国家安全、社会稳定的重要保障,因此我们严格贯彻落实等保政策。等保测评机构在等保制度执行过程中发挥着重要的作用。现在我们就来看看安徽省等保测评机构有哪些? 【等保】安徽省等保测评机构名单看…...
学习IO的第八天
作业:使用信号灯循环输出ABC sem.c #include <head.h>union semun {int val; /* Value for SETVAL */struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */unsigned short *array; /* Array for GETALL, SETALL */struct seminf…...
【clickhouse】ck远程访问另一个ck
代码实现 CREATE TABLE tmp.tbsas remote( host, database_name, table_name, user, password );就相当于从ck1直接请求ck2 参考文档 https://github.com/ClickHouse/ClickHouse/issues/15295 https://clickhouse.com/docs/zh/sql-reference/table-functions/remote...
Django的logging-日志模块的简单使用方法
扩展阅读: Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 现在有下面的Python代码: # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)现…...
argparse --- 命令行选项、参数和子命令解析器
3.2 新版功能. 源代码: Lib/argparse.py 教程 此页面包含该 API 的参考信息。有关 Python 命令行解析更细致的介绍,请参阅 argparse 教程。 argparse 模块可以让人轻松编写用户友好的命令行接口。 程序定义它需要哪些参数,argparse 将会知…...
洛谷 P8802 [蓝桥杯 2022 国 B] 出差
文章目录 [蓝桥杯 2022 国 B] 出差题目链接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE [蓝桥杯 2022 国 B] 出差 题目链接 https://www.luogu.com.cn/problem/P8802 题目描述 A \mathrm{A} A 国有 N N N 个城市,编号为 1 … N …...
fastadmin配置教程
第一. 打开小皮,创建一个网站 第二. 打开fastadmin官网,下载压缩包 下载好后是这个样子 打开网站的根目录,将这个压缩包压缩到你网站的根目录里 第三,小皮里面创建一个数据库 第四,然后打开网站,输入创…...
golang游戏服务器 - tgf系列课程01
TGF框架的特点和功能 课程介绍了TGF框架的特点和功能在第一节课程中我们并不会介绍框架的使用。我们希望在这节课程中,能让你了解到tgf是一个什么样的框架 概要 本节课程介绍了TGF框架的特点和功能。TGF是一个开箱即用的服务器框架, 适合中小型团队和独立开发者进行游戏开发。…...
react dom的diff理解及性能优化
diff的三大过程 当某个值变化时,他从根组件寻找 (key,state,props,context) 当父组件稳定时,react会跳过子组件的props的对比 只有当当前组件值改变时,从他开始,所有的子孙节点都会对比props props是全等比较,所以&am…...
【acwing】92. 递归实现指数型枚举
穿越隧道 递归枚举、位运算 方法① 从1到n,顺序访问每位数,是否选择,每位数有两种状态,选1或不选0. AC代码如下: #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…...
【面试】Java最新面试题资深开发-分布式系统中的CAP理论
问题六:分布式系统中的CAP理论 分布式系统的设计涉及到CAP理论,即一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)。请解释一下CAP理论是什么&#x…...
Windows下使用CMD修改本地IP
在网络适配器界面查看当前网线连接的哪个网口,我当前连的是 以太网 这个名字的: 在windows下使用管理员权限打开CMD命令工具,输入如下命令(如我想本地ip改成192.168.2.4): netsh interface ip set address "以太网" st…...
20231211-DISM++安装win10-22h2-oct
20231211-DISM安装win10-22h2-oct 一、软件环境 zh-cn_windows_10_consumer_editions_version_22h2_updated_oct_2023_x64_dvd_eb811ccc.isowepe x64 v2.3标签:win10 22h2 wepe dism分栏:WINDOWS 二、硬件环境 8G或以上的有PE功能的启动U盘一个台式机…...
前端知识笔记(五)———前端密钥怎么存储,才最安全?
前端密钥存储安全是非常重要的,具体原因如下: 保护敏感数据:密钥用于保护敏感数据的安全性。如果密钥泄露,攻击者可能能够访问和篡改敏感数据,导致数据泄露、数据被篡改或系统被入侵。 防止恶意使用:在前端…...
【智能家居】智能家居项目
智能家居项目目录 项目目录结构 完整而典型的项目目录结构 CMake模板 CMake编译运行 README.md 项目说明文档 智能家居项目目录 【智能家居】面向对象编程OOP和设计模式(工厂模式) 【智能家居】一、工厂模式实现继电器灯控制 【智能家居】二、添加火灾检测模块(…...
在AWS Lambda上部署标准FFmpeg工具——Docker方案
大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 启动EC23 编写调用FFmpeg的代码4 生成docker镜像4.1 安装和启动Docker服务4.2 编写Dockerfile脚本4.3 生成镜像 5 推送镜像5.1 创建存储库5.2 给EC2赋予角色5.2.1 创建策略5.2.2…...
C#网络应用程序(Web页面浏览器、局域网聊天程序)
目录 一、创建Web页面浏览器 1.示例源码 2.生成效果 二、局域网聊天程序 1.类 2.服务器端 3.客户端 一、创建Web页面浏览器 TextBox 控件用来输入要浏览的网页地址,Button控件用来执行浏览网页操作, WebBrowser控件用来显示要浏览的网页。这个控…...
MacOS 14挂载NTFS 硬盘的最佳方式(免费)
categories: [Tips] tags: MacOS 写在前面 众所周知, MacOS 上面插入 NTFS磁盘格式的话, 磁盘可以向 Mac 写入数据, 但是 Mac 上的数据不能写入磁盘(这是因为 MacOS 的内核扩展禁用了 NTFS 这个格式, 可能是出于安全性或其他原因) 之前一直是使用某 pojie 的 NTFS 工具的, 虽然…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
