- 博客(49)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注

原创 Kubernetes Operator开发实践
打开源文件,需要我们根据我们的需求去自定义结构体 AppServiceSpec,我们最上面预定义的资源清单中就有 replicas、image、ports 这些属性,所有我们需要用到的属性都需要在这个结构体中进行定义:代码中会涉及到一些包名的导入,由于包名较多,所以我们会使用一些别名进行区分,主要的包含下面几个:import (这里的 resources、envs、ports 的定义都是直接引用的。
2024-03-07 11:14:13
919

原创 Operator开发
如上,展示的是 kube-builder 的内部原理,包含了 kube-builder 以及 infomer 机制的部分代码,可以明显的看到,这里存在一个事件队列,一旦存在事件队列就意味着缓存已经产生,我们每次处理的都是当前能看到的资源状态,并非真实的状态,因为有可能还有其他的事件在后面排队等待处理。但是经常我们又需要多个控制器协同作业,那么,暴露的越少越好。同样,还是k8s的资源变更机制导致,可能会导致重复的推送某一个资源的变更到reconciler,如果处理逻辑或者接口不幂等,那么处理一定是有问题的。
2024-03-06 15:07:01
1140

原创 kubernetes容器网络-全面详解
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。
2023-04-24 17:00:09
1007
原创 DeepSeek 3FS部署最佳实践
修改meta_main_app.toml中的node_id = 100。首先我们在火山云上申请一个ecs.hpcpni3ln.45xlarge实例作为编译环境使用. 注意在创建实例的时候,选择unbuntu 22.04。每个存储节点修改/opt/3fs/etc/storage_main_app.toml中的node_id,五台机器分别为10001~10005。另外由于3FS使用了mellanox网卡的ibdev2netdev,在执行3fs命令时会调用,所以,要保证OFED驱动是没问题的。
2025-03-17 10:13:59
986
原创 云原生Ingress网关高并发高可用解决思路
当 Ingress 网关面临高并发请求(如 QPS 超过 10万+)时,可能导致服务崩溃、响应延迟激增或资源耗尽。
2025-02-17 22:38:55
817
转载 GPU架构历史回顾
1999 年,英伟达发明了 GPU(graphics processing unit),本节将介绍英伟达 GPU 从 Fermi 到 Blackwell 共 9 代架构,时间跨度从 2010 年至 2024 年,具体包括费米(Feimi)、开普勒(Kepler)、麦克斯韦(Maxwell)、帕斯卡(Pashcal)、伏特(Volt)、图灵(Turing)、安培(Ampere)和赫柏(Hopper)和布莱克韦尔(Blackwell)架构。
2024-09-27 14:13:52
1935
原创 k8s搭建EFK日志系统
前面大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案。是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。Elasticsearch 通常与Kibana。
2023-09-30 21:41:41
2199
原创 基于Zookeeper搭建Kafka高可用集群(实践可用)
这里解释一下 kafka 安装包的命名规则:以 kafka_2.12-2.2.0.tgz 为例,前面的 2.12 代表 Scala 的版本号(Kafka 采用 Scala 语言进行开发),后面的 2.2.0 则代表 Kafka 的版本号。这里需要说明的是 log.dirs 指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。拷贝三份 zookeeper 安装包。为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。
2023-09-06 14:47:10
848
原创 Kafka详解
Apache Kafka 是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使你能够将消息从一个端点传递到另一个端点。Kafka 适合离线和在线消息消费。Kafka 消息保留在磁盘上,并在群集内复制以防止数据丢失。Kafka 构建在 ZooKeeper 同步服务之上。它与 Apache Storm 和 Spark 非常好地集成,用于实时流式数据分析。Kafka 是一个分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力。
2023-09-06 14:45:08
1181
原创 ETCD集群搭建(实践可用)
概述etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。- 官方网址:准备cfssl证书生成工具cfssl是一个开源的证书管理工具,使用json文件生成证书.在任意一台服务器上操作,这里选择k8s01创建etcd相关目录创建证书。
2023-09-06 14:40:35
660
原创 ETCD详解
首先,Raft是一种“算法”;其次,Raft 是一种为了管理“复制日志”算法;最后,Raft 是一种为了管理复制日志“一致性”算法。那么问题来了,什么是一致性?一致性是分布式系统容错的基本问题。一组机器像一个整体一样工作,即使其中小半部分机器(不大于N/2)出现故障也能够继续工作下去, 一旦他们就状态做出决定,该决定就是最终决定。例如,即使2台服务器发生故障,5台服务器的集群也可以继续运行。如果更多服务器失败,它们将停止进展(但永远不会返回错误的结果)
2023-09-06 14:40:07
7649
原创 ELK集群搭建流程(实践可用)
ELK 是一个由三个开源软件工具组成的数据处理和可视化平台,包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。Elasticsearch 是一个分布式的搜索和分析引擎,可以将大量数据存储在一个或多个节点上,支持实时搜索、分析和聚合,提供高性能的全文搜索、复杂查询和分析能力。Logstash 是一个数据采集和处理工具,可以将来自各种数据源的日志数据收集、转换、过滤和存储到 Elasticsearch 中,从而实现对数据的集中管理和分析。
2023-09-06 14:38:29
1115
原创 ElasticSearch详解
在 flush 过程中,内存中的缓冲将被清除,内容被写入一个新的 Segment,Segment 的 fsync 将创建一个新的提交点( Commit Point),并将内容刷新到磁盘,旧的translog将被删除并开始一个新的translog,flush 触发的时机是定时触发(默认30分钟)或者 translog 变得太大(默认512M)时。取决于你的文档的大小,分片的数量和你使用的硬件,给 10,000 到 50,000 的结果文档深分页( 1,000 到 5,000 页)是完全可行的。
2023-09-06 14:36:50
19645
原创 Raft协议
当前业界有很多分布式一致性复制协议,比如Paxos,Zab,Viewstamped Replication等,其中Lamport提出的Paxos被认为是分布式一致性复制协议的根本,其他的一致性复制协议都是其变种。但是Paxos论文中只给出了单个提案的过程,并没有给出复制状态机中需要的MultiPaxos的相关细节描述。Zab协议被应用在Zookeeper中,业界使用广泛,但是没有抽象成通用library。Viewstamped Replication虽然出来的比较早,但是一直没有流行起来,也没有几个实现。
2023-05-17 12:38:11
195
原创 Ceph技术
Ceph是在2006年由Sage Weil作为博士论文中的项目开发的,随着近些年OpenStack将其作为默认的块存储后端,逐渐流行起来并称为开源社区中的明星项目。Ceph是一个统一的存储系统,既支持传统的块存储和文件存储协议,也支持新兴的对象存储协议,这使得Ceph能够满足当下绝大部分的存储场景需求。
2023-05-15 16:04:31
486
原创 Linux内核参数调优
每个系列,不同版本的内核可调节的参数可能略有不同,主流的3.10的内核可调节的内核参数多达2500个。其中kernel的调节参数占大头73%(~1800),接着就是网络21%(~550),vm和file各有50左右。下面的参数总结我们针对不同的参数类型,用不同的颜色进行标注。配置项目颜色标注描述蓝色百度内部内核暴露出的独有参数粉色需要重点关注的参数设置由于可调节的内核参数过多,大部分可能我们现阶段可能用不到,所以,我们只总结当前可能用到的参数。
2023-05-10 20:56:23
251
原创 如何快速定位程序core
当我们打开core文件时,首先关注的就是程序崩溃时的函数调用栈状态,为了方便理解后续定位core的一些技巧,首先简单介绍一下函数栈。目前生产环境都为64位机,这里只介绍64位机的寄存器,如下:对于x86-64架构,共有16个64位寄存器,每个寄存器的用途并不单一,如%rax通常保存函数返回结果,但也应用于imul和idiv指令。这里我们重点关注%rsp(栈顶指针寄存器)、%rbp(栈底指针寄存器)、%rdi、%rsi、%rdx、%rcx、%r8、%r9(分别对应第1~6函数参数)。
2023-05-10 20:47:25
214
原创 VirtIO
Linux 作为 Guest OS 已经被多个虚拟化系统支持,比如Xen、KVM、VMWare、Lguest等。为了提升虚拟化的性能,CPU和内存的虚拟化已经从全虚拟化发展到使用VT-x、EPT等硬件辅助虚拟化技术,但是IO外设的虚拟化进展并不快,目前业界使用Guest有感的半虚拟化技术。但是每一个虚拟化平台都想要有自己的半虚拟化网络、块设备、console 驱动程序,这些驱动程序大都功能重复且很多没有很好的优化,这带来了较大的维护代价。
2023-05-10 20:14:16
676
原创 KVM虚拟化
虚拟化是提供虚拟机的技术,非常有必要在讨论虚拟化技术之前对x86体系架构进行一些简单的回顾。当前计算机的体系机构与1945年提出的冯诺依曼结构并没有太大的变化,主要包含三个部分:中央处理器单元CPU:主要负责运算和逻辑控制,按照程序中的指令进行计算,根据程序指令进行跳转或者是顺序执行存储器Memory:负责存储程序的指令和数据,来保存程序执行的中间结果和最终结果。现代计算机中通常包括寄存器、CPU缓存、内存等。输入输出IO:负责与外部交互,从外部获得输入,并将结果进行输出。
2023-04-28 11:55:04
288
原创 CPU虚拟化技术
基本概念:物理CPU数量:实际服务器插槽上的CPU个数; 核:一块CPU上面能处理数据的芯片组的数量; 超线程:在一个实体芯片组中提供两个逻辑线程; 逻辑CPU数量:物理CPU数量*核*超线程(若支持超线程,该值为2); vCPU:虚机分配的CPU,一个服务器或集群可分配的vCPU数量为为 (逻辑CPU数量 - (控制台需要的逻辑cpu数量))× 虚拟化比例因子(考虑过载,预估为1.2~1.5)1. 为什么需要 CPU 虚拟化X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动
2020-11-06 16:16:50
4070
原创 Python多线程抓取网页图片地址
import requestsfrom lxml import etreeimport randomimport threadingfrom time import sleepfrom queue import Queueclass ImageSpider(): def __init__(self): self.urls = 'http://www.xxxx/{}' self.detail = 'http://www.xxx.com/xxx/{...
2020-11-03 10:14:40
1256
2
原创 Jenkins与Docker的自动化CI/CD
高效的CI/CD环境是什么样的?及时发现问题:提早得到集成反馈和修复 大幅度减少故障率:业务流程化,减少人工出错风险 加快迭代速度:可以在几分钟内运行几十次、甚至上百次持续集成 减少时间成本:多项目管理及繁琐的部署工作没有了,不必再花费一定时间去准备 研发端到端流水线,一键部署,应用弹性伸缩,灰度发布要想做到一个高效的CI/CD流程,需要有能力整合DevOps工具链及多环境适配,并且...
2019-08-02 17:30:32
469
1
原创 ansible-playbook批量部署Nginx
通过ansible-playbook,以源码编译方式部署nginx。将所有部署nginx主机分为webserver组:# vim /etc/ansible/hosts[webserver]192.168.30.128192.168.30.129192.168.30.130创建管理目录:# mkdir -p nginx/roles/nginx_install/{fi...
2019-07-31 14:54:37
515
原创 docker容器和镜像区别
docker容器和镜像区别这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。当我对Docker技术还是一知半解的时候,我发现理解Docker的命令非常困难。于是,我花了几周的时间来学习Docker的工作原理,更确 切地说,是关于Docker统一文件系统(the union f...
2019-07-17 10:20:46
303
原创 Docker跨主机网络访问配置之weave
使用weave实现跨主机容器连接 Weave是由weaveworks公司开发的解决Docker跨主机网络的解决方案,它能够创建一个虚拟网络,用于连接多台主机上的Docker容器,这样容器就像被接入了同一个网络交换机,那些使用网络的应用程序不必去配置端口映射和链接等信息。 外部设备能够访问Weave网络上的应用程序容器所提供的服务,同时已有的内部系统也能够暴露到应用程序容器上。...
2019-07-10 10:21:02
1078
1
原创 Docker跨主机网络配置方案之overlay
一、跨主机网络概述前面已经学习了 Docker 的几种网络方案:none、host、bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题。本章的重点则是讨论跨主机容器间通信的方案。docker 原生的 overlay 和 macvlan。第三方方案:常用的包括 flannel、weave 和 calico。二、准备 overla...
2019-06-25 16:32:06
1452
1
原创 Docker网络模式及配置(高级网络功能)
目录一.Docker网络模式与参数配置Docker网络模式1.Bridge桥接模式2.Host 网络模式:3.Container 网络模式:4.None 网络模式:Docker网络相关的命令参数二.配置容器DNS和主机名1.相关配置文件2.容器内修改配置文件3.通过参数指定三.容器与外界通信访问控制1.容器访问外部实现2.外部访问容器实...
2019-06-11 09:24:36
1297
1
原创 Docker容器内部 DNS 解析失败的问题
上段时间遇到了 docker 容器内部 dns 解析失败的问题,发现在 docker run启动容器之后,容器内部访问外部的接口总是提示无法解析 dns,然而容器外部是可以解析的,dns的配置也没有任何问题。用docker exec -it contaner_name bash进去,ping 任何域名都是不通。最终的解决办法在在于,停止 docker daemon,删掉 ifconf...
2019-06-11 09:16:17
16614
13
原创 4种方法进入正在运行的Docker容器
在使用Docker创建了容器之后,如何进入该容器呢?进入Docker容器比较常见的几种做法如下:使用docker attach 使用SSH 使用nsenter 使用exec一、使用docker attach进入Docker容器Docker提供了attach命令来进入Docker容器。接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。...
2019-05-29 16:54:18
7441
转载 VMware、配置VMware vSphere 6.0 vMotion、DRS、HA和FT
一、虚拟机迁移概述1、vMotion基础知识简介 您可使用热迁移或冷迁移将虚拟机从一个主机或存储位置移至另一位置。例如,您可使用 vSphere vMotion 将已打开电源的虚拟机从主机上移开,以便执行维护、平衡负载、并置相互通信的虚拟机、将多个虚拟机分离以最大限度地减少故障域、迁移到新服务器硬件等等。您可使用冷迁移或热迁移将虚拟机移至其他主机或数据存储。冷迁移: ...
2019-03-27 11:03:55
7470
转载 Mycat之——高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)
转载请注明出处:http://blog.youkuaiyun.com/l1028386804/article/details/76397064本文是在博文《Mycat之——Mycat集群部署(基于HAProxy + Mycat)》的基础上,实现高可用负载均衡,若还没有阅读博文《Mycat之——Mycat集群部署(基于HAProxy + Mycat)》,请先阅读博文《Mycat之——Mycat集群部署(基于...
2018-12-29 10:48:44
957
1
原创 Python实现守护进程Daemon
Daemon 守护进程概述系统为了某些功能必须要提供一些服务,但服务的提供总是需要进程的运行,实现这个服务的程序我们就称之为daemon。守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。用户使守护进程独立于所有终端。因为在守护进程从一个终端启动的...
2018-12-04 16:00:12
1734
1
原创 Python操作MongoDB聚合方法多条件排序
现对某网站用户的比赛数据排名使用 MongoDB 处理,现在有一系列的用户数据,通过python脚本,输入任意用户的 ID,返回排名。如果用户没有比赛记录,则排名返回 0。排名规则首先按分数排名,如果分数相同则花费的总时间越少则排名越高。对于多条件排序,使用MongoDB的aggregate方法是最快的。或者也可以使用python的sorted方法,但是这个方法可能会更耗内存。#...
2018-11-30 13:53:03
2980
原创 keepalived工作原理
keepalived 简介 keepalived 负载均衡的框架是依赖于 Linux Virtual Server(LVS 的 ipvs)内核模块提供的 Layer 4上的负载均衡。 keepalived 实现了一套通过对服务器池(也就是Real Server 池,Server pool)健康状态来动态地、自动维护的管理被负载均衡的服务器池的 checker。 ...
2018-10-18 09:50:51
977
转载 Devops时代,腾讯阿里的运维实践(附Devops58个开源工具)
2017年,Devops火了,一时间互联网大厂都在谈自动化运维,都在谈Devops实践,从国外的微软谷歌到国内的阿里腾讯,都在做Dveops落地。那么Devops为什么会火呢?如同这张漫画,软件研发的功能越来越全面,导致代码更加庞大而复杂,在增加一些新特性的时候,需要投入大量的人力物力来更新及维护代码。即使有优秀的架构师、数据库和运维人员,以及规模庞大的开发和产品经理团队,也很难掌控全局。...
2018-09-28 09:25:22
2518
DataGridView中显示不出数据
2015-12-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人