虚拟机安装k8s集群
环境准备
- 主节点(Master Node):
- IP地址: 192.168.40.100
- 主机名: k8s-master
- 工作节点(Worker Node):
- IP地址: 192.168.40.101
- 主机名: k8s-node1
步骤 1: 配置虚拟机环境
1.1 设置主机名
在每台虚拟机上设置唯一的主机名:
#在主节点上执行
sudo hostnamectl set-hostname k8s-master
# 在工作节点上执行
sudo hostnamectl set-hostname k8s-node1
1.2 配置hosts文件
编辑/etc/hosts文件,添加所有节点的IP地址和主机名映射:
sudo vi /etc/hosts
添加如下内容:
192.168.40.100 k8s-master
192.168.40.101 k8s-node1
1.3 更新系统并安装依赖
sudo yum update -y
sudo yum install -y curl vim wget git
1.4 关闭防火墙和 SELinux
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
1.5 禁用交换分区(Kubernetes 要求)
sudo swapoff -a
sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
1.6 配置网络转发和桥接
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFsudo sysctl --system
步骤 2: 安装Containerd
2.1 安装Containerd
下载并安装Containerd:
# 下载 Containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.0/containerd-1.7.0-linux-amd64.tar.gz# 解压文件
sudo tar Cxzvf /usr/local containerd-1.7.0-linux-amd64.tar.gz# 创建 systemd 服务文件
sudo mkdir -p /usr/local/lib/systemd/system
sudo curl -o /usr/local/lib/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启动并启用 Containerd
sudo systemctl enable containerd
sudo systemctl start containerdcontainerd --version
2.2 配置 Containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
2.3 安装 runc
runc 是容器技术的核心组件之一,它负责根据 OCI(Open Container Initiative)规范创建和运行容器
Docker、containerd 等均依赖 runc
为什么要安装替换runc?
因为原本的runc有问题,不能使用。需要重新安装并替换。
# 1、安装 libseccomp
# 下载 libseccomp 源码包
wget https://github.com/seccomp/libseccomp/releases/download/v2.5.4/libseccomp-2.5.4.tar.gz# 解压文件
tar xf libseccomp-2.5.4.tar.gz# 进入解压后的目录
cd libseccomp-2.5.4# 安装依赖
sudo yum install gperf -y# 配置、编译并安装
./configure
make
sudo make install# 查找已安装的 libseccomp.so 文件
sudo find / -name "libseccomp.so"#2、安装runc
#下载并赋予执行权限
wget https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64
chmod +x runc.amd64
#查找现有 runc 的位置
which runc
备份现有的 runc 文件
#sudo mv /usr/local/sbin/runc /usr/local/sbin/runc.bak
#移动新版本的 runc 到目标位置
sudo mv runc.amd64 /usr/local/sbin/runc
2.4 启动并启用 Containerd
sudo systemctl restart containerd
sudo systemctl enable containerd
步骤 3: 安装Kubernetes组件
3.1 添加Kubernetes YUM仓库
# 创建 Kubernetes YUM 仓库文件
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
3.2 安装kubeadm, kubelet, 和 kubectl
sudo yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 --disableexcludes=kubernetes
3.3启动并启用 kubelet
sudo systemctl enable --now kubelet
步骤 4: 初始化集群
4.1 在主节点上初始化集群
在主节点(k8s-master)上运行以下命令来初始化Kubernetes集群:
192.168.0.0/16 是 calico 网络插件的默认ip池,如果要用calico网络插件这个地方需要写成 192.168.0.0/16
ps:理论上这个地方的ip段可以任意写(只要不和虚拟主机的网段重复就可以),但是必须和calico网络插件的配置保持一致。对于高手来讲也可以去改calico配置,然后两边保持一致就好。我是菜鸟,就先不改了。
如果使用其他的网络插件,这个地方可能不一样,要根据具体网络插件来写。
kubeadm reset
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
如果成功,你会看到类似如下的输出:
一般情况下,如果上述服务器配置和各组件的版本对的话,这一步应该都能成功
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.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.40.100:6443 --token d2j2ew.qmgrhops9sw5jubp \--discovery-token-ca-cert-hash sha256:9a2b7e5427e94c5453bc498c7ef35362fda97e6719f1fefcef72f52db2297b07
4.2 配置kubectl
按照输出中的指示,配置kubectl:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
4.3 验证
查看nodes
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 102s v1.28.2
查看pods
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5dd5756b68-cx54x 0/1 ContainerCreating 0 16s
kube-system coredns-5dd5756b68-tp4qc 0/1 ContainerCreating 0 16s
kube-system etcd-k8s-master 1/1 Running 6 28s
kube-system kube-apiserver-k8s-master 1/1 Running 6 31s
kube-system kube-controller-manager-k8s-master 1/1 Running 6 28s
kube-system kube-proxy-9cwrj 1/1 Running 0 16s
kube-system kube-scheduler-k8s-master 1/1 Running 6 28s
步骤 5: 配置Pod网络
选择并部署一个Pod网络插件。这里以calico为例:
这个yml地址需要链接外网VPN,因为我在国内没找到合适的版本地址
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
再次查看pods 多了 calico-kube-controllers 和 calico-node 并且 coredns 也启动起来了
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-658d97c59c-c84l7 1/1 Running 0 25s
kube-system calico-node-cnzm9 1/1 Running 0 25s
kube-system coredns-5dd5756b68-cx54x 1/1 Running 0 3m9s
kube-system coredns-5dd5756b68-tp4qc 1/1 Running 0 3m9s
kube-system etcd-k8s-master 1/1 Running 6 3m21s
kube-system kube-apiserver-k8s-master 1/1 Running 6 3m24s
kube-system kube-controller-manager-k8s-master 1/1 Running 6 3m21s
kube-system kube-proxy-9cwrj 1/1 Running 0 3m9s
kube-system kube-scheduler-k8s-master 1/1 Running 6 3m21s
步骤 6: 加入工作节点
6.1 安装操作
在工作节点(k8s-node1)上运行加入命令。使用从主节点初始化时生成的kubeadm join命令加入集群。例如:
kubeadm join 192.168.40.100:6443 --token d2j2ew.qmgrhops9sw5jubp \--discovery-token-ca-cert-hash sha256:9a2b7e5427e94c5453bc498c7ef35362fda97e6719f1fefcef72f52db2297b07
如果出现以下信息说明woker 节点加入成功
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
再次查看 nodes 和pods
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 7m3s v1.28.2
k8s-node1 Ready <none> 57s v1.28.2
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-658d97c59c-c84l7 1/1 Running 0 4m40s
kube-system calico-node-cnzm9 1/1 Running 0 4m40s
kube-system calico-node-hx56t 1/1 Running 0 94s
kube-system coredns-5dd5756b68-cx54x 1/1 Running 0 7m24s
kube-system coredns-5dd5756b68-tp4qc 1/1 Running 0 7m24s
kube-system etcd-k8s-master 1/1 Running 6 7m36s
kube-system kube-apiserver-k8s-master 1/1 Running 6 7m39s
kube-system kube-controller-manager-k8s-master 1/1 Running 6 7m36s
kube-system kube-proxy-9cwrj 1/1 Running 0 7m24s
kube-system kube-proxy-rkf7v 1/1 Running 0 94s
kube-system kube-scheduler-k8s-master 1/1 Running 6 7m36s
6.2 问题解决
我在操作join时,worker节点始终无法加入集群(卡到下面这个地方不动)
[root@k8s-node1 /]# kubeadm join 192.168.40.100:6443 --token ovg3gc.aaoioxvzi495tw9k \
> --discovery-token-ca-cert-hash sha256:b803cb2421fc6ea3f02669c0f86a031607aee6ac7bc8a466edf247aa3960a314
[preflight] Running pre-flight checks
查看日志发现 mastor节点的 6443 端口 和 179 端口从 worker节点访问不到。
mastor节点的 6443 端口和179端口从 mastor节点能访问到
mastor节点的ip和域名从 worker节点可以ping通
在mastor节点执行以下命令解决
sudo iptables -I INPUT 1 -p tcp --dport 179 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 6443 -j ACCEPT
为了使上述配置在服务器重启后仍然生效, 需要将 iptables 规则 持久化
# 安装 iptables-services
sudo yum install iptables-services -y# 添加规则
sudo iptables -I INPUT 1 -p tcp --dport 179 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 6443 -j ACCEPT# 保存规则
sudo service iptables save
# 或者
sudo iptables-save | sudo tee /etc/sysconfig/iptables# 启动并启用 iptables 服务
sudo systemctl start iptables
sudo systemctl enable iptables# 检查状态
sudo systemctl status iptables
sudo iptables -L -v
相关文章:
虚拟机安装k8s集群
环境准备 - 主节点(Master Node): IP地址: 192.168.40.100主机名: k8s-master - 工作节点(Worker Node): IP地址: 192.168.40.101主机名: k8s-node1 步骤 1: 配置虚拟机环境 1.1 设置主机名 在每台虚拟机上设置唯一的主机名…...
【mysql部署】在ubuntu22.04上安装和配置mysql教程
一.安装mysql 1. 更新软件包列表: sudo apt-get update2.安装 MySQL 服务器: sudo apt-get install mysql-server3.设置 MySQL 安全性: sudo mysql_secure_installation按照提示输入相关问题的回答,例如删除匿名用户、禁止 root 远程登录…...
机器学习实战(3):线性回归——预测连续变量
第3集:线性回归——预测连续变量 在机器学习的世界中,线性回归是最基础、最直观的算法之一。它用于解决回归问题,即预测连续变量(如房价、销售额等)。尽管简单,但线性回归却是许多复杂模型的基石。今天我们…...
烧结银在 DeepSeek 中的关键作用与应用前景
烧结银在 DeepSeek 中的关键作用与应用前景 在科技飞速发展的当下,DeepSeek 作为前沿科技领域的重要参与者,正以其独特的技术和创新的应用,在众多行业掀起变革的浪潮。而在 DeepSeek 的核心技术体系中,烧结银这一材料的应用&#…...
C++效率掌握之STL库:string底层剖析
文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…...
计算机组成原理—— 总线系统(十一)
在追求梦想的旅途中,我们常常会遇到崎岖的道路和难以预料的风暴。然而,正是这些挑战塑造了我们的坚韧和毅力,使我们能够超越自我,触及那些看似遥不可及的目标。不要因为一时的困境而气馁,也不要因为他人的质疑而动摇自…...
电子制造企业数字化转型实战:基于Odoo构建MES平台的深度解决方案
作者背景 拥有8年乙方项目经理经验、8年甲方信息化管理经验,主导过12个Odoo制造业项目落地,服务客户涵盖消费电子、汽车电子、工业设备等领域。本文基于华东某电子企业(以下简称"A公司")的实战案例,解析行业…...
【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
kafka为什么这么快?
前言 Kafka的高效有几个关键点,首先是顺序读写。磁盘的顺序访问速度其实很快,甚至比内存的随机访问还要快。Kafka在设计上利用了这一点,将消息顺序写入日志文件,这样减少了磁盘寻道的时间,提高了吞吐量。与传统数据库的…...
书籍推荐:《书法课》林曦
记得樊登老师说过,如果你想了解一个事物,就去读5本相关的书,你会比大部分人都更了解它。这是我读的第4本和“书法”有关的书,作为一个零基础的成年人,林曦这本《书法课》非常值得一读。(无论你是否写字&…...
位图(C语言版)
文章目录 位图模型基本操作实现代码运行结果 应用存储只有两种状态的数据排序并去重 位图 模型 位图是“位”的数组。 为什么需要构建一个专门的数据结构来表示位的数组?:因为计算机最小的寻址单位是字节,而不是位。 位图是一种内存紧凑的…...
使用C#元组实现列表分组汇总拼接字段
文章目录 使用C#元组实现列表分组汇总拼接字段代码运行结果 使用C#元组实现列表分组汇总拼接字段 代码 string message string.empty; var tupleList new List<Tuple<string, string, string>>(); tupleList.Add(new Tuple<string, string, string>("…...
淘宝API数据采集接口||调用步骤详解
### 一、注册与认证 1. **注册淘宝开发者账号**: * 访问淘宝开放平台官网,点击“立即入驻”按钮,按照提示完成注册流程。注册过程中需要提供企业名称、联系人信息等基本信息。 2. **创建应用**: * 注册成功后,登录淘…...
C# 调用 C++ 动态库接口
在 C# 中调用 C 动态库接口,通常需要通过 P/Invoke (Platform Invocation Services) 来与 C 代码交互 1. 准备 C 动态库 假设你有一个 C 动态库,其中包含如下函数: extern "C" char* getLocationURL(const char* package_name, …...
fastadmin 接口请求提示跨域
问题描述 小程序项目,内嵌h5页面,在h5页面调用后端php接口,提示跨域。网上查找解决方案如下: 1,设置header // 在入口文件index.php直接写入直接写入 header("Access-Control-Allow-Origin:*"); header(&q…...
C#_文件写入读取操作
文件写入操作:--------------------------------------------------------------------------- 读取文件:---------------------------------------------------------------------------...
redis的哨兵模式和集群模式
Redis 的 哨兵模式(Sentinel Mode) 和 集群模式(Cluster Mode) 是两种常见的高可用部署方式,它们各有优缺点,适用于不同的场景。以下是它们的比较: 1. 哨兵模式(Sentinel Mode&#…...
《open3d +pyqt》凸包计算
《open3d +pyqt》凸包计算 一、效果展示二、qt设置2.1界面设置2.2 py文件生成三、核心代码一、效果展示 二、qt设置 2.1界面设置 添加动作Qhull: 布局参数: 2.2 py文件生成 更新Mainwindow.py 生成py文件 三、核心代码 代码如下: main.py文件...
数据库报错1045-Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决方式
MySQL 报错 1045 表示用户root从localhost连接时被拒绝访问,通常是因为密码错误、权限问题或配置问题。以下是解决该问题的常见方法: 方法一:检查用户名和密码 • 确认用户名和密码是否正确: 确保输入的用户名和密码完全正确&am…...
ThreadLocal为什么会内存溢出
每个线程(Thread 对象)内部维护一个 ThreadLocalMap,用于存储该线程的所有 ThreadLocal 变量的键值对: ThreadLocalMap虽然是ThreadLocal的静态内部类,但是Thread 对象的属性,当线程存活时ThreadLocalMap不会被回收。 Key:ThreadLocal 实例的 弱引用(WeakReference)。…...
数据结构------单向链表。
一.实现单向链表的头插,头删,尾插,尾删,按位置插,按位置删,按位置修改,按元素查找,按元素修改,按元素删除,单链表的逆置,查找倒数第几个元素&…...
Python的那些事第二十二篇:基于 Python 的 Django 框架在 Web 开发中的应用研究
基于 Python 的 Django 框架在 Web 开发中的应用研究 摘要 Django 是一个基于 Python 的高级 Web 框架,以其开发效率高、安全性和可扩展性强等特点被广泛应用于现代 Web 开发。本文首先介绍了 Django 的基本架构和核心特性,然后通过一个实际的 Web 开发项目案例,展示了 Dj…...
在 PyCharm 中接入deepseek的API的各种方法
在 PyCharm 中接入 DeepSeek 的 API,通常需要以下步骤: 1. 获取 DeepSeek API 密钥 首先,确保你已经在 DeepSeek 平台上注册并获取了 API 密钥(API Key)。如果没有,请访问 DeepSeek 的官方网站注册并申请 …...
当扩展屏显示【输入不支持】怎么解决?!
1、why? 当你遇到这个问题的时候,那就表示您的扩展屏偏老旧,这时候需要进行一些参数设置 2、直接改变桌面模式解决不了问题 你是不是尝试过直接在缩放和布局这里设置?在这里直接设置的话,设置的是桌面模式,屏幕大小是会变化但…...
深入剖析 Python 类属性与对象的底层创建与内存分析
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在 Python 中,类和对象是面向对象编程(OOP)的核心组成部分。类属性与实例属性的存储和管理方式,以及类和对象在内存中的分布和结构,对于深入理解 Python 的底层机制至关重要。 本文将带你详细解析 P…...
pdf文件的读取,基于深度学习的方法
需要安装一些依赖解析 PDF 文件的详细指南_unstructured.partition.pdf-CSDN博客文章浏览阅读1.3k次,点赞13次,收藏9次。通过 unstructured.partition.pdf 函数,可以方便地解析 PDF 文件并提取其中的文本和表格内容。尽管在使用过程中可能会遇…...
【指令集】Nginx
本文作者: slience_me 【指令集】Nginx 1. 目录结构 Nginx 的基础目录结构通常包括以下几个主要目录: Nginx的目录结构大致如下(以Linux系统为例): /etc/nginx/ # Nginx的配置文件目录 ├── ngin…...
蓝耘云智算|使用 Deepseek R1 模型优化 BERT 在 NLP 任务中的表现
在自然语言处理(NLP)领域,BERT(Bidirectional Encoder Representations from Transformers)已成为许多文本分类任务的基准模型。然而,随着新模型的出现和技术的不断进步,BERT在某些情况下可能不…...
LINUX常用命令学习
查看系统版本 使用hostnamectl命令检查。hostnamectl显示了CentOS的版本以及操作系统的相关信息,非常方便 设置linux机器别名称 hostnamectl set-hostname 机器别名 --static 华为云 centos 命令:lsb_release -a linux:cat /proc/version 查看进程路…...
【java面向对象的三大特性】封装、继承和多态
目录标题 一、封装(Encapsulation):二、继承(Inheritance):三、多态(Polymorphism):1. 多态的三个必要条件:2.多态的具体实现:3.多态的使用场景&a…...
【开源免费】基于SpringBoot+Vue.JS校园商铺管理系统(JAVA毕业设计)
本文项目编号 T 191 ,文末自助获取源码 \color{red}{T191,文末自助获取源码} T191,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
日常故障排查 - Java程序故障排查
Java程序故障 无论对于任何的故障而言,恢复可用性都是首要目标。但作为一个技术匠人,不能让同一个问题导致多次故障,因此故障的根因剖析以及解决也是很重要的。但是故障根因剖析是需要现场数据来进行分析,因此在故障恢复之前要尽…...
ai数字人分身系统开发源码saas化
#数字人分身系统# #数字人系统源码# #ai数字人123 123# 云罗抖去推数字人分身系统是一款融合了形象克隆、声音克隆、AI数字人分身、AI智能剪辑、智能文案等各种AI技术一体化的短视频营销工具,其核心功能优势主要体现在以下几方面: 真实度高…...
DeepSeek免费部署到WPS或Office
部署到WPS - 通过OfficeAI插件接入: - 准备工作:安装最新版本的WPS Office软件;访问DeepSeek官网,点击右上角的“API开放平台”,登录账号(若无账号需先注册),登录成功后,…...
vue2和vue3插槽slot最通俗易懂的区别理解
在 Vue 的组件通信中,slot(插槽)的编译优化是一个重要的性能提升点。以下是 Vue2 和 Vue3 在 slot 处理上的差异及优化原理,用更直观的方式解释: Vue2 的 Slot 更新机制 想象一个父子组件场景: 父组件&am…...
生成式人工智能:技术革命与应用图景
(这文章有些地方看不懂很正常,因为有太多生词,需要对 计算机/人工智能 研究至深的人才能看懂,遇到不会的地方用浏览器搜索或跳过) 引言 2023年被称我们为"生成式AI元年",以GPT-4、DALL-E 3、Stable Diffusi…...
关于Dest1ny:我的创作纪念日
Dest1ny 因为这是csdn任务,我就稍微“写”了一下! 如果大家真的有什么想聊的或者想一起学习的,欢迎在评论区或者私信中与我讨论! 2025想说的话 我就把我想说的写在前面! 不用对未来焦虑,不要觉得自己走…...
AI学习记录 - 最简单的专家模型 MOE
代码 import torch import torch.nn as nn import torch.nn.functional as F from typing import Tupleclass BasicExpert(nn.Module):# 一个 Expert 可以是一个最简单的, linear 层即可# 也可以是 MLP 层# 也可以是 更复杂的 MLP 层(active function 设…...
【C++内存管理】—— 策略、陷阱及应对之道
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
分布式版本控制系统---git
Git:从基础到进阶的全面指南 Git 是一个分布式版本控制系统,广泛应用于软件开发中,用于跟踪文件的更改、支持团队协作以及管理项目代码。通过 Git,开发者可以在本地拥有完整的项目历史记录,进行离线开发,并…...
pg_sql关于时间的函数
1、时间戳和日期之间的相互转换 时间戳转日期(时间戳为数值类型,若为字符型需进行转换) # 保留到秒:2025-10-02 04:46:40 (字符型转换数值型) select to_timestamp(1759351600::bigint)# 保留到日&#x…...
【Kafka】Windows下安装Kafka(全面)
目录 1.前提条件 2.下载 3.安装 4.环境变量配置 5.验证 1.前提条件 参考版本:zookeeper为3.6.4 kafka版本为3.5.1 1.先安装zookeeper: 【Zookeeper】Windows下安装Zookeeper(全面)-CSDN博客https://blog.csdn.net/…...
【Qt】:概述(下载安装、认识 QT Creator)
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 介绍 🦋 什么是 QT🦋 QT 发展史🦋 Qt版本🦋 QT 优点 一:🔥 搭建Qt开发环境 ǹ…...
Netty源码解析之异步处理(二):盛赞Promise中的集合设计
前言 在阅读Netty源码的过程中,我越来越相信一句话:“Netty的源码非常好,质量极高,是Java中质量最高的开源项目之一”。如果认真研究,会有一种遍地黄金的感觉。 本篇文件我将记录一下鄙人在Promise的实现类DefaultPr…...
Spring Boot 的约定优于配置,你的理解是什么?
“约定优于配置” 是 Spring Boot 极为重要的设计理念,它极大地简化了 Spring 应用的开发流程,下面从多个方面详细解释这一理念: 减少配置复杂性 传统开发的痛点 在传统的 Spring 开发里,配置工作相当繁琐。以配置 Spring MVC …...
图形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan简介
1.Skia —— 2D 图形库 Skia 是一个 2D 图形库,它的作用是为开发者提供一个高层次的绘图接口,方便他们进行 2D 图形渲染(比如绘制文本、形状、图像等)。Skia 本身不直接管理 GPU 或进行底层的渲染工作,而是通过 底层图…...
git使用,注意空格
第一节 安装完成后,找个目录用于存储,打开目录右击选择git bash here 命令1 姓名 回车 git config --global user.name "li" 命令2 邮箱 回车 git config --global user.email "888163.com" 命令3 初始化新仓库,下载克隆 回…...
以用户为中心,汽车 HMI 界面设计的创新之道
在汽车智能化飞速发展的当下,汽车 HMI(人机交互界面)成为连接人与车的关键桥梁。如何打造出优秀的 HMI 界面?答案是以用户为中心,探索创新之道。 用户需求是汽车 HMI 界面设计的指南针。在设计前期,深入调…...
CentOS安装Docker,Ubuntu安装Docker,Docker解决方案
文章目录 CentOS7安装DockerUbuntu修改Docker镜像源docker设置容器自动启动启动时加--restartalways如果已经过运行的项目docker compose设置容器自启动 docker file修改时区docker在容器执行命令简单粗暴的办法安装curl docker compose命令安装docker compose Docker WEB 图形…...
c#中“事件-event”的经典示例与理解
在C#编程语言中,事件(Event)是一个非常重要的概念,它提供了一种松耦合的方式,让对象间能够通知彼此,而无需直接联系。事件的使用可以让我们的代码更加灵活、可扩展且易于维护。 事件可以视作委托的实例&…...