- 博客(86)
- 资源 (1)
- 收藏
- 关注
原创 GLib库入门与实践_目录
目录GLib库入门与实践_目录前言0_00_GLib库入门与实践_前言第一部分1_00_GLib库入门与实践_概述序1_01_GLib库入门与实践_GLib库简介1_02_GLib库入门与实践_GLib库源代码目录结构简介1_03_GLib库入门与实践_GLib库帮助文档简介1_04_GLib库入门与实践_GLib库的编译1_05_GLib库入门与实践_第一个基于GLib库的程序第二部分2_00_GLib库入门与实践_基础序2_01_GLib库入门与实践_GLib库版本与兼容性2
2022-03-11 11:45:27
3357
7
原创 Kubernetes技术详解-从理论到实践-(0)-序
本文为Kubernetes技术详解-从理论到实践的序,主要介绍专栏特点,以及各章节内容概述。
2025-09-29 22:00:00
1039
原创 Kubernetes技术详解-从理论到实践-(17)-调度-Scheduling
Kubernetes调度机制负责将Pod分配到最优节点,主要包括过滤(检查资源、标签匹配等)和打分(评估资源均衡性、亲和性等)两个阶段。调度方式分为三类:硬编码调度(nodeName:直接指定节点名称,跳过调度器;nodeSelector:通过节点标签选择目标节点)、亲和性调度(基于规则匹配,节点亲和性、Pod亲和性、Pod反亲和性)、污点与容忍度(通过节点污点和Pod容忍度控制调度)。调度方式各有特点,实际应用中需根据场景选择合适的调度策略。
2025-09-29 19:45:00
889
原创 Kubernetes技术详解-从理论到实践-(16)-控制器-DaemonSet
DaemonSet是Kubernetes中确保每个节点运行指定Pod副本的控制器。其核心特点是每节点1个副本、自动感知节点变化、长期运行,常用于日志收集、监控代理等场景。与Job不同,DaemonSet是持久性而非一次性任务。示例展示了如何创建DaemonSet,在集群每个节点运行busybox容器定时写日志。创建后,DaemonSet自动为每个节点生成一个Pod,并持续监控其状态。这体现了DaemonSet的节点级守护特性,适用于需要全集群覆盖的基础服务部署。
2025-09-28 21:23:36
507
原创 Kubernetes技术详解-从理论到实践-(15)-控制器-CronJob
CronJob是Kubernetes基于时间调度的任务控制器,主要特点包括:采用类Unix cron语法(分时日月周),支持并发控制策略(Allow/Forbid/Replace),可配置任务历史记录保留数量,支持时区设置,底层通过创建Job对象执行任务,主要用于定时数据备份(数据库/仓库快照)、日志清理与数据压缩、定期生成统计报表、证书自动续期检查及集群健康巡检场景。与普通Job的主要区别在于触发方式(自动/手动)和历史记录管理。通过合理配置并发策略和资源限制,可确保定时任务稳定可靠执行。
2025-09-28 19:30:00
702
原创 Kubernetes技术详解-从理论到实践-(14)-控制器-Job
Kubernetes Job控制器是一种用于管理一次性任务的工作负载资源,确保指定数量的Pod成功完成后即终止。Job适合批处理、数据迁移等场景,具有一次性执行、可并行、失败重试等特点。示例展示了如何通过YAML文件定义Job,使用busybox镜像向宿主机文件追加日志。创建Job后,系统会自动调度Pod执行任务,完成后Pod状态变为Completed。通过挂载hostPath卷实现宿主机数据持久化,确保任务结果可靠存储。该机制为Kubernetes处理离散计算任务提供了标准解决方案。
2025-09-27 17:15:00
1310
原创 Kubernetes技术详解-从理论到实践-(13)-集群-Cluster
本文介绍了Kubernetes集群的三种工作模式,重点讲解了单控制平面模式和高可用控制平面模式。单控制平面模式包含一个主节点(master)和多个工作节点(worker),而高可用模式则具备多个控制平面节点。文章提供了详细的安装步骤示例,包括主节点和工作节点的安装命令,以及如何通过kubectl检查节点状态。安装过程涉及加载必要镜像、设置系统服务等步骤,并强调了token在节点连接中的重要性。配套资料包中包含相关安装文件和镜像。
2025-09-27 10:45:00
788
原创 Kubernetes技术详解-从理论到实践-(12)-包管理器-Helm
Helm是Kubernetes的包管理工具,核心概念包括Chart(安装包)、Repository(仓库)、Release(运行实例)等。文章详细介绍了Helm的安装使用流程,包括添加仓库、部署应用、升级回滚等操作。重点讲解了如何搭建私有Helm仓库,包括打包Chart、生成索引文件、搭建HTTP服务等步骤,并提供了示例代码。最后解析了Chart的标准目录结构,包含Chart.yaml、values.yaml等关键文件。通过Helm可以简化Kubernetes应用的管理和部署流程。
2025-09-26 23:45:00
1233
原创 Kubernetes技术详解-从理论到实践-(9)-访问控制-ControllingAccess
Kubernetes API访问控制摘要 Kubernetes通过API Server实现访问控制,主要分为认证、授权和准入控制三个阶段。API Server提供REST接口处理kubectl、Dashboard等客户端的请求,支持多种认证方式(x509证书、Bearer Token等)。授权模式中RBAC是默认方式,通过角色绑定实现权限管理。访问控制流程为:客户端请求→认证→授权→准入→etcd存储,确保集群安全性和资源操作合规性。
2025-09-26 19:15:00
940
原创 Kubernetes技术详解-从理论到实践-(8)-控制器-StatefulSet
Kubernetes中StatefulSet控制器专为有状态应用设计,相比Deployment具有以下核心特性:1)Pod按固定顺序启停,确保有序部署;2)为每个Pod提供稳定的网络标识和持久化存储;3)通过volumeClaimTemplates为每个Pod动态创建独立PVC。典型应用场景包括MySQL、Kafka等需要稳定身份和持久存储的服务。StatefulSet通过Headless Service为Pod提供固定DNS记录,保证应用状态一致性,而Deployment更适合无状态应用的并行部署。
2025-09-25 21:00:00
1715
原创 Kubernetes技术详解-从理论到实践-(7)-存储-Storage
本文介绍了Kubernetes中的存储机制,重点讲解了emptyDir、hostPath、nfs、persistentVolumeClaim、configMap和secret这六类常见的存储方式。并针对每种存储方式给出了运行示例。
2025-09-25 19:30:00
1417
原创 Kubernetes技术详解-从理论到实践-(6)-服务-Service
Kubernetes Service为Pod提供统一访问入口,支持负载均衡和服务发现。本文介绍了四种Service类型:ClusterIP(集群内部访问)、NodePort(外部直接访问)、LoadBalancer(云负载均衡)和ExternalName(指向外部服务)。重点演示了ClusterIP Service的创建过程,通过Deployment管理3个Nginx Pod副本,然后定义Service资源清单将Pod暴露为集群内部服务。创建后可通过ClusterIP:8080访问Pod服务,端口映射为80
2025-09-24 21:30:00
955
原创 Kubernetes技术详解-从理论到实践-(5)-控制器-Deployment
Kubernetes Deployment控制器是管理无状态应用的核心组件,支持声明式滚动更新、回滚和扩缩容。通过YAML文件定义,可指定副本数、镜像版本等参数。关键操作包括创建、查看、扩容/缩容副本数(kubectl scale命令),以及查看详情(kubectl describe)。部署时会自动创建ReplicaSet控制器来管理Pod生命周期,确保始终维持期望的副本数量。Deployment采用滚动更新策略,支持最大不可用和最大增量更新比例,保证服务连续性。
2025-09-24 19:00:00
1139
原创 Kubernetes技术详解-从理论到实践-(附录A)-配套资料包介绍
《Kubernetes技术详解-从理论到实践》配套资源包提供了完整的离线安装包和实践案例,包含K3s环境部署和17个技术章节的实践源码。资源包涵盖Pod、控制器、存储、服务、网关、访问控制、Dashboard、Helm、集群、调度等核心内容,并附有Docker、Helm等离线安装文件,方便国内用户快速搭建环境。每个章节对应独立目录,提供可直接运行的示例代码,适合边学边练。
2025-09-24 10:19:47
572
原创 Kubernetes技术详解-从理论到实践-(4)-控制器-ReplicaSet
ReplicaSet是Kubernetes中用于维护固定数量Pod副本的控制器。它通过selector匹配标签来管理Pod,确保实际副本数与期望值一致。虽然日常多使用Deployment(内置ReplicaSet),但ReplicaSet仍适用于批处理任务、灰度测试、演示环境等场景。操作上支持创建、查看、扩缩容和删除,能自动维护Pod数量。典型应用包括临时计算集群、金丝雀部署和资源受限环境,提供简单可靠的副本管理功能。
2025-09-23 21:00:00
468
原创 Kubernetes技术详解-从理论到实践-(3)-命名空间-NameSpace
Kubernetes 命名空间(NameSpace)是一种逻辑隔离机制,用于划分集群资源。摘要要点如下: 基本操作 查看命名空间:kubectl get namespace/ns 创建命名空间:通过yaml文件定义后kubectl apply 删除命名空间:kubectl delete ns [name] 使用示例 在指定命名空间(如dev)下创建pod,需确保命名空间已存在 不同命名空间可创建同名pod资源 查询资源需指定命名空间(-n参数) 使用场景 多用户/多团队环境资源隔离 为不同团队分配独立命名空
2025-09-23 18:45:00
1223
原创 Kubernetes技术详解-从理论到实践-(10)-WebUI管理-Dashboard
Kubernetes Dashboard是K8s官方提供的Web管理界面,通过可视化方式实现集群管理、应用部署和日志查看等功能。安装只需下载recommended.yaml文件并执行kubectl apply命令,该文件包含创建Namespace、ServiceAccount、Secret、RoleBinding等资源对象。Dashboard通过kube-apiserver接口实时获取数据,支持RBAC权限控制,安装后可通过NodePort方式访问。相比命令行,Dashboard提供了更直观的集群管理体验。
2025-09-23 13:50:06
80
原创 Kubernetes技术详解-从理论到实践-(11)-网关-Ingress
本文介绍了Kubernetes Ingress网关的基本概念和部署方法。Ingress是一种集群入口资源,通过域名+URL路径规则分发流量,解决了NodePort和LoadBalancer服务的端口耗尽问题。本文简单介绍了Ingress控制器的类型,并以ingress-nginx为例,提供了具体的部署步骤。部署所需镜像文件和资源清单详见配套资源下载地址。文末还对Traefik这种K3s自带的Ingress进行了介绍,并给出演示示例。
2025-09-23 13:49:24
80
原创 Kubernetes技术详解-从理论到实践-(2)-容器组-Pod
本文介绍了Kubernetes中Pod的基本概念和操作实践。Pod是K8s最小的调度单元,包含一组共享网络、存储和命名空间的容器。文章详细讲解了如何使用docker创建nginx和busybox容器,并演示了通过yaml文件定义和创建Pod的基本流程,包括查看Pod状态、描述信息和日志等操作。关键点包括:Pod的核心特征、镜像基础操作、yaml文件结构解析以及kubectl常用命令。这些内容为理解K8s基础架构和Pod管理提供了实践基础。
2025-09-22 23:15:00
850
4
原创 Kubernetes技术详解-从理论到实践-(1)-环境部署-Setup
本文详细介绍了如何快速搭建k3s环境的完整流程。首先需要在VMware中配置虚拟机,安装OpenEular22.03操作系统并安装必要的rpm软件包。接着安装Docker并导入相关镜像。然后重点介绍了k3s的三种安装模式:单控制平面模式、高可用控制平面模式和混合模式,分别说明了安装步骤和参数配置方法。最后还提供了k3s卸载的操作说明。该指南特别适合需要快速搭建k3s环境进行测试或开发的用户,包含了从系统安装到集群配置的完整路径。
2025-09-22 18:47:22
905
原创 logrotate日志转储
etc/logrotate.conf内有一行include /etc/logrotate.d,加载该目录下的所有规则文件。系统常见的日志文件如/var/log/message、/var/log/boot.log、/var/log/syslog均已配置了日志转储。但这里有个问题,/etc/logrotate.d/testlog是被/etc/logrotate.conf包含进去的,logrotate.conf的参数配置和testlog的参数配置有可能不同,这将会影响结果。
2022-09-17 00:32:33
1984
原创 附录B_GLib库入门与实践_附带源码的CMake文件内容
附带源码CMake工程目录结构附录A已经介绍过,本系列文章是由CMake构建工具组织的,以glib_markup和glib_regex为例,目录结构举例如下:glib_examples├── CMakeCommonFile.txt├── CMakeCustomCommonFile.txt├── CMakeLists.txt├── compile_and_exec_all_examples.sh├── glib_markup│ ├── CMakeLists.txt│ ├── glib
2022-03-14 09:57:36
706
原创 附录A_GLib库入门与实践_本系列文章附带源码简介
本系列文章包含了200多个示例程序,为了组织这些源码,使用CMake构建工具建立CMake工程以对其进行管理。现以glib_markup和glib_regex两个功能模块为例,讲解如何使用附带源码,以及如何基于本CMake工程添加新的模块。有些示例为错误示例,在文章中会特别说明,错误示例的源码目录也一般以_err结尾。所有正确的示例代码均在CentOS7.6 X86_64平台上编译通过,且通过valgrind检查工具检查无内存泄露。附带源码目录结构简介glib_examples├── CMakeCo
2022-03-14 09:56:48
855
原创 5_10_GLib库入门与实践_内存切片分配器
简介内存切片分配器使用了复杂的分层设计,灵感来自Bonwick的slab内存分配器,它提供了一种节省空间和多处理可扩展的方式来分配相等大小的内存,避免了过多的内存浪费,还兼顾了可伸缩性和性能问题。内存切片分配器使用posix_memaligin()来优化许多相同大小的块内存分配,并根据线程可利用空间表(free list)来快速分配指定结构大小的内存。在内存释放之后,额外的缓存逻辑还该内存保留一段时间。一般来说,频繁申请释放的小块内存,建议使用内存切片分配器。数据结构无特殊数据结构函数列表gp
2022-03-14 09:56:02
781
原创 5_09_GLib库入门与实践_内存申请及释放
简介GLib内存申请及释放函数。数据结构无特殊数据结构函数列表#define g_new()#define g_new0()#define g_renew()#define g_try_new()#define g_try_new0()#define g_try_renew()gpointer g_malloc ()gpointer g_malloc0 ()gpointer g_realloc ()gpointer g_try_malloc ()gpoint
2022-03-14 09:55:37
2029
原创 5_08_GLib库入门与实践_IO通道
简介GIOChannel数据类型旨在提供一种可移植的方法来使用文件描述符、管道和套接字,并将它们集成到主事件循环中。目前,UNIX平台已完全支持,Windows平台只是部分支持。要在UNIX系统上创建新的GIOChannel,可以使用使用 g_io_channel_unix_new(),这适用于普通文件描述符、管道和套接字。使用g_io_channel_new_file()可以以独立于系统的方式为文件创建通道。一旦创建了 GIOChannel,就可以通过函数g_io_channel_read_char
2022-03-14 09:55:15
1389
原创 2_02_GLib库入门与实践_基本数据类型
出于编码风格一致性或可移植性考虑,一般的库,都会重新定义自己的基本数据类型。GLib库定义的基本数据类型GLib也定义了许多常用类型,可分为以下几组:不属于标准C的新类型(但在各种C标准库头文件中定义)-gboolean、gssize。保证在所有平台上大小相同的整数类型-gint8、gint8、gint16、gint16、gint32、gint32、gint64、gint64。比标准C语言更容易使用的类型-gpointer、gconstpointer、guchar、guint、gushort、g
2022-03-13 01:05:26
761
原创 5_07_GLib库入门与实践_主循环
简介GLib主循环用来处理GLib和GTK+应用程序的所有事件源。GTK+的事件驱动特性正是基于GLib主循环。GLib主循环设计思想是基于poll的"prepare/check/dispatch"模式,支持多事件源,像键盘、鼠标、文件、管道、设备、套接字、定时器及其他自定义事件类型对象都可以产生事件,这些事件可以作为事件源增加到主循环被统一管理。当产生事件时,主循环会调用事件源处理函数处理该事件。GLib主循环模块内置了Idle和Timeout两个事件源。Idle主要实现异步事件,支持重复执行,当用
2022-03-13 00:22:07
1414
原创 5_06_GLib库入门与实践_模块动态加载
简介模块动态加载支持跨平台使用,支持Windows、Linux和MacOS,每个平台都有单独的实现,最后统一封装成对外调用的接口。Windows的实现代码在gmodule-win32.cLinux的实现代码在gmodule-dl.cMacOS的实现代码在gmodule-dyld.c数据结构模块动态加载的数据结构是一个不透明数据结构,只能整体使用它,无法单独引用其内部成员。typedef struct _GModule GModule;函数列表gboolean g_module_su
2022-03-13 00:21:31
563
原创 5_05_GLib库入门与实践_异步队列
简介在数据类型里面介绍过双端队列,双端队列没有线程和锁的概念,需要调用者自行保证数据同步性,本章要介绍的是异步队列,本身具有多线程同步特性,非常方便使用。数据结构异步队列的数据结构不透明,只可以整体使用它,无法单独引用其内部的成员。typedef struct _GAsyncQueue GAsyncQueue;函数列表GAsyncQueue * g_async_queue_new ()GAsyncQueue * g_async_queue_new_full ()GAsyncQueue
2022-03-13 00:20:45
1627
原创 5_04_GLib库入门与实践_线程池
简介线程池是在多线程编程时经常用到的技术。在进行多线程任务处理时,如果线程频繁创建和销毁,将会使系统开销变大,在这种情况下,上一个任务执行完后不销毁之前创建的线程,后续任务重用该线程,将会大大减小开销。为了管理这些创建之后不再销毁的线程,便有了线程池的概念。GLib的线程池除了提供一般的线程池函数外,还提供了诸如获取当前运行的线程数量、获取未处理的任务数量、获取或设置线程池的最大线程数量、获取未使用的线程数量、设置未使用的最大线程数量、停止所有目前未使用的线程,但经过实际测试,这里面有些功能并未生效。
2022-03-13 00:19:49
822
原创 5_03_GLib库入门与实践_线程
简介GLib提供了对线程、互斥锁、递归锁、读写锁、条件量、线程私有数据、线程一次性初始化、位锁及指针位锁的操作。数据结构struct GThread // 线程union GMutex // 互斥锁struct GRecMutex // 递归锁struct GRWLock // 读写锁struct GCond // 条件变量struct GPrivate // 线程私有数据struct GOnce // 线程一次性初始化函数列表gpoin
2022-03-13 00:18:38
1487
2
原创 5_02_GLib库入门与实践_日志和调试
简介GLib提供了一套日志输出接口,包括不同日志级别的输出以及与systemd日志系统的对接。数据结构日志输出最主要的数据结构是日志级别。GLib提供了debug、info、message、warning、critical和error这六种日志输出级别。其中,error默认是FATAL级别日志输出,输出该级别日志会调用abort()导致程序退出。enum GLogLevelFlags函数列表void g_log ()void g_logv ()#define g_message(
2022-03-13 00:17:40
1955
3
原创 5_01_GLib库入门与实践_错误、告警和断言
简介Linux系统编程中,有一个errno的变量,还有与之对应的perror及strerrno函数,在GLib中,也有相关的一组功能函数GError(源码在gerror.[ch]两个文件),与errno类似。注意,GLib的GError是独立的系统,其错误码与Linux的errno错误码并不相同。GLib还专门提供了一组告警和断言的操作函数,源码在gmessages.[ch]两个文件。数据结构GError的数据结构体见下。其中,code是错误码,message是错误码对应的字符串。struct
2022-03-13 00:17:17
907
原创 5_00_GLib库入门与实践_核心应用支持序
本部分是GLib的核心应用支持部分,包括十章内容。5_01章介绍了错误系统GError、告警和断言。5_02章介绍了GLib的一套日志输出接口。5_03章介绍了线程、互斥锁、递归锁、读写锁、条件量、线程私有数据、线程一次性初始化及位锁相关的操作函数。5_04章介绍了一个线程池。5_05章介绍了带线程和锁的异步队列。5_06章介绍了模块动态加载技术。5_07章介绍了GLib的主循环。5_08章介绍了一套通用的IO通道。5_09章介绍了内存的申请及释放。5_10章介绍了基于slab思想的内
2022-03-13 00:16:42
375
原创 4_15_GLib库入门与实践_N叉树
简介平衡二叉树是一种特殊的树,前面已经介绍过。本章介绍的是N叉树。(本节以下内容翻译自官方文档)GNode 结构及其相关函数提供了一个 N 叉树数据结构,其中树中的节点可以包含任意数据。要创建一棵新树,请使用 g_node_new()。要将节点插入树中,请使用 g_node_insert()、g_node_insert_before()、g_node_append() 和 g_node_prepend()。要创建一个新节点并将其插入树中,请使用 g_node_insert_data()、g_no
2022-03-13 00:16:19
569
原创 4_14_GLib库入门与实践_数据集
简介(本段内容翻译自官方文档)数据集将数据元素组与特定的内存位置相关联。如果您需要将数据与从外部库返回的结构相关联,这些非常有用。由于您无法修改结构,因此您可以将其在内存中的位置用作数据集的键,您可以在其中将任意数量的数据元素与其关联。大多数数据集函数有两种形式。第一种形式使用字符串来标识与位置关联的数据元素。第二种形式使用 GQuark 标识符,这些标识符是通过调用g_quark_from_string()或g_quark_from_static_string()创建的。第二种形式更快,因为它不需要
2022-03-13 00:15:22
375
原创 4_13_GLib库入门与实践_数据列表
简介(本段内容翻译自官方文档)数据列表提供任意数据元素的列表,可以使用字符串或与字符串的GQuark访问这些数据元素。GQuark方法更快,因为无论如何都必须将字符串转换为 GQuarks。数据列表用于将任意数据与 GObject 相关联,使用 g_object_set_data()和相关函数。要创建数据列表,请使用 g_datalist_init()。要将数据元素添加到数据列表,请使用 g_datalist_id_set_data()、g_datalist_id_set_data_full(
2022-03-13 00:14:56
477
原创 4_12_GLib库入门与实践_夸克
简介Quarks标识一对字符串和整数的关联关系。给定字符串或者给定整数,可以方便地获取另一个值。数据结构数据结构typedef guint32 GQuark;函数列表#define G_DEFINE_QUARK()GQuark g_quark_from_string ()GQuark g_quark_from_static_string ()const gchar * g_quark_to_string ()GQuark g_quark_try_string ()const
2022-03-13 00:14:27
515
kubernetes技术详解-从理论到实践-配套资料包
2025-09-19
glib-2.0-demo.zip
2022-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅