认识
Linux Containers (LXC) is a toolset in Linux that creates an isolated environment in a single host. Specifically, the LXC creates environments isolated from each other regarding computing resources and root filesystems using the Linux kernel’s namespaces and cgroups function.
vs. VM | One distinction between the LXC and the virtual machines (VMs) is that different LXC instance shares the same operating system (OS) kernel. On the other hand, the VMs share only the physical hardware they each run their own OS stack, including the kernel.
vs. Docker | We can consider the distinction between the two different container solutions from how they are used. Specifically, the Docker container is designed to run a single process per container. This paradigm is also commonly known as application-level isolation. On the other hand, the LXC is meant for running a full-fledged OS in isolation. The community typically uses LXC as a lightweight alternative to the VM where the container is created as a base from which modification is made on top of it. In contrast, the Docker container is not intended to be modified after it has been created.
参考
Getting Started with LXC | Baeldung on Linux[……]
「CONTAINERIZATION-TECHNOLOGY」- LXC | Linux Containers
「INGRESS-NGINX-CONTROLLER」- 通过 Helm 部署
Kubernetes 1.30 / Ingress-NGINX v1.12.1 / Helm Chart 4.12.1 / without Load Balancer
# 04/10/2025
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx/
helm repo update
helm search repo –versions ingress-nginx/ | grep 1.12.1
helm pull ingress-nginx/ingress-nginx –version 4.12.1
helm show values ./ingress-nginx-x.x.x.tgz > ingress-nginx-x.x.x.helm-values.yaml
vim ingress-nginx-x.x.x.helm-values.yaml
… Image Repository and Image Tag
… controller.service.enable: false
… controller.service.externalTrafficPolicy: “Local”
… controller.hostPort.enabled: true
helm upgrade –install –create-namespace –namespace ingress-nginx \
ingress-nginx ./ingress-nginx-x.x.x.tgz -f ingress-nginx.helm-values.yaml
注 1,环境复杂多变,如上配置仅适用于我们的环境。如若应用到其他环境中,可能需要按需调整其他配置。
通过 bitnami 仓库
Ingress object is binding to wrong IP address · Issue #5562 · kubernetes/ingress-nginx · GitHub
# helm search repo bitnami/nginx-ingress-controller
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx-ingress-controller 9.3.2 1.3.0 NGINX Ingr[……]
「nano」- 文本编辑器 | GNU nano
认识
官网:https://www.nano-editor.org/
文档:https://www.nano-editor.org/docs.php
仓库:https://www.nano-editor.org/git.php
构造
在容器中,当我们需要编辑文件且容器又不包含编辑器时,我们需要静态链接版本:https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nano[……]
「TMV」- 求职及相关事项 | Job Hunting and Related Matters | JOB-HUNTING
企业
WIP
个人
Q:企业一般年后几月份开始招人?
A:开工以后立即招人,三月高峰期。
求职,是利用自己所学的知识和技能,来向企事业单位寻求为其创造物质财富和精神财富,获取合理报酬,作为物质生活来源的一种过程。
求职一般过程:
1)确定招聘需求:在招聘之前,必须清晰、完整地将岗位职责和要求描述出来。
2)准备简历:个人简历和求职信是找工作的必备工具。
3)筛选职位:通过多种途径(例如网络招聘平台、招聘会、招聘网站等等)寻找自己感兴趣的职位。
4)申请职位:根据自己的兴趣和能力,申请自己感兴趣的职位。根据个人情况选择合适的平台,能提高找到理想工作的机会。
5)面试准备:如果通过了初步筛选,就需要准备面试了。
6)进行面试:面试时要注意仪表、语言表达、态度等方面的表现。
7)跟进面试结果:面试后要及时向面试官致谢,并了解面试结果。
通过个人求职 | JOB-HUNTING | 职位申请 | Job Application | Job Filtering
常用的招聘网站
1)我们咨询公司的人事,现在(01/10/2024)她们常用的招聘网站有(针对互联网行业):Boss、脉脉、猎聘网。
批量简历投递工具 | Boss Batch Pushhttps://github.com/yangfeng20/boss_batch_push/tree/masterhttps://greasyfork.org/en/scripts/468125-boss-batch-push-boss%E7%9B%B4%E8%81%98%E6%89%B9%E9%87%8F%E6%8A%95%E7%AE%80%E5%8E%86
Boss 直聘 | 今日沟通人数已达上限,请明天再试。150 次
在寻找互联网公司IT运维岗位时,以下几个平台较为有效:
### 1. 综合招聘平台
– 拉勾网:专注互联网行业,IT运维岗位丰富。
– BOSS直聘:可直接与招聘方沟通,反馈迅速。
– 智联招聘/前程无忧:覆盖广泛,IT运维岗位较多。
### 2. 社交招聘平台
– LinkedIn(领英):适合外企或国际化公司,IT运维岗位机会多。
– 脉脉:互联网行业人脉广泛,内推机会多。
### 3. 垂直招聘平台
– 100Offer:针对互联网技术岗位,IT运维岗位质量较高。
– 猎云网:专注互联网和科技公司,适合寻找初创公司机会。
### 4. 公司官网
– 直接访问公司官网:大公司如阿里、腾讯、字节跳动等官网常有最新招聘信息。
### 5. 技术社区和论坛
– V2EX:技术社区,常有公司发布招聘信息。
– GitHub Jobs:适合有技术背景的求职者,运维岗位较多[……]
「TMV」- 代码仓库 | 开源代码仓库 | 商业版服务 | 第三方服务
开源代码仓库
Git-based
GitLab CE
Gogs
Gitea
Gitblit | https://www.gitblit.com/
Gitblit is an open-source, pure Java stack for managing, viewing, and serving Git repositories. It’s designed primarily as a tool for small workgroups who want to host centralized repositories.
SVN-based
Visual SVN Server
商业付费服务
码云(OSChina,Gitee)
https://gitee.com/
免费版本的容量限制:
1)单仓库 最大 500 MB
2)单文件 最大 50 MB
代码托管(CodeArts Repo,Huawei Cloud)
https://devcloud.cn-north-4.huaweicloud.com/ipdproject/homehttps://support.huaweicloud.com/codehub_faq/codehub_faq_0030.htmlhttps://support.huaweicloud.com/devcloud_faq/devcloud_faq_3002.htmlhttps://support.huaweicloud.com/devcloud_faq/devcloud_faq_3001.html
免费版本的容量限制:
1)在旧计费模式中,项目中的用户数为5人以内(包含5人),可以免费使用累计不超过500MB(存储空间)的代码仓库。[……]
「IPSEC-VPN」- 安全联盟 | SA | Security Association
问题描述
IPSec 是在两个端点之间提供安全通信,端点被称为 IPSec 对等体。IPSec 能够允许系统、网络的用户或管理员控制对等体间安全服务的粒度;
例如,某个组织的安全策略可能规定来自特定子网的数据流应同时使用 AH 和 ESP 进行保护,并使用 3DES 进行加密;另一方面,策略可能规定来自另一个站点的数据流只使用 ESP 保护,并仅使用 DES 加密;
解决方案
SA(Security Association,安全联盟),是通信对等体间对某些要素的约定,帮助 IPsec 对特定要素进行约定,SA 定义 IPSec 通信对等体间将使用的 数据封装模式、认证和加密算法、密钥 等等参数;
例如,使用哪种安全协议、协议的操作模式(传输模式和隧道模式)、加密算法(DES 和 3DES)、特定流中保护数据的共享密钥以及密钥的生存周期等;
通过 SA,IPSec 能够对不同的数据流提供不同级别的安全保护,在建立 IPSec Tunnel 过程中,需要完成 SA 的建立;
通信的双方符合 SA 约定的内容,就可以完成 SA 的建立。SA 是 IPSec 的基础,也是 IPSec 的本质;
特性特征
SA 是单向的逻辑连接(IPSec SA,但注意 IKE SA 是双向的),所以:
1)两个 IPSec 对等体间的双向通信(即建立一条 IPSec 隧道),至少需要两个 SA 来分别对两个方向(出向、入向)的数据流进行安全保护;
2)如果两个对等体希望同时使用 AH 和 ESP 安全协议来进行通信,则对等体针对每种安全协议都需要协商一对 SA,一个用于 AH,另个用于 ESP;
SA 通过三元组来标识,该三元组包括:
安全参数索引(SPI,Security Parameter Index),是为了唯一标识 SA 而生成的一个 32-bit 的数值,它在 AH 和 ESP 头中传输;在手工配置 SA 时,需要手工指定 SPI 的取值;当使用 IKE 协商产生 SA 时,SPI 将随机生成;
目的网络地址(DST-IP-ADDR)
安全协议号(AH 或 ESP)
生成方式
IPsec 技术在数据加密,数据验证,数据封装等方面有多种实现方式或算法,两端的设备使用 IPsec 进行通信时需要保证一致的加密算法,验证算法等。因此需要一种机制帮助两端设备协商这些参数;
生成 SA 的方式通常有两种:
通过管理员配置,来指定 SA 中的各个参数;
通过 IKE 协议,来自动协商生成 SA 中的各个参数;
手工方式
SA 所需的全部信息都必须手工配置;
特性特征:
缺点:手工方式建立 SA 比较复杂;手工方式建立 IPsec SA 管理成本很高,加密验证方式需要手工配置,手工刷[……]
「NEXUS」- 安装 | 升级 | Installing | Upgrading
版本选择
参考 GitHub/Release 页面 | https://github.com/sonatype/nexus-public/releases
现在(11/05/2024),最新 release-3.73.0-12 版本;
服务部署
安装文档 | https://help.sonatype.com/en/installation-and-upgrades.html
下载地址 | https://www.sonatype.com/products/sonatype-nexus-oss-download[……]
「PC」- 家用的办公电脑 | Desktop Computer for Home Office
历史经验
Desktop Computer for Home Office
# xx/xx/xx MEM: 16G,普通机箱,零件组装,用于远程办公;
# xx/xx/xx 昙花一现,最后转卖二手
Desktop Computer for Home Office
# xx/xx/xx MEM: 64G,开放式机箱,零件组装,用于远程办公;
# xx/xx/xx 昙花一现,最后转卖二手(最后还是后悔了,我们不应该卖的);
其他 PC 品牌
HP Pro Tower 288 G9 / ESC 进入 BIOS 界面[……]
「Docker Registry」- 登录镜像仓库
问题描述
如果想要拉取私有镜像,需要先登录到镜像仓库,这是件相当简单的事情。
但是(凡事走有但是),却会遇到各种问题。比如 Cannot autolaunch D-Bus without X11 $DISPLAY 错误。
该笔记将记录:登录 Docker 镜像仓库的方法,以及常见问题处理。
解决方法
登录镜像仓库的方法很简单:
docker login # 登录 DockerHub 仓库
# 登录私有镜像仓库
docker login http://registry.example.com
# 命令行的登录方式
echo “<password>” | docker login –username “<username>” –password-stdin registry.example.com
凭证存储方式
在 Docker 中,有很多凭证(在该案例中,指 docker login 凭证)存储的方式。这包括我们已知的:以 base64 编码保存在 ~/.docker/config.json 文件的 auths 字段中。除此之外,还有很多其他存储方式(比如 pass、osxkeychain 等等)。
凭证存储的默认行为
Docker == 调用 ==> Credentials Helper == 调用 ==> External Credentials Store
Credentials Helper:在系统 $PATH 中搜索到的二进制程序。每种操作系统都有与之对应的二进制程序(docker-credential-helpers/Release),比如 macOS 的 docker-credential-osxkeychain 程序,Windows 的 docker-credential-wincred 程序。
External Credentials Store:后端的凭证存储服务。比如 macOS 的 Apple macOS keychain 服务、Windows 的 Microsoft Windows Credential Manager 服务。Linux 比较特殊,后面将详细说明。
我们以 macOS 为例,在存储凭证时,Docker 调用 docker-credential-osxkeychain(可在 $PATH 中搜索到的二进制程序),然后 docker-credential-osxkeychain 将调用系统的 Apple macOS keychain 来存储凭证。
我们以 Windows 为例,在存储凭证时,Docker 调用 docker-credential-wincred(可在 $PATH 中搜索到的二进制程序),然后[……]
「HARD-DRIVE-CAGE」- 硬盘笼(硬盘支架)
ICY DOCK 6 x 2.5 SATA
ICY DOCK MB326SP-B 6 盘位 2.5 寸 SATA 硬盘转 5.25 寸光驱位空间内置硬盘抽取盒支持热插拔免工具安装硬盘笼
6 盘位 2.5 寸 SATA 硬盘转 5.25 寸光驱位空间;产品型号 :MB326SP-B;颜色 :黑色;支持硬盘类型 :2.5 时 SATA SSDVHDD;可连接硬盘数量 :6;传输速率 :最高达 6 Gb/ 每秒. (视硬盘速度而定);最大硬盘高度 :9. 5mm;适用装置空间 :5. 25 时装置空间;主机接口 :6 x SATA 7pin;电源接口 :2 x 15 pin SATA;散热方式 :2 x 40mm 风扇;本体材质 :金属、塑胶;上;产品尺寸 LL xWxH) :146.5 x 145.8 x 41. 3mm;产品重量 :438g;硬盘状态 LED 灯显示:通电(人恒蓝 LED 灯) / 工作(闪烁蓝色 LED 灯);产品内容 :硬盘盒、使用手册、螺丝;人人;湿度 :5%-65% RH;二;储存温度 :-35。C – 70。(C (-31″。F to 158。F);认证 :CE,RoHS,REACH;
符合我们的预期:我们正好由很多 2.5 小硬盘,结合 PVE 的超融合,能够将这些硬盘利用起来,热插拔更加容易管理;[……]
「NEXUS」- Docker Registry | 容器镜像仓库
描述
https://help.sonatype.com/en/docker-registry.html
根绝 SSL and Repository Connector Configuration https://help.sonatype.com/en/ssl-and-repository-connector-configuration.html 文档,Nexus 作为 Container Registry 或 Registry Mirror 都需要额外的端口。
The docker client does not allow a context as part of the path to a registry, as the namespace and image name are embedded in the URLs it uses. This is why requests to repositories on the repository manager are served on a specific and separate port from the rest of the application instead of how most other repositories serve content via a path i.e. <nexus-hostname>/<repositoryName>/<path to content> .
该特性致使我们暂时不使用 Nexus 作为镜像仓库。
应用
Mirror with Sonatype Nexus Repository | https://docs.apps.rancher.io/howto-guides/mirror-with-sonatype-nexus/[……]
「TBORR/HOME/OFFICE/COMPUTER」- 2023 Surface Pro 4
# 02/21/23 我们 ThinkPad P15v 运行 Linux 操作系统,但是办公场景下,我们需要使用 Windows 系统,遂购置 Surface Pro 4 来满足需求。
Surface Pro 4, 2376×1824
# 07/09/23 电池鼓包(我们买的二手旧款,所以有问题也正常),拆解 Surface Pro 4 设备,我们要先加热一下屏幕以软化胶水。
# 12/04/23 我们决定安装 Ubuntu 系统:
1)该笔记本配置较低,而且运行 Windows 系统将消耗资源较多,再运行其他软件将比较卡顿;
2)而后,当运行其他软件时,为散热将导致风扇转速增加,进而噪音提高;
3)鉴于其配置较低,无法运行多个其他软件,所以我们的使用频率并不高,进而闲置;[……]
「Jenkins」- 多分支流水 | Multibranch Pipeline
properties({}) | 修改构建的配置
properties: Set job properties | https://www.jenkins.io/doc/pipeline/steps/workflow-multibranch/#-properties-%20set%20job%20properties
https://stackoverflow.com/questions/44113834/trigger-hourly-build-from-scripted-jenkinsfile
properties(
[
… , // other properties that you have
pipelineTriggers([cron(‘0 * * * *’)]),
]
)
场景 | 触发构建 | 针对分支 | Branch
Jenkins 2.469 | GitLab 16.5
通过 GitLab 触发 Multibranch Pipeline 构建。针对自动化触发,需要 GitLab Plugin 插件。https://plugins.jenkins.io/gitlab-plugin/
第一步、创建多分支流水
当创建 Job 实例时,选择 Multibranch Pipeline 即可,具体细节不再展开。
Pipeline: Multibranch | https://plugins.jenkins.io/workflow-multibranch/
第二步、配置自动化触发
在 GitLab 中,选择项目,Settings,Webhooks,Add new webhook
针对 URL 参数,需要使用 https://USERID:APITOKEN@JENKINS_URL/project/YOUR_JOB 格式,或使用 https://USERID:APITOKEN@JENKINS_URL/project/FOLDER/PROJECT_NAME 格式。但是,不要使用 https://JENKINS_URL/job/PROJECT_NAME/build 或 https://JENKINS_URL/job/gitlab-plugin/buildWithParameters 格式。
针对 Multibranch Pipeline 场景,似乎并不能在 Job 中创建独立的 Token 参数。
补充说明
针对 Multibranch Pipeline 场景,Manage Jenkins,GitLab,取消`Enable authentication for ‘/project’ end-point`选项,似乎并不能关闭认证。[……]
「TBORR/HOME/OFFICE/COMPUTER」- 2015 IBM ThinkPad T520
IBM ThinkPad T520
我们的第三台笔记本电脑 IBM T520。在有一段时间里,我们尝试这使用 FreeBSD 为日常开发环境,而这台笔记本是为了安装 FreeBSD,因为 FreeBSD 上没有 ThinkPad T540P 某些硬件的驱动。但是,这台笔记本很快就退出舞台了,因为配置他低,而且也不昂贵,我们记得买的时候才 2000 多一点;
关于购买时间
具体时间已无从考究,我们也没有找到 TB 订单;
早期我们,使用 ThinkPad T540p 安装 FreeBSD 操作系统,但是无线网卡驱动安装失败,所以购买 IBM ThinkPad T520 进行测试。所以,这台笔记本的购买时间在 ThinkPad T540p 之后,但是在 Dell M6800 之前(我们来杭州后购买的)。[……]
「CONTAINER-REGISTRY」- 镜像仓库 | Container Registry
认识
容器镜像可以通过容器镜像仓库进行存储和分享,如 Docker Hub、Google Container Registry 和 Amazon Elastic Container Registry 等。
Docker Registry,镜像仓库,用来存储镜像的仓库。
组成
WIP
构建
自建的镜像仓库服务
Harbor |
官网:https://goharbor.io
仓库:https://github.com/goharbor/harbor
第三方镜像仓库服务
Quay | Container Registry
被 CoreOS 收购,目前提供无限制的共有仓库。对于私有托管,它提供一些可伸缩的计划。
Docker Hub | Container Image Library
WIP
性质
WIP
应用
WIP[……]
「KUBERNETES-OBJECTS」- 排查 POD 问题、排查技巧
该笔记将记录:在 Kubernetes 中,常见 Pod 问题排查方法,以及相关问题的处理方法;
解决方案
关于 Pod 调试,分为两种场景:
1)Pod 还未运行,即创建 Pod 失败,或者处于 Waiting Pending 等等状态;
2)Pod 成功创建,但是 Pod 的容器运行失败;
WIP ! Pod Probe 是如何运行的,Master Fail 是否会影响探针执行?
[Sol] … no preemption victims found for incoming pod …
安装 kube prometheus stack 服务,其中 node exporter 组件处于 Pending 状态,并提示 … no preemption victims found for incoming pod … 错误。
该问题的成因有很多:
在我们的场景中,集群已部署 hostNetwork: true 的 node exporter 组件,进而导致后来部署的 kube prometheus stack / node exporter 组件无法正常运行。
排查创建失败的 Pod 实例
这里“创建失败”是指 Pod 处于 Pending Waiting 等等状态;
kubectl describe / kubectl get -o yaml
# kubectl describe pod nginx-deployment-1006230814-6winp
…
我们需要关注 Events 字段:
1)相同的信息被压缩在一起,作为同种类型;
2)FirstSeen 表示首次看到这种消息的时间;
3)LastSeen 表示最后看到这种消息的时间;
# kubectl get pod nginx-deployment-1006230814-6winp -o yaml
…
将显示更多关于 Pod 的信息
排查运行的 Pod 实例
查看容器日志
kubectl logs ${POD_NAME} ${CONTAINER_NAME}
# 前个容器的日志
# 这要求以退出容器存在,即未被清理(通过 docker ps -a 可见)
kubectl logs –previous ${POD_NAME} ${CONTAINER_NAME}
到容器中执行命令
通过在容器中执行命令,以排查相关问题:
kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} — ${CMD} ${ARG1} ${ARG2} … ${ARGN}
使用临时调试容器
某些容器使用 distroless images,这些镜像里除了二[……]
「Harbor」- 删除仓库,释放空间
问题描述
当私有仓库运行一段时间后,仓库将存有大量无用的镜像(或不再使用);
这些镜像将占用大量的存储空间,所以需要清理以释放磁盘空间;
解决方案
在 Harbor UI 中,删除存储库这一操作是这是”软删除“,这可以删除整个存储库或仅删除它的标签;
当”软删除“后,Harbour 中不再管理存储库,但是存储库的文件仍然保留在 Harbour 的存储中,即依旧占用存储空间;
最终,释放存储空间需要执行 GC 操作,但是不同版本的 Harbor 操作方法不同;
参考 GC 手册,以获取关于 GC 的细节;
v2.3.5
GC,Garbage Collection
Administration / Garbage Collection,能够进行定期的垃圾回收,删除无用镜像,释放磁盘空间;
Tag Retention Rules
Harbor docs/Create Tag Retention Rules
随着 DevOps CI 构建,镜像仓库会积累大量的镜像。当 CI 产生新版本的就行后,过旧版本的镜像基本不会再使用。我们需要对这些镜像进行清理,以释放磁盘空间;
Tag Retention Rules 功能用于解决此问题。通过配置策略,其将自动清理镜像。以往没有该功能,我们需要在 Jenkins CI 中通过 Pipeline 来维护镜像版本的管理(调用 API 进行删除);
参考 Harbor docs/Create Tag Retention Rules 文档,以获取细节说明。在这里我们记录几个我们常用的场景。
在 Porject 中,Policy 进行配置,目前暂时无法针对个别 Repositories 进行配置;
CASE-01:各项目组都有自己的 TAG 命名规则,导致镜像仓库存在各种格式的 TAG 命名。我们需要某些 TAG 删除而其他 TAG 保留。
// 针对所有仓库,匹配 release** 的 TAG,仅保留最近的 30 个版本;
For the repositories matching **, retain the most recently pushed 30 artifacts with tags matching release**
// 针对所有仓库,匹配 develop** 的 TAG,仅保留最近的 10 个版本;
For the repositories matching **, retain the most recently pushed 10 artifacts with tags matching develop**
// 针对所有仓库,除了 develop**,release** 的 TAG,保留最近的 9999 个版本(所有版本);
For the repos[……]
「CONTAINERIZATION-TECHNOLOGY」- 容器技术 | Container | 容器 | 容器化
该部分笔记整理:与 Container、CNC(云原生)、Docker、Kubernetes 有关的内容,以及相关问题的解决办法;
认识
容器(Container)是一种操作系统级别的虚拟化技术。与虚拟机相比,容器更轻量和高效。
容器技术是一种虚拟化技术,用于将应用程序及其所有依赖项打包成一个独立、可移植的容器。它通过隔离应用程序的运行环境,使其能够在不同的操作系统、硬件和云平台上运行;
组成
容器技术的核心是容器引擎,最流行的引擎是 Docker。容器引擎使用操作系统的内核资源,提供了一种轻量级的虚拟化方式,使得应用程序能够在一个独立的、隔离的运行环境中运行。每个容器都包含了应用程序及其所有依赖项,如代码、运行时环境、库文件等。这使得容器能够快速启动、停止和迁移,而且在不同的环境中具有一致的运行行为;
容器更准确的定义是:容器是容器镜像(image)运行时的实例。
容器镜像:
1)容器镜像打包了应用及其依赖(包含完整操作系统的所有文件和目录)。
2)只需在隔离的“沙盒”中运行容器镜像,无需进行任何修改和配置即可运行应用。
3)容器镜像核心在于实现应用及其运行环境整体打包以及打包格式统一。实现本地环境与云端环境的高一致性。
以 Linux 为例,操作系统区分内核空间(Kernel Space)和用户空间(User Space)。Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间。一个操作系统的内核允许有多个隔离的用户空间实例。
Image
基于联合文件系统的一种层次的结构。简单说,组成操作系统目录结构的一些文件,这些文件保证了系统的运行。再简单说,就是个操作系统,只不过移除了一些不必要的文件;
Container
运行中的镜像;
Image 是 Docker 生命周期中的打包或构建阶段,而 Container 则是启动或执行阶段;
Container Registry
用于保存镜像的仓库。公有,私有。公用,供搭建使用,Docker Hub。私有,搭建自己的 Register 中心;
构造
容器技术实现
Docker 是目前最流行的容器技术,它提供了一种标准的方式来创建、打包和部署容器。
Podman
containerd
OpenVZ 容器技术:OpenVZ 是一种开源的容器技术,它可以在 Linux 系统上运行多个容器,并将它们隔离开来。OpenVZ 技术具有较高的性能和安全性,可以让用户快速部署和管理虚拟机。
性质
容器技术的优势包括灵活性、可移植性和资源利用率高;
容器可以更快速地部署和扩展应用程序,提供了更好的开发和运维效率;
同时,容器还可以隔离应用程序,使其之间互不干扰,提高了系统的安全性和稳定性;
应[……]
「Kubernetes」- 查看 Pod 日志
问题描述
该笔记将记录:在 Kubernetes 中,查看 Pod 日志及资源占用情况的方法,以及常见问题处理。
解决方案
通过 kubectl logs 命令查看日志:
# kubectl logs –help
# kubectl logs “pod name” –namespace “your namespace”
# kubectl logs -n kube-system etcd-k8scp-01
# kubectl logs -n kube-system etcd-k8scp-01 -c “container-name” # 如果 Pod 包含多个容器,则通过 -c 选项指定容器名;
# kubectl logs -n kube-system etcd-k8scp-01 –previous # 查看以停止 Pod 的日志(前个 Pod 实例)
# 但,如果容器被清理,则 –previous 则无法成功;
参考文献
Kubectl Reference Docs / top[……]
「DEVOPS」- 制品库 | Artifact Repository | ARTIFACT-REPOSITORY
认识
制品库是一种用于存储和管理软件制品的仓库。软件制品是软件开发过程中的产物,包括但不限于二进制文件(如可执行程序、库文件)、配置文件、文档等。制品库就像是一个软件资产的 “图书馆”,将这些制品集中存放,方便开发团队在软件开发、测试和部署过程中进行检索、使用和管理。
组成
WIP
构建
Artifactory – Universal Artifact Repository Manager – JFroghttps://jfrog.com/artifactory/
Nexus Repositoryhttps://www.sonatype.com/nexus-repository-sonatype
性质
制品存储与分类:
制品库提供了大容量的存储功能,能够保存各种类型的软件制品。并且可以根据制品的类型(如 Java 的 JAR 包、Python 的 whl 文件等)、项目、版本等因素进行分类存储,便于查找和管理。例如,在一个大型企业的制品库中,不同部门的项目制品可以分别存放在不同的目录或分类下,同一项目的不同版本制品也可以按照版本号顺序排列。
版本控制:
对制品的版本进行严格的管理。它记录每个制品的版本信息,包括版本号、发布日期、更新内容等。开发团队可以方便地查看制品的历史版本,并且在需要时回滚到旧版本。例如,当发现某个软件版本存在严重的缺陷时,可以从制品库中快速获取并部署之前的稳定版本。
依赖管理:
制品库有助于管理软件项目中的依赖关系。它可以存储项目所依赖的各种库文件,并提供工具来解析这些依赖关系。在构建项目时,开发工具可以从制品库中获取正确版本的依赖制品,确保项目的一致性和稳定性。例如,Maven 项目可以通过配置指向制品库的仓库地址,来获取项目所需的各种 Java 库文件。
访问控制与安全管理:
制品库通常具备完善的访问控制机制。可以根据用户角色(如开发者、测试人员、运维人员)、项目权限等因素来限制对制品的访问。同时,为了确保制品的安全性,制品库还可能提供数据加密、安全传输等功能,防止制品被非法获取或篡改。例如,只有经过授权的运维人员才能访问生产环境的软件制品,并且在传输过程中采用 SSL/TLS 加密协议。
元数据管理:
除了存储制品本身,制品库还管理制品的相关元数据。这些元数据包括制品的名称、描述、作者、许可证信息等。通过元数据,开发团队可以更好地了解制品的性质和用途,便于在众多制品中进行选择和使用。例如,在搜索制品时,可以根据元数据中的描述和标签来找到符合需求的软件组件。
参考
介绍制品库 —— 豆包[……]
「LAPTOP/SECOND-BRAIN」- 我们的选择
接近需求的产品
Lenovo YOGA BOOK 9i
双屏,触屏
# 10/20/2023 现在,还未上市,但是该笔记本是最接近于我们需求的;
1)蓝牙键盘,要单独携带,或许会比较繁琐;
2)磁吸支架,需要单独携带(管理);
3)我们依赖的软件并未对 Windows 支持;
Surface Laptop Studio
# 10/20/2023 我们购置 Surface Laptop Studio 笔记本,作为我们的办公平台;
1)虽然屏幕能够平铺,但是却无法同时使用键盘;
2)我们依赖的软件并未对 Windows 支持;
我们最终的选择
Lenovo YOGA BOOK 的外观符合我们的预期,但是其为 Windows 生态,那就意味着我们需要使用 OneNote 将笔记软件。但是 OneNote 的闭源的,部分功能不满足我们的需求,并且放弃 Linux 意味着失去了更多的可能性。
最后,我们想对我们的笔记软件进行适配(增加手写插件),并为我们的笔记本增加触屏。[……]
「COMPUTER」- 电脑 | Computer
认识
计算机是一种通过执行预设程序或指令来自动处理数据的电子设备。它能高效完成数学运算、逻辑判断、数据存储、信息检索等任务,广泛应用于科学、工程、商业和日常生活。
计算机(Computer)是一种能够按照程序指令自动、高速处理数据的电子设备。它能够执行复杂的计算、逻辑判断、数据存储和信息管理任务,广泛应用于科研、工业、商业、教育及日常生活等领域。
教育培训
红警维修培训基地:http://www.hjdn.cn/
书籍文献
笔记本电脑维修技能实训张石柱刘玉霞王金堂等编著著https://www.zhihu.com/pub/book/119991390
笔记本电脑维修实用教程张兴伟等编著著https://www.zhihu.com/pub/book/119983727
笔记本电脑维修从入门到精通陈迪茜印琳叶等著https://www.zhihu.com/pub/book/120331814
笔记本拆解 / 维护——从入门到精通https://zhuanlan.zhihu.com/p/39184669
电脑软硬件维修从入门到精通(第 2 版)王红军等著https://www.zhihu.com/pub/book/120331001
官方文档
WIP
博客社区
https://www.elecfans.com/
组成
计算机系统主要由硬件(Hardware)和软件(Software)两大部分构成。
CPU:执行指令的“大脑”。
内存(RAM):临时存储运行中的程序和数据。
存储设备:硬盘(HDD)、固态硬盘(SSD)等。
输入 / 输出设备:显示器、键盘、打印机等。
硬件(Hardware)
硬件是计算机的物理组成部分,包括:
– 中央处理器(CPU):负责执行程序指令,进行运算和控制。
– 内存(RAM):临时存储运行中的程序和数据,断电后数据丢失。
– 存储设备:
– 硬盘(HDD):机械硬盘,容量大但速度较慢。
– 固态硬盘(SSD):速度快、耐用,但价格较高。
– 输入设备:键盘、鼠标、摄像头、麦克风等。
– 输出设备:显示器、打印机、音响等。
– 主板(Motherboard):连接所有硬件组件的中枢电路板。
– 显卡(GPU):处理图形计算,适用于游戏、AI、视频渲染等。
软件(Software)
软件是计算机运行的程序和数据的集合,分为:
– 系统软件:如操作系统(Windows、macOS、Linux)、驱动程序等。
– 应用软件:如浏览器(Chrome)、办公软件(Office)、游戏等。
原理
计算机基于冯·诺依曼体系结构,主要流程:
输入(Input):用户通过键盘、鼠标等输入数据。
处理(Processing):[……]
「Eclisep」- Gradle
导入 Gradle 项目
若无 Gradle 插件
如果要在Eclipse中导入Gradle项目,需要在build.gradle中加入apply plugin: “eclipse”,然后运行如下命令:
cd myProject/
gradle eclipse
执行gradle eclipse命令后,会生成名为.project、.classpath、.setttings的文件及目录,然后就可以在Eclipse中导入该项目。
如果在 Eclipse 中,如果有 Gradle 插件,可以直接导入项目,就不需要像上面那样初始化了。
若有 Gradle 插件
在 Eclipse 的 Marketplace 中搜索 Gradle,并安装如下插件:
如果Eclipse中安装了Gradle插件,可以直接导入Gradle项目。
File -> Import -> Gradle -> Existing Gradle Project ,如下截图:
参考文献
Gradle/The Eclipse PluginsCSDN/Eclipse + Gradle环境配置Using the Gradle build system in the Eclipse IDE – TutorialImport existing Gradle Git project into Eclipse[……]
「GUI-FRAMEWORK」- 常用 GUI 框架 | Widget Toolkit | Widget Library | GUI Toolkit | UX Library
认识
我们需要对 Zim Desktop Wiki 进行二次开发(增加我们喜欢的功能),但是该应用通过 GTK 开发,所以受制于 GTK 自身的特性;
该笔记将记录:我们尝试了解(调研)常见的 Linux 桌面环境的 GUI 框架,以及相关问题的解决办法;
组成
WIP
构建
常用的跨平台 GUI(图形用户界面)框架包括以下几种:
2)wxWidgets:wxWidgets 提供了一种创建跨平台的 C++ 应用程序的方式。它有一个丰富的 API 集,包括文件系统,线程,日期和时间,数据结构等等;
3)GTK:GTK 是一个为 GIMP 创造的开源跨平台工具包。它主要用于创建图形界面,但它也包含一些非 GUI 功能;
4)JavaFX:JavaFX 是一个 Java 的图形用户界面库,用于创建丰富的互联网应用程序。它支持多种操作系统,包括 Windows、Mac OS、Linux 等;
Qt
Qt 是一个跨平台的应用程序开发框架,可以在 Windows、Mac OS、Linux 和一些嵌入式操作系统上运行。它可以用 C++ 或 QML(一种 JSON 类型的声明性语言)编写;
Cairo
Cairo (graphics) – Wikipedia
Cairo (stylized as cairo) is an open-source graphics library that provides a vector graphics-based, device-independent API for software developers.
GNUStep
访问 GNUStep 主页
GNUstep 是一个成熟的框架,适用于高级 GUI 桌面应用程序以及服务器应用程序;
该框架严格遵循苹果的 Cocoa(原 NeXT 的 OpenStep)API,但可移植到各种平台和体系结构;
Electron
Electron 是 GitHub 开发的一个开源库,用于使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序。它在 Node.js 上运行,并使用 Chromium 渲染引擎;
Coding Language | HTML, CSS and JavaScript
pywebview
Build GUI for your Python program with JavaScript, HTML, and CSS
官网:https://pywebview.flowrl.com/
文档:https://pywebview.flowrl.com/examples/
仓库:https://github.com/r0x0r/pywebview/
Webview | Java
https://gith[……]
「SURFACE/PRO/4」- 通过 USB 启动
问题描述
# 10/22/2023 我们需要测试 Linux 的手写支持,所以需要在 Surface Pro 4 上安装 Ubuntu 操作系统;
解决方案
参考 Boot Surface from a USB device – Microsoft Support 文档,以获取完整详细的介绍;
通过如下步骤,我们能够通过 USB 启动(并最终完成 Ubuntu 安装):
1)进入 Surface UEFI 界面:按住音量上键(当显示 Surface UEFI 界面时,再释放键),然后按开机建;
2)关闭 Security Boot 功能:Security / Security Boot / Change Configuration / None;
3)关闭 TPM 功能:Security / Trusted Platform Module (TPM) / Off
4)配置 USB 启动:Boot configuration,然后拖拽 USB 到首个;
5)退出重启:Exit / Reboot now;
操作系统的具体安装过程不再详述,其安装过程与其他硬件平台的安装过程类型;
参考文献
How to Turn Off Secure Boot on Surface: 2 WaysBoot Surface from a USB device – Microsoft Support[……]
「COMPUTER-HARDWARE」- IOMMU
IOMMU 作用
IOMMU 允许系统设备在虚拟内存中进行寻址,也就是将虚拟内存地址映射为物理内存地址,让实体设备可以在虚拟的内存环境中工作,这样可以帮助系统扩充内存容量,提升性能;
什么是 IOMMU?在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接 DMA-capable I/O 总线(Direct Memory Access-capable I/O Bus)和主存(main memory)。传统的内存管理单元会把 CPU 访问的虚拟地址转化成实际的物理地址。而 IOMMU 则是把设备(device)访问的虚拟地址转化成物理地址。为了防止设备错误地访问内存,有些 IOMMU 还提供了访问内存保护机制。参考下图:
IOMMU 的一个重要用途是在虚拟化技术(virtualization):虚拟机上运行的操作系统(guest OS)通常不知道它所访问的 host-physical 内存地址。如果要进行 DMA 操作,就有可能破坏内存,因为实际的硬件(hardware)不知道 guest-physical 和 host-physical 内存地址之间的映射关系。IOMMU 根据 guest-physical 和 host-physical 内存地址之间的转换表(translation table),re-mapping 硬件访问的地址,就可以解决这个问题;
另外,在 AMD 的 VIRTUALIZING IO THROUGH THE IO MEMORY MANAGEMENT UNIT (IOMMU)文档中,也有一个更全面的总结图:
参考文献
知乎——什么是 IOMMU?[……]
「IPSec」- AH, Authentication Header(RFC 2402)
IP.Protocol == 51
验证头(Authentication Header, AH)是 IPSec 协议集合中的另个重要安全协议,用于为 IP 提供数据完整保护、数据原始身份认证、防重放服务,但不提供机密性保护;
原理简述
AH 仅支持认证功能,不支持加密功能。AH 在每一个数据包的标准 IP 报头后面添加一个 AH 报文头。AH 对数据包和认证密钥进行 Hash 计算,接收方收到带有计算结果的数据包后,执行同样的 Hash 计算并与原计算结果比较,传输过程中对数据的任何更改将使计算结果无效,这样就提供了数据来源认证和数据完整性校验。AH 协议的完整性验证范围为整个 IP 报文;
特性特征
数据原始身份认证:AH 定义保护方法、报头的位置、身份验证的覆盖范围以及输出和输入处理规则,但没有对所用的身份验证算法进行定义;
防重放服务:与 ESP 一样,AH 没有硬性规定防重放保护,是否使用防重放服务由接收端自行选择。发送端无法得知接收端是否会检查其序列号,其结果是发送端必须一直认定接收端正在采用防重放服务;
数据完整保护:AH 与 ESP 提供的数据完整性稍有不同;AH 对外部 IP Header 部分也会进行身份验证;
机密性保护:由于 AH 不提供机密性保证,所以它也不需要加密算法,所 AH 头比 ESP 头简单得多。由于不需要填充和一个填充长度指示器,因此也不存在尾部字段。另外,也不需要一个初始化向量;
封装结构
| IP Header | AH | Data | // 传输模式
| IP Header | Data | // 原始数据
| New IP Header | AH | IP Header | Data | // 隧道模式
进行认证的部分:
传输模式:验证整个 IP 报文所有不变的部分(在传输过程中,将发生改变的字段(类似 TTL 等等),不会被 AH 进行验证)
隧道模式:验证整个 IP 报文所有不变的部分,包括 New IP Header 在内(同理,依旧验证不变的部分)
报文格式
认证部分不包括:服务类型,分段偏移,存活时间,头校验和;
鉴于 SRC-IP-ADDR 与 DST-IP-ADDR 会被校验,所以 AH 无法穿越 NAT 服务;
Sequence Number:序列号,是个从 1 开始的单项递增的计数器,唯一地标识每一个数据包,用于防止重放攻击;
Sequence Number:
SPI:IPsec 安全参数索引,用于唯一标识 IPsec 安全联盟;
Aut[……]
「Graphics Card」- Text mode and Graphics mode
显卡的两种模式:图形模式与文本模式
WIP
光标(Cursor)
这里讨论的“光标”是在字符模式下的光标,而在图形模式下的光标完全是另外一回事情。
在字符模式下,光标在屏幕的位置,保存在显卡内的两个 8-bit 寄存器中,合起来为 16-bit 数值,0 比表示光标在 0 行 0 列,80 表示光标在 1 行 0 列。
标准的 VGA 文本模式为 25 row x 80 col = 2000 个字符。
这两个寄存器是可读可写的,用于读取或设置光标的位置。
读取光标位置
显卡内的寄存器需要通过索引寄存器间接访问:
1)索引寄存器端口 0x3d4,用于指定内部某个寄存器;
2)数据端口为 0x3d5,用于读取数据;
指示光标位置的两个寄存器的地址为:1)高八位:14, 0x0E;2)第八位:15,0x0F;
参考文献
What is Graphics Mode?What is Text Mode? – Definition from Techopedia[……]
「TMV」- 集成开发环境 | Integrated Development Environment | IDE
构建
我们常用的编辑器(IDE)
Emacs – Editor MACroS
Eclipse
NetBeans
Visual Studio Code
PHPStorm
就是有点吃资源
几个内存怪物:PHPStorm、Firefox、Thunderbird、Eclipse、SwitchHosts!。SwitchHosts! 的内存用量已经直逼200M了,但是比起其他几个,这算好的了。
KompoZer – A wysiwyg HTML editorKompoZer download | SourceForge.net
A wysiwyg HTML editor that uses the Mozilla Composer codebase
Last Update: 2016-05-30
Spyder IDE (for Python)Home — Spyder IDE
Jupyter
https://jupyter.org/
针对我们的场景,Jupyter 更像是代码端测试工具。
FlutLab
FlutLab.io – Flutter IDE online
在线 IDE 环境
使用 Java 语言开发的文本编辑器
Java Based Editors
jEditRText: A syntax highlighting, code folding, programmer’s text editor
之所以整理这部分是为了看以下 Java 编辑器中的行号是如何实现的,由没有什么好的办法。
其他编辑器及设置
gedit
Word wrap in gedit – Stack Overflow
换行设置:Preferences => Text Wrapping,Enable text wrapping: On,Do not split words over two lines: Off
Source Insight
Source Insight 是一款面向程序员的源代码编辑器和代码分析工具。它支持多种编程语言,包括 C、C++、Java、C#、Python 等,并提供了许多有用的功能,例如代码自动完成、源代码导航、符号查找、代码重构、代码比较、代码可视化等等。
Source Insight 的主要特点包括:
支持多种编程语言,包括 C、C++、Java、C#、Python 等。
提供了代码自动完成、源代码导航、符号查找、代码重构、代码比较、代码可视化等多种有用的功能。
支持多种项目类型,包括单个文件、多个文件夹、整个目录等。
可以快速查找和定位代码中的错误和警告。
提供了丰富的代码分析工具,包括代码度量、代码依赖[……]
「CERTBOT」- 仅申请证书、在内网中申请证书、DNS01
在申请证书时,我们按照 Certbot 官方指引,需要公网服务器,并且 HTTP 站点在线(这主要是为了完成 HTTP 质询,以证明域名所有权)。当证书签发结束后,Certbot 程序将修改 Nginx 配置文件以使用新的证书。整个过程一步到位,开箱即用,非常方便。但是存在特殊场景:我们站点在内网,未对外公开,这样便无法完成 HTTP 质询,就无法进行签发证书;我们的 Web server 未受到 Certbot 的支持,因此无法自动修改配置文件,需要我们仅申请证书,然后自行修改配置文件。总之,这些特殊场景的存在,需要我们仅申请证书,而不能使用 Certbot 的自动化配置。该笔记将记录:在 Certbot 中,仅申请证书的方法,以及相关问题的处理、解决方案。
除了 HTTP 质询,我们还能使用 DNS 质询方法:
1)在申请证书时,根据要求添加 DNS 记录;
2)然后 Let’s Encrypt(ACME Server)检查该记录,以验证域名的所有权;
3)在检查通过后,进行证书签发,并自动保存在服务器中;
4)最后,我们修改 Web server 配置,以使用该证书文件;
第一步、开始申请证书
执行如下命令开始申请证书,按照提示操作即可:
certbot certonly –manual –preferred-challenges dns -d example.com
第二步、添加解析记录
当命令执行中,会收到类似如下提示,要求添加 TXT 解析记录:
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc
Once this is deployed,
Press ENTER to continue
根据上面提示,登录云商后台(比如阿里云、腾讯云等等),添加名为 _acme-challenge.example.com 的 TXT 记录,并使用 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc 作为记录值。
注意事项:
1)由于 DNS 记录不会马上生效,所以稍后再按回车键。
2)使用 dig +short -t txt _acme-challenge.example.com 命令验证 DNS 是否生效。
第三步、按下回车键
在确认 DNS 记录生效之后,按下回车键将会收到证书申请成功的提示(类似如下内容):
IMPORTANT NOTES:
– Congratulations! Your[……]