Harbor 使用

Harbor 使用 1. 安装Harbor 此处使用官方离线安装包 1. 下载解压 # 安装编译依赖 # 安装 Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker # 安装 Docker Compose 页面下载的话注意版本比如 验证系统架构uname -m输出x86_64 sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # 下载Harbor并解压 (我用的离线安装包包含所有依赖镜像) wget https://github.com/goharbor/harbor/releases/download/v2.12.3/harbor-offline-installer-v2.12.3.tgz tar -xzvf harbor-offline-installer-v2.12.3.tgz cd harbor 2. 生成自签名证书(IP方式) 如果使用http则不需要设置 sudo mkdir -p /etc/harbor/ssl sudo chmod 755 /etc/harbor/ssl sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/harbor/ssl/your_ip....

May 8, 2025 · 3 min · Leanku

Kubernetes学习指北

Kubernetes学习指北 一、 大纲 1. 了解基础概念 概念 说明 Pod 最小的调度单位,一个 Pod 可以包含一个或多个容器 Node Kubernetes 集群的工作节点 Deployment 管理 Pod 的副本和升级策略 Service 用于 Pod 间通信和对外暴露 ConfigMap / Secret 配置和敏感信息管理 Volume 数据卷,用于持久化数据 Namespace 命名空间,多租户环境的逻辑隔离 Ingress 对外 HTTP/HTTPS 流量管理 kube-apiserver、kube-scheduler、kube-controller-manager Master 组件,负责调度、管理集群 2. 核心组件及职责 (必须的核心组件) kube-apiserver (API 服务器) 作用: 集群的 大脑入口 负责 接收请求(kubectl、Dashboard、其他服务),然后转给 etcd 或控制器 所有组件(scheduler、controller、kubelet)都通过它通信。 像是办事大厅,所有人(开发、运维、调度器)都必须来这里递交申请。 kube-scheduler (调度器) * 作用: 负责 给 Pod 找宿主机。 根据 资源情况(CPU、内存)、约束(亲和性、污点)、策略 来决定 Pod 放在哪个 Node 上。 * 像是一个 派单员,根据司机(Node)的空闲情况,把订单(Pod)分配给合适的人。 kube-controller-manager (控制器管理器) * 作用: 内部包含很多 控制器(controller),比如: Deployment Controller:保证副本数量正确 Node Controller:监控节点状态。 Endpoint Controller:维护 Service → Pod 的映射。 核心任务是:对比实际状态和期望状态,不断修正。 * 像是一个 巡检员,不停检查「理想状态」和「现实情况」是不是一致,如果发现差错,就赶紧修正。 kubelet (节点代理) 作用: 跑在每个 Node 上的 代理。 负责和 kube-apiserver 交互,接收“要运行哪些 Pod”。 调用底层 容器运行时(containerd、CRI-O、Docker) 来真正启动容器。 还会 汇报 Pod 和 Node 的运行状态。 * 像是 工地上的施工队长,接到上级(apiserver)的命令,就去调度工人(containerd)建房子(Pod)。 etcd 作用: 分布式键值存储,保存集群的所有状态(Pod、Service、配置等) * 像是 工地上的施工队长,接到上级(apiserver)的命令,就去调度工人(containerd)建房子(Pod) 容器运行时(Container Runtime,如 containerd、CRI-O、DockerShim) 作用: kubelet 本身不会直接运行容器,它要依赖运行时。 真正负责创建和运行容器的底层引擎。 常见的有 containerd(最主流,K8s 默认推荐) CRI-O(轻量化,专门为 K8s 服务) Docker(以前常用,但现在 K8s 不直接依赖它了,而是通过 containerd) * 比喻:工人,真正搬砖盖房子(运行容器)。 3....

May 1, 2025 · 2 min · Leanku

Kubernetes学习指北之Kubernetes kubectl

Kubernetes学习指北之Kubernetes kubectl 一、 kubectl 介绍 kubectl 是 Kubernetes 官方提供的命令行工具,用于与 Kubernetes 集群交互。 它可以管理资源对象(Pods、Deployments、Services 等)、调试问题、查看日志、扩缩容、发布更新等。 本质上,它通过 Kubernetes API 与集群通信。 组件关系示意: kubectl <---> kube-apiserver <---> etcd / kubelet / controller-manager / scheduler 二、安装与配置 1. 安装(Linux): curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ kubectl version --client 2. 配置 kubeconfig 默认路径:~/.kube/config 查看当前配置: kubectl config view kubectl config current-context 切换 namespace: kubectl config set-context --current --namespace=demo 三、基础命令 1. 查看集群信息 kubectl cluster-info # 控制面信息 kubectl version # 客户端 & 服务端版本 kubectl api-resources # 列出可用资源 kubectl get namespaces # 查看命名空间 2....

May 1, 2025 · 3 min · Leanku

Kubernetes学习指北之Kubernetes YAML

Kubernetes学习指北之Kubernetes YAML 一、 Kubernetes YAML 的基本结构 Kubernetes 资源对象通常是 YAML 文件。每个 YAML 对象至少包含三个字段: apiVersion: v1 # API 版本,不同资源使用的版本不同 kind: Pod # 资源类型,如 Pod、Deployment、Service、Secret、ConfigMap metadata: # 元数据 name: my-pod namespace: default spec: # 具体配置 containers: - name: nginx image: nginx:1.25 二、常用字段详解 1. apiVersion 指定资源的 API 版本。 常见值: v1:Pod、Service、ConfigMap、Secret apps/v1:Deployment、StatefulSet、DaemonSet batch/v1:Job、CronJob 2. kind 资源类型 常见类型: Pod:最小的调度单位 Deployment:Pod 的管理控制器,可以做副本管理和滚动升级 Service:服务发现与负载均衡 ConfigMap / Secret:配置或敏感信息管理 Namespace:隔离资源的逻辑空间 3. metadata 资源的名字、标签、注解等。 常见字段: metadata: name: my-app namespace: default labels: app: my-app annotations: description: "Demo app" 4....

May 1, 2025 · 2 min · Leanku

Kubernetes学习指北之单节点集群(Master)

Kubernetes学习指北之单节点集群(Master) 一、 单节点集群(Single Node Cluster)说明 学习和开发利器,操作简单 特点 Master 节点和 Worker 节点在同一台机器上 kube-apiserver、kube-scheduler、kube-controller-manager、kubelet 都在同一台机器 Pod 也在同一台机器上运行 资源有限:所有容器共享同一台机器的 CPU、内存和存储 高可用性低:Master 节点宕机,整个集群不可用 网络简单:只需一个节点,Pod 网络配置相对简单 适用场景 学习和测试 Kubernetes 核心概念 开发环境部署微服务 练习 kubectl 命令、Deployment、Service 等 优点 配置简单,一条命令就能搭建 资源占用低,不需要多台虚拟机 部署快速,便于练手 缺点 不适合生产环境 没有高可用性 无法模拟真实多节点调度 二、 准备环境和工具 这里我使用的CentOS7 做一些初始化 # 切换 root sudo -i # 关闭防火墙(实验环境) systemctl stop firewalld systemctl disable firewalld # 关闭 selinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config # 关闭 swap swapoff -a sed -i '/swap/d' /etc/fstab # 调整内核参数(K8s 网络需要) cat <<EOF > /etc/sysctl....

May 1, 2025 · 9 min · Leanku

Kubernetes学习指北之多节点集群(Multi Node Cluster)

Kubernetes学习指北之多节点集群(Multi Node Cluster) 一、 多节点集群(Multi Node Cluster)说明 真实生产环境的缩影,可以模拟调度、高可用、跨节点通信 特点 Master 节点负责管理集群 多个 Worker 节点运行实际应用 Pod Master 负责调度、管理和监控 高可用性可扩展 可以增加 Worker 节点提升容量 Master 可做 HA(高可用)部署 真实调度场景 Kubernetes 会根据资源和策略,将 Pod 调度到不同节点 网络复杂 Pod 网络跨节点,需要 CNI 插件(Flannel、Calico 等)支持 适用场景 生产环境部署微服务 测试调度策略、Pod 分布、Service 负载均衡 实战演练集群管理和高可用 优点 模拟真实生产环境 可以横向扩展容器数量 Master 故障可配置高可用 缺点 配置复杂,需要多台虚拟机或服务器 网络和存储管理比单节点复杂 资源占用高 二、 准备环境和工具 这里使用centos7环境 说明 sudo -i 建议用root账号操作 每台节点都需要执行的操作,包括 master 和 worker:系统初始化、安装和配置容器运行时(containerd)、镜像源替换等操作 这里不再赘述,参照另一篇:Kubernetes学习指北之单节点集群 三、节点准备 在每台节点上安装: # 安装 kubeadm、kubelet、kubectl yum install -y kubelet kubeadm kubectl # 启动 kubelet systemctl enable --now kubelet # 关闭 swap(K8s 要求) swapoff -a sed -i '/swap/d' /etc/fstab # 配置 sysctl cat <<EOF | sudo tee /etc/sysctl....

May 1, 2025 · 3 min · Leanku

GitHub 项目版本管理规范

GitHub 项目版本管理规范 Git 标签(Tags)和 发布(Releases) 在 GitHub 项目中定义和管理版本,通常结合 Git 标签(Tags)、发布(Releases) 和 语义化版本(SemVer) 来实现。以下是具体方法和最佳实践: 1. 使用 Git 标签(Tags)定义版本 (1)创建版本标签 # 创建轻量标签 git tag v1.0.0 # 创建附注标签(推荐,包含提交信息和签名) git tag -a v1.0.0 -m "Release version 1.0.0" # 推送标签到 GitHub git push origin v1.0.0 (2)语义化版本(SemVer) 版本号格式:MAJOR.MINOR.PATCH MAJOR:不兼容的 API 变更 MINOR:向后兼容的功能新增 PATCH:向后兼容的问题修复 示例: v1.0.0:初始稳定版本 v1.2.3:第 1 个大版本,第 2 次功能更新,第 3 次补丁 2. 通过 GitHub Releases 管理版本 (1)手动创建 Release 进入 GitHub 仓库 → Releases → Draft a new release...

April 11, 2025 · 2 min · Leanku

PHP 实现 Redis 高并发解决方案

PHP 实现 Redis 高并发解决方案 使用 PHP 实现 Redis 在缓存加速、分布式锁和队列场景中的应用。 首先确保已安装 PHP Redis 扩展 一、缓存加速实现 1. 基本缓存操作 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 设置缓存 function setCache($key, $value, $expire = 3600) { global $redis; $serialized = serialize($value); return $redis->setex($key, $expire, $serialized); } // 获取缓存 function getCache($key) { global $redis; $serialized = $redis->get($key); return $serialized ? unserialize($serialized) : false; } // 删除缓存 function deleteCache($key) { global $redis; return $redis->del($key); } // 示例:用户数据缓存 function getUser($userId) { $cacheKey = "user:{$userId}"; $user = getCache($cacheKey); if ($user === false) { // 模拟数据库查询 $user = [ 'id' => $userId, 'name' => 'User ' ....

March 28, 2025 · 5 min · Leanku

Mysql窗口函数

Mysql窗口函数 一、什么是窗口函数? 窗口函数是一种在查询结果的"窗口"上执行计算的函数,它不会像常规聚合函数那样将多行合并为一行,而是为每一行返回一个值,同时保持原始行数不变。 基本语法 <窗口函数>(<参数>) OVER ( [PARTITION BY <分区表达式>] [ORDER BY <排序表达式> [ASC | DESC]] [ROWS/RANGE <窗口范围>] ) ‌<窗口函数>‌:可以是聚合函数(如SUM、AVG)或专用函数(如ROW_NUMBER、RANK)。‌‌ ‌OVER()‌:必需子句,定义窗口框架。‌‌ ‌PARTITION BY‌:可选,用于分组数据;若省略,窗口覆盖整个结果集。 ‌ORDER BY‌:可选,指定窗口内行的排序顺序。‌‌ ‌窗口范围‌:可选,默认ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。‌‌ 二、 准备测试数据 -- 创建销售数据表 CREATE TABLE sales ( sale_id INT PRIMARY KEY, salesperson VARCHAR(50), region VARCHAR(50), sale_date DATE, amount DECIMAL(10,2) ); INSERT INTO sales VALUES (1, '张三', '北京', '2023-01-15', 5000), (2, '李四', '上海', '2023-01-16', 8000), (3, '王五', '北京', '2023-01-17', 6000), (4, '张三', '北京', '2023-02-01', 7000), (5, '李四', '上海', '2023-02-02', 9000), (6, '赵六', '广州', '2023-02-03', 4000), (7, '王五', '北京', '2023-02-04', 5500), (8, '张三', '北京', '2023-03-01', 8500); -- 创建员工薪资表 CREATE TABLE employee_salary ( emp_id INT, name VARCHAR(50), department VARCHAR(50), salary DECIMAL(10,2), hire_date DATE ); INSERT INTO employee_salary VALUES (1, '张三', '技术部', 15000, '2020-01-15'), (2, '李四', '技术部', 12000, '2021-03-20'), (3, '王五', '销售部', 8000, '2022-06-10'), (4, '赵六', '销售部', 7500, '2022-08-05'), (5, '钱七', '技术部', 13000, '2020-11-30'), (6, '孙八', '人事部', 9000, '2021-09-15'), (7, '周九', '技术部', 16000, '2019-05-20'); 1....

February 20, 2025 · 4 min · Leanku

MyCat实现Mysql分库分表

Mysql分库分表和主从复制 MyCat 实现分库分表 MySQL 的分库分表解决方案通常依赖于中间件来实现水平扩展。常见的中间件有以下几种 MyCat ShardingSphere TDDL (Taobao Distributed Data Layer) Cobar Vitess MyCat 是一款开源的数据库中间件,支持 MySQL 数据库的分库分表功能。 使用 MyCat 实现分库分表的过程包括多个步骤,涉及配置 MyCat 和数据库的分片策略,路由规则等。下面通过一个实际案例来详细解释 MyCat 的实现原理、方式和步骤。 案例背景 假设你有一个电商系统,包含一个 orders 表,记录用户的订单信息。随着数据量的增长,单一数据库难以满足性能需求,因此需要进行 分库分表。 实现原理 MyCat 是一种数据库中间件,支持分库分表。它的原理是通过代理 MySQL 连接,将 SQL 请求转发到实际的数据库实例上。MyCat 会根据预定义的路由规则(如分片策略)来决定将查询请求路由到哪个数据库或表。 MyCat 的 分库分表原理如下: 分库:将数据按照某种规则分配到多个数据库实例中。例如,按用户的 ID 来分库。 分表:将一个大表拆分成多个小表,避免单表的数据过大导致查询性能下降。例如,可以按时间范围或数据量来分表。 实现方式 MyCat 的实现方式主要通过 配置分片规则 来实现分库分表。配置内容包括: 数据源配置:定义数据库实例。 分片规则配置:指定哪些字段用于分片,如何分片(按范围、按哈希等)。 路由规则配置:根据 SQL 查询的条件来路由请求到不同的数据库或表。 实现步骤 安装并启动 MyCat 下载 MyCat 安装包并解压。 配置 MyCat 启动脚本,启动 MyCat。 cd MyCat ./bin/start.sh 配置数据源 在 MyCat 的配置文件 conf/context....

February 18, 2025 · 3 min · Leanku