Robin Blog

Stay hungry, Stay foolish

私有镜像仓库选型:Harbor VS Quay

Private Docker Registry Selection: Harbor VS Quay

Docker 虽然提供公有镜像仓库 Docker hub,但是满足不了绝大部分企业对镜像仓库私有化部署的需求。 私有镜像仓库解决方案中,作为 CNCF 项目的 Harbor 长期处于统治地位,得到非常广泛的使用。 近期 Red Hat 开源镜像仓库项目 Quay,为私有镜像仓库增加了一种选择,因此引起了大家的极大兴趣。 下面将全面地对比 Harbor 和 Quay,为它们之间的选型提供指导。...

让你的 Golang 代码更规范

Lint for Your Golang Code

代码规范除了让多人协作的项目的代码风格一致,甚至能够发现一些潜在的缺陷。因此,代码规范可以认为是代码开发的最佳实践,能够大大提高研发效率。 针对 Golang 语言,继 Gometalinter 不再维护之后,GolangCI-Lint 成为最佳的代码规范检查工具。 本文将基于实例详细介绍一些最佳实践,让你的 Golang 代码更规范。 GolangCI-Lint 最佳实践 基于 Gol...

PostgreSQL 数据升级

Data Upgrade for PostgreSQL

PostgreSQL Installation 为了演示后续的实验,可以通过 PostgreSQL 镜像,在本地快速搭建一个 PostgreSQL 的环境。 $ docker run -d --name pg -v data:/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_DB=pos...

Golang 中如何做好单元测试

单元测试是保证软件质量的最基本的测试,也是各种测试中执行成本较低、粒度较小的一种。由开发者在开发软件功能的同时,添加单元测试代码来保证各函数的逻辑的正确性。 如果很多缺陷能够通过单元测试发现,被开发者在开发功能过程中解决,就能避免这些缺陷进入软件生命周期的后续阶段,极大地减少解决这些缺陷的成本。 因此,保证代码的单元测试覆盖率,是一个程序员职业素养的重要体现,也会软件质量的重要保证。本文主要...

Kubernetes 集群健康监控

Kubernetes Cluster Health Monitoring

实验基于 Kubernetes v1.12.6。 Kubernetes 已经成为容器云平台的操作系统,其稳定性和可靠性非常重要,直接决定平台上所有业务的稳定性和可靠性。 Kubernetes 提供的 hyperkube 能够非常方便地将 Kubernetes 的组件通过容器化的方式运行在 Kubernetes 集群中,等同于用 Kubernetes 的能力,管理和调度自身组件。 同...

基于 Dragonfly 的 P2P 镜像分发

P2P Image Distribution Based on Dragonfly

基于 Dragonfly v0.3.0 版本。 容器技术虽然通过镜像统一的业务的构建、分发和运行,但是当容器云平台达到一定规模之后,镜像的分发可能成为整个平台的性能瓶颈。 例如:一些对业务启动时间比较敏感的场景下,可能因为镜像太大、拉取时间过长而影响正常业务;在大规模集群下,大量节点同时拉取镜像, 会短时间给镜像仓库很大的负载压力,影响镜像仓库的稳定性和响应速度。Dragonfly...

Kubernetes Labels 和 Annotations 最佳实践

Best Practice for Kubernetes Labels and Annotations

Labels Label 允许在 Kubernetes 资源上附加对于系统或者用户有意义的标示性属性,方便对 Kubernetes 资源进行分组管理。 这些属性对不会直接对 Kubernetes 核心组件产生语义,不过可能间接地被 Kubernetes 核心组件处理产生效果。例如:用户在 pod 或者 node 上加一些 label,然后配置一些调度策略,Kubernetes 的 sche...

在 GKE 上的 Istio 实践

Istio Practice on GKE

GKE 中新建 K8s 集群 GKE 是 Google Cloud 提供的 K8s 托管式环境,能够一键快速部署 K8s 集群。 K8s 需要几分钟才能创建成功。通过 Cloud Shell 连接到 K8s 环境中进行操作。例如,查看所有节点信息: Install Istio 下载 Istio 安装包 $ curl -L https://git.i...

Golang 项目多版本依赖的引入

Import Multiple Versions of Deps in Golang

Golang 是通过 vendor 来管理依赖的,它将所有的依赖,根据引用路径按照一定目录结构放在 vendor 目录下。这样会导致一个问题:如何同时引用一个依赖的多个版本? 很明显,Golang 的这种依赖管理模式,是解决不了这个问题。下面介绍一种解决该问题的比较有意思的方法。 问题描述 场景1 假设当前开发的程序为 A,引用了依赖 B,B 又依赖 v1.0 版本的 C。同时,A 为...

容器化带权限控制的 MongoDB 集群

Containerized MongoDB Cluster with Authorization

搭建的 MongoDB cluster 的目的是为了保证高可靠和高可用,一个没有权限控制的 MongoDB cluster 是很难做到高可靠的。 任何人都可以在上面进行任何操作,且不说恶意攻击或损坏,就是人为的误操作,都有可能导致数据丢失的严重后果。 因此,在上一篇博客 《容器化 MongoDB 集群》 的基础上,本文继续深入探讨如何在容器化的 MongoDB cluster 上增加权限控制...