LLLeon
LLLeon
本文记录在 Mac 上通过 kubeadm 在 VirtualBox 中的 CentOS 7 部署 K8s 集群的过程。 环境: - 本地系统:macOS 10.15.7 - VirtualBox 版本:6.1.16 r140961 - CentOS 镜像版本:CentOS-7-x86_64-DVD-2009.iso ## 1. 安装 CentOS 7 新建虚拟机: -...
在群里看到有人讨论 Once 的实现细节,也看了下源码,记录一下。 Once 的一般使用场景:确保初始化操作只执行一次。 直接看源码吧: ```go package sync import ( "sync/atomic" ) type Once struct { done uint32 m Mutex } func (o *Once) Do(f func()) { // 下面是一个...
## 缓存击穿 在缓存系统中,当某个热点数据的缓存过期时,如果瞬间有大量请求到达 DB,可能会导致 DB 出现问题。 怎么解决?可以让先到达的请求将最新数据更新到缓存,其它请求再使用缓存数据即可。 Go 中的 **singleflight** 包就可以用于这个场景。它可以只让其中一个请求得到执行,其余请求会阻塞到该请求返回执行结果并使用该结果,从而达到防止击穿的效果。 ## singleflight 源码 [singleflight.go](https://github.com/golang/sync/blob/036812b2e83c/singleflight/singleflight.go) 的源码比较简单: ```go // 表示一组请求 type call struct { // 用来阻塞其余请求 wg sync.WaitGroup // 被调用的函数返回的结果和 err...
# Kubernetes scheduler 源码阅读 本文基于 Kubernetes 1.20 版本。 Kubernetes 调度器负责将 Pod 调度到集群内的节点上,它监听 API Server,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点(更新 Pod 的 `NodeName` 字段)。 ## 0. 调度框架简介 调度框架是 Kubernetes Scheduler 的一种可插入架构,可以简化调度器的自定义。...
## 0. 安装 Prometheus 和 Grafana 等组件 通过 Minikube 来安装 Kubernetes 测试环境。 ```bash $ minikube start --cpus 4 --memory 8192 --vm-driver hyperkit $ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts $ helm...
## 问题 在项目中使用 `go mod vendor` 将依赖库拷贝到了 vendor 目录中,用着用着出现问题了:在想使用一个包的某个函数时,IDE 的提示死活出不来。刚开始很纳闷,难道是 IDE 抽风了?不过又一想,没有玄学,肯定是哪里出问题了。 去 vendor 目录对应 path 下找该函数,翻遍了几个文件都没找到。又去 GitHub 仓库我使用的版本里面找了找,欸?这里的文件怎么比我 vendor 目录下面的多好多? ## 奇妙 在尝试各种 go mod 操作之后,vendor 目录中依赖库的文件还是不完整。Google 了一下,发现这个 [Issue](https://github.com/golang/go/issues/26366#issuecomment-405683150),有人专门写了个...
# 解决虚拟机无法下载 k8s.gcr.io 镜像的问题 ## 背景 两种方式: - 有代理的宿主机先下载好镜像再 scp 到虚拟机 OS 中。 - 给虚拟机 OS 中的 docker 添加代理。 环境: - 宿主机系统:macOS 10.15.7 - 虚拟机软件:VirtualBox - 虚拟机系统:CentOS 7 问题: 在虚拟机上安装...
目标:通过 SSH 从 Server A 免密登录到 Server B。为了表述方便清晰,下面将 Server A 称为本地主机,将 Server B 称为远程主机。 方式:Public Key 认证。 原理: - 在本地主机上通过 ssh-keygen 生成一对密钥,简单说就是公钥用来加密,私钥用来解密(可扩展学习非对称加密)。 - 将公钥拷贝到远程主机,然后在本地主机进行 SSH 连接。 - 远程主机上的 sshd 会产生一个随机数并用上面的公钥进行加密后发给本地主机,本地主机会用私钥进行解密并把这个随机数发回给远程主机。...
有的项目用 GitLab,有的项目用 GitHub 时,需要配置一下。 ### 1. 创建各自的私钥/公钥 例如创建 GitLab 的私钥/公钥,用以下命令: ```bash ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "[email protected]" ``` ### 2. 配置 config 文件 在 `~/.ssh` 目录下创建 config 文件: ```bash...
此文为翻译文章,这是[原文地址]()。 此页面收集在审核 Go 代码期间所做的常见注释,以便可以用缩写来指代详细的解释。这是一长串常见的错误,不是一个全面的风格指南。 你可以把这当作是 [Effective Go]() 的补充。 - [Gofmt](#Gofmt) - [Comment Sentences](#Comment Sentences) - [Contexts](#Contexts) - [Copying](#Copying) - [Declaring Empty Slices](#Declaring Empty Slices) - [Crypto Rand](#[Crypto Rand]()) - [Doc...