kubernetes持久化存储(二)

StorageClass的使用

前面的文章里我们学习了 PVPVC 的使用方法,但是前面的 PV 都是静态的,什么意思呢?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的需求,比如我们有一个应用需要对存储的并发度要求比较高,而另外一个应用对读写速度又要求比较高,特别是对于 StatefulSet 类型的应用简单的来使用静态的 PV 就很不合适了,这种情况下我们就需要用到动态 PV,也就是我们今天要讲解的 StorageClass

[阅读全文]

kubernetes持久化存储(一)

PV和PVC的使用

Kubernetes提供了可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据。但是显然存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes 便引入了 PVPVC 两个重要的资源对象来实现对存储的管理。

[阅读全文]

正则表达式入门

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。例如:Handel、Händel和Haendel这三个字符串,都可以由H(a|ä|ae)ndel这个模式来描述。大部分正则表达式的形式都有如下的结构:

[阅读全文]

浅谈HTTPS原理

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。

[阅读全文]

使用二进制搭建kubernetes三节点高可用集群

Kubernetes 是一个开源容器编排引擎,用于容器化应用的自动化部署、扩展和管理。该项目托管在 CNCF。你可以通过阅读 官方文档了解Kubernetes和其基础概念。

接下来这篇文章将介绍如何使用二进制部署Kubernetes v1.14.8。通过这种hard-way的方式来帮助你更好的了解Kubernetes。

Kubernetes Cluster搭建的过程,可以参考和我一步步部署 kubernetes 集群。我将其中的脚本整理好了,并通过VagrantVirtualBox在本地快速创建k8s集群。

Github地址如下: https://github.com/amuguelove/k8s-setup-tutorial/tree/v1.14.8

[阅读全文]

Docker最佳实践

了解了用于构建 Dockerfile 的基本方法后,我们在编写 Dockerfile 的时候并没有一些强制要求,导致很多构建的镜像不符合一些最佳实践,典型的就是镜像构建的层数非常多,对一些基本指令的区别不是很清楚。下面介绍 Dockerfile 在实际使用中的一些最佳的实践方式。

[阅读全文]

Docker的底层技术

Docker最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runCcontainerd

Docker 本质就是宿主机的一个进程,Docker 是通过 namespace 实现资源隔离,通过cgroup 实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作。

传统的虚拟机通过在宿主主机中运行 hypervisor 来模拟一整套完整的硬件环境提供给虚拟机的操作系统。虚拟机系统看到的环境是可限制的,也是彼此隔离的。 这种直接的做法实现了对资源最完整的封装,但很多时候往往意味着系统资源的浪费。 例如,以宿主机和虚拟机系统都为 Linux 系统为例,虚拟机中运行的应用其实可以利用宿主机系统中的运行环境。

[阅读全文]

代码整洁之道

最近因为一些契机,花了2到3天看完**《代码简洁之道》**这本书,英文名为:Clean Code

开篇就有有这么简单一句话:“阅读这本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员”。是的,没错,我想成为更好的程序员。所以我决定好好阅读下这本书。

回想2019年,确实是我最忙碌的一年,做过几个项目,其中部分涉及到架构,但是大部分时间都关注在如何实现业务代码,没有更好的关注到代码本身的细节。虽然经常了解到关于整洁代码相关的知识,在工作中也或多或少的用到,比如每天的code review以及TDD开发等等。但是确实不够系统,大多时间忙于完成业务,通过阅读本书,以及其中大量简洁代码的指南,受益匪浅。

[阅读全文]

使用JMH对Java Object Mapping框架做性能对比

JMH概述

JMH 是一个由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发的 Micro Benchmark Framework 。何谓 Micro Benchmark 呢?简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。可以看出 JMH 主要使用在当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。

比较典型的使用场景还有:

  • 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
  • 一个函数有两种不同实现(例如实现 A 使用了 FixedThreadPool,实现 B 使用了 ForkJoinPool),不知道哪种实现性能更好

尽管 JMH 是一个相当不错的 Micro Benchmark Framework,但很无奈的是网上能够找到的文档比较少,而官方也没有提供比较详细的文档,对使用造成了一定的障碍。但是有个好消息是官方的 Code Sample 写得非常浅显易懂,推荐在需要详细了解 JMH 的用法时可以通读一遍——本文则会介绍 JMH 最典型的用法和部分常用选项。

我Fork了一份到github,可以提供大家参考一下,使用gradle构建。jmh-gradle-samples

[阅读全文]

Gradle发布Java Library到Maven中央仓库

最近打算将一些基础的Jar包上传到Maven中央仓库,方便在自己项目中引用。本文将结合Gradle的两个插件maven-publishsigning来讲解如何发布一个Jar包。

在开始之前,先对OSSRH做下了解是很必要的。

OSSRHSonatype Open Source Software Repository Hosting Service,为开源软件提供maven仓库托管服务。你可以在上面部署snapshotrelease等,最后你可以申请把你的release同步到Maven Central RepositoryMaven中央仓库)。

[阅读全文]