使用 Go 和 Linux Kernel 技术探究容器化原理
容器的优势
传统模式的部署,直接将多个应用运行在物理服务器上,如果其中一个应用占用了大部分资源,可能会导致其他应用的性能下降。
虚拟化部署时代,可以在单个物理服务器的 CPU 上运行多个虚拟机(VM),每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件(包括了操作系统)。因此,可以让不同的应用在 VM 之间安全地隔离运行,更好地利用物理服务器上的资源。
容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等,但与 VM 不同的是,容器之间共享操作系统(OS)。 所以,容器被认为是一种轻量级的操作系统层面的虚拟化技术。
相比于 VM ,轻量级的容器更适合云原生模式的实践。
容器的本质
容器是一种轻量级的操作系统层面的虚拟化技术。
重点是 “操作系统层面” ,即容器本质上是利用操作系统提供的功能来实现虚拟化。
容器技术的代表之作 Docker ,则是一个基于 Linux 操作系统,使用 Go 语言编写,调用了 Linux Kernel 功能的虚拟化工具。
为了更好地理解容器的本质,我们来看看容器具体使用了哪些 Linux Kernel 技术,以及在 Go 中应该如何去调 ...
OpenCore更新步骤-以OCAuxiliaryTools举例
1.挂载config.plist
2.点击升级
3.全选全部驱动
4.检查kext更新,这一步快慢取决网络环境,检查缓慢尝试退出等个十分钟再多试几次
5.更新Kext
6.选择最新版本或者你想要的版本
7.同步,到这里升级过程基本结束
8.校验这里没有红色感叹号错误提示即可重启完成升级,有红色感叹号点击保存会自动修复错误如果无法自动修复根据提示手动修复
PVE升级
简介想着升级下家里的pve,因为最新的版本貌似支持暗黑模式了
操作首先要备份原来的企业源
1mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
之后备份下原来debian的源
1cp /etc/apt/sources.list /etc/apt/sources.list.bak
之后替换原来的源为ustc的源
12sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.listsed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
添加pve-no-subscription源
12source /etc/os-re ...
企业如何使用Harbor提高生产力?
Harbor是一款开源的企业级Docker Registry服务,它提供了一个安全、可靠、高效的Registry管理平台,支持多租户、LDAP、AD认证等特性。它主要用于管理、存储、分发Docker镜像,并提供镜像的安全性、可追溯性、可管理性等方面的支持。本文将详细介绍Harbor的架构设计、组件功能、性能特点以及使用场景等方面的内容。
1. Harbor的架构设计Harbor的架构设计主要包括了以下几个方面的内容:
1.1. 架构图下图是Harbor的架构图:
Harbor的架构图
Harbor主要包含以下组件:
Proxy Cache:代理缓存,用于缓存Docker Hub的镜像,提高访问速度。
Registry:镜像仓库,用于存储Docker镜像。
Database:数据库,用于存储Harbor的元数据信息。
Redis:缓存,用于存储Harbor的会话信息等。
UI:Web界面,用于管理Harbor服务。
Log Collector:日志收集器,用于收集Harbor的日志信息并输出到指定的日志存储系统中。
Notary:签名和验证服务,用于对镜像进行数字签名和验证。
1. ...
Grafana与 Tempo 和 Jaeger 的分布式跟踪
如果我有一个好的日志记录和监控框架,为什么还需要跟踪?如果某些事情没有按预期工作(失败、错误、不正确的配置等),应用程序日志有利于显示重要事件。 尽管它是应用程序设计中非常重要的元素,但还是应该节俭地记录日志。 这是因为日志收集、转换和存储的成本很高。
与事件触发和离散的日志记录不同,跟踪提供了更广泛和连续的应用程序视图。 跟踪帮助我们了解流程/事务/实体的路径,同时遍历应用程序堆栈并识别各个阶段的瓶颈。 这有助于优化应用程序并提高性能。
在本文中,我们将了解如何在日志中引入跟踪并使用 Grafana Tempo 和 Jaeger 轻松地将其可视化。 在这个例子中,我们将使用 Prometheus、Grafana Loki、Jaeger 和 Grafana Tempo 作为数据源,分别在 Grafana 中监控指标、日志和跟踪。
什么是分布式跟踪?在微服务架构中,了解应用程序行为可能是一项有趣的任务。 这是因为传入请求可能跨越多个服务,并且每个间歇性服务可能对该请求有一个或多个操作。 导致复杂性增加,并在解决问题时花费更多时间。
分布式跟踪有助于深入了解单个操作并查 ...
如何用Loki来分析Kubernetes事件
在Kubernetes API的众多对象中,Events算是最容易被我们忽视的类型之一。与其他对象相比,Event的活动量很大,不太可能长时间存储在etcd中,默认情况下,Event留存时间也只有1小时。当我们使用kubectl describe获取一个对象时,可能因时间超限而无法获取它的历史事件,这对集群的使用者非常的不友好。除了能查看集群事件外,我们可能还有类似追踪一些特定的Warning事件(如Pod生命周期、副本集或worker节点状态)来进行相关告警的需求。那么在开启本期话题之前,我们先来理解下Kubernetes Events的结构,下述是官访问给出的几个重要字段解释
Message: A human-readable description of the status of this operation
Involved Object: The object that the event is about, like Pod, Deployment, Node, etc.
Reason: Short, machine-understandable string – in ...
用Loki来绘制Ingress Nginx监控大屏
最近无意间发现Grafana官网的Dashboard页面首推了一个用Loki分析Nginx日志的页面,大体也就是Loki2.0后产品主推的LogQL V2语法的典型应用。也许是最近感受到大家愈发对新语法的不熟悉,社区也特地做了一个quick demo来简单说明其新语法的使用。
在视频里,我们看到基于LogQL V2语法为Nginx日志分析提供了一个新的思路。这个demo我们可以通过官网的Dashboard中找到。不过今天小白想写的是如何在Ingress-Nginx中也能用上如视频般丝滑的界面。
1. Ingress-Nginx日志日志是Loki之源,在ingress-nginx中,对于日志格式的定义是配置在nginx-configuration这个configMap当中。再次我们需要添加两项配置来声明ingress-nginx的全局日志格式。
1234567891011121314151617apiVersion: v1data: log-format-escape-json: "true" log-format-upstream: '{&q ...
Tempo - 分布式Loki链路追踪利器
Tempo是Grafana Labs在ObservabilityCON 2020大会上新开源的一个用于做分布式式追踪的后端服务。它和Cortex、Loki一样,Tempo也是一个兼备高扩展和低成本效应的系统。
关于TempoTempo本质上来说还是一个存储系统,它兼容一些开源的trace协议(包含Jaeger、Zipkin和OpenCensus等),将他们存在廉价的S3存储中,并利用TraceID与其他监控系统(比如Loki、Prometheus)进行协同工作。
可以看到Tempo的架构仍然分为distributor、ingester、querier、tempo-query、compactor这几个架构,熟悉Loki和Cortex的朋友可能光看名字就知道他们大概是做什么的。不熟悉的同学也没关系,下面简单说下各模块的作用:
distributor
监听多个端口,分别接受来自Jaeger、Zipkin和OpenCensus协议的数据,按照TraceID进行哈希并映射到哈希环上,并交由ingester进行存储处理。当前distributor支持的trace协议如下:
Protoc ...
Jenkins 自动化部署实例
前言你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相信你应该是有过这种感触的。
这种情况下,我一般会劝你了解一下 Jenkins 这个玩意。
本文分为两部分:
第一部分为 Jenkins 安装教程,会教你如何在 Linux 上安装 Jenkins。
第二部分为一个简单的 Jenkins 自动化构建部署实例讲解。
你可以根据自己的意愿,选择性的跳过第一部分,因为第二部分才是重点。(通过目录可以快速翻到第二部分)
Jenkins 安装当前环境
CentOS 7.8
Java 11(注意当前 jenkins 支持的 Java 版本最低为 Java11)
FinalShell 3.9(操作环境)
安装 Jenkins
PS:不建议使用 Docker 安装 Jenkins,因为使用 Jenkins 的时候一般会调用外部程序,比如 Maven、Docker、JDK、Nodejs 等,所以我们最好直接安装在本机上,以避免不必要的麻烦。
1. 添加 Jenkins 源执行下面两条命令:
12sudo wget -O /etc/y ...
Docker 实用工具 gosu 和 su-exec
volume 的权限问题在 Docker 中,需要把 host 的目录挂载到 container 中作为 volume 使用时,往往会发生文件权限问题。常见的现象是,container 对该路径并无写权限,以致其中服务的各种千奇百怪的问题。
导致这类问题的原因,是 container 内外的 UID 不同。比如,host 当前使用 docker 的用户 UID 是 1000(这是默认第一个用户的 UID)。如果 container 内的 UID 是 2000,那么 host 创建的目录对 container 来说就并非 owner,默认情况下不可写入。
此外还有一种情况,那就是挂载前,host 上不存在被挂载的目录。Docker 会以 root 权限,先创建该目录,再挂载。这就导致,即使 host 与 container 的 UID 都是 1000,也会出现无写权限的情况。这种现象,只会在初始化时出现,但也足够令新手困惑,令老手厌烦。
为什么在 Dockerfile 中不能把 volume 的权限配置好?因为 Dockerfile 是对 image 的描述,而 volume 则是 co ...