Use microk8s to make a kubernetes environment in Linux

注意:从 github上来看 microk8s的状态不好,有100+的issues,且其build状态为failed。暂停关于microk8s方面的任务。

The microk8s is a good entry level tool to help us get started with kubernetes.

To install it, refer to
https://microk8s.io/docs/ .

After that, when we want to access the api server, we'll need the default username and password. It …

Continue Reading

Get started with Kubernetes - minikube + Docker on Windows 10

NOTE(Justin): 从minikube开始但又定制选项的情况下, 遇到问题很难处理. 不如从基础起步, 逐步增加内容.

Install kubectl

With chocolatey,

$ choco install kubernetes-cli
# Installed to C:\ProgramData\chocolatey\lib\kubernetes-cli\tools

References: https://kubernetes.io/docs/tasks/tools/install-kubectl/

Create a VM with docker-machine

Create virtual switch 'aexv' first. 然后使用 docker-machine 来创建一个 有docker的虚拟机. 这里需要取消proxy设置, 否则容易出现网络问题.

$ docker-machine --native-ssh create -d hyperv …

Continue Reading

OpenStack Keystone如何处理长时间操作过程中的token过期问题

背景介绍

本文梳理 Keystone 的 token 过期的处理方式。Token 是有期限的,而且不能延期,过期以后,身份验证就会被拒绝。这种设计是token安全性的要求。那么,如果用户通过验证以后,所执行的服务操作费时很长,中途再次需要使用用户的已过期的token,该怎么处理?

早期版本的Keystone是不支持这种情况的,一般通过其他的设计来绕开这一局限性,比如把过期时间设置得足够长等。这实际上降低了token的安全性。比如,Horizon的用户就会遇到由于token过期而导致被log out的情况。对于那些长时间使用Horizon的用户而言,这使得Horizon比“正常”的web应用要显得繁琐一些。 在服务之间调用时,这一问题更严重。比如,当用户调用Nova API创建一个服务器时,Nova需要调用Glance服务来得到镜像,需要调用cinder来创建磁盘等等,也就是服务之间需要调用。当用户使用了合法(未过期)的token调用了Nova API,而Nova在调用后续其他服务API时,如果操作时间很长,那么用户的Token可能会过期。早期的设计中,这种请求下请求会超时失败,而且很难意识到是由于token过期导致的。

好消息是这一问题已经解决了。在现在的设计中,Keystone会区分user token和service …

Continue Reading

初识开源分布式存储Ceph

数据存储是信息化建设和数字化企业的基石之一。随着软件技术的发展,高可靠 和高性能的存储不再意味着昂贵和专有系统。Ceph就是这样一款优秀的开源分布式 存储方案。

本文针对阅读了Ceph的一些文档资料,对Ceph有概念性的认识,希望通过简易的本地环境来动手尝试的同学。如果还没有了解Ceph的基本概念,请先通读一下参考资料的前两项。

安装

基本上按照Ceph官方的快速安装手册,手册地址为:

http://docs.ceph.com/docs/master/start/

上述手册对多种Linux环境提供了关键说明。本文的特点是更加具体、直观、可以一步一步 参照完成整个过程。

安装前的准备

首先,我们需要多台Linux服务器。在本文中,我使用的是本地电脑上安装的虚拟机。

我的桌面电脑是Windows,有16G内存,安装了虚拟机软件VMware或者VirtualBox后, 就可以安装Linux虚拟机,我使用的Linux版本是Ubuntu 16.04.1 LTS。如果你的电脑 内存不足,可以在云平台(比如阿里云等)上同一个VPC内创建最小规格的Linux虚拟机。

先安装第一台虚拟机, 虚拟机参数设定如下:

  1. 命名为node1.027yunwei.com …

Continue Reading

CAP Theorem

CAP 是个著名的分布式定理,它说明了在分布式环境中,当网络存在故障导致节点间互相不能通信时, 即存在网络Partition时,系统的一致性和可用性不能两全。需要注意的是,有些人将此特性表达为三个 特性只有两个能同时满足,虽然形式上正确但是没有抓住该定理看问题的角度,因为P (Partition) 不是一个系统的特性,而是一种分布式系统中可能发生的异常状态。当无网络故障时,高可用和高一致性 都可满足。

那么当网络故障出现时,系统应该选择高可用性还是高一致性呢?这要根据系统的业务特点来权衡。 当准确度比可用性更重要时,选择保证高一致性。当可用性比准确度更重要时,选择保证高可用性。很多 互联网社交服务选择保证高可用性,比如评论的数量、评论条目等,当网络存在问题时,提供旧的数据而 不是提示系统故障。这类系统的特性可概括为BASE, Basically Availability, Soft State and Eventually Consistency.

基于CAP还发展出了另外一个权衡定律PACELC,那就是网络异步复制的延迟 (Latency) 和一致性间的 权衡。该定理认为,网络完全不可用的partition状况是极少数状况,而网络延迟则是更常见的情况。 那么在存在网络延迟的情况下权衡是否需要一致性。一般强调高可用的系统,在高一致性和允许延迟上 …

Continue Reading

CARP, Common Address Redundancy Protocol

CARP is the Common Address Redundancy Protocol. Its primary purpose is to allow multiple hosts on the same network segment to share an IP address. CARP is a secure, free alternative to the Virtual Router Redundancy Protocol (VRRP) and the Hot Standby Router Protocol (HSRP).

CARP works by allowing a …

Continue Reading

High Capacity Networking

Stacking

Stacking, use multiple devices as logically one device, gaining more bandwith and more ports.堆叠来扩展端口数和带宽

设备冗余

冗余的交换机,通过stp及相关协议来选择活动路径,并避免循环。 冗余的路由器, 通过vrrp及相关的协议来选定某个路由器。vrrp既能过提供冗余设备的failover,也能过提供load balance的效果。

网络划分

Divide and Conquer 将流量分开,比如专门的网络来负责备份,数据,应用等

就像虚拟机不能比宿主物理机大一样,虚拟的网络带宽也不能比宿主物理网络大。云计算的计算节点可以通过分布式来分散 计算任务,这对于计算量大的任务是可行的 …

Continue Reading

Keystone Token revocation issues

Keystone的Token Revocation的实现方式是导致Keystone Token Validation变慢的根源。 由于所有的OpenStack API调用均需要Validate Token,这也将该问题扩大成整个OpenStack云平台的性能瓶颈之一。

在2016年7月22日的Openstack Digest, Vol 37, Issue 22中,来自Redhat的Luke Hinds提到了该问题可被利用来进行拒绝服务攻击(DoS)。 Revocation Event记录的保存时间是Token Expiration 加上Expiration Buffer。在默认配置下,其值为1.5小时。在这个时间段内, 一个合法的普通OpenStack用户可以不停地生成Token,然后revoke Token,从而生成大量的Revocation Event记录,拖慢Token Validation。

在Validate Token时对Revocation Event表的查询语句是:

Select <Column List> from Revocation_Event Order By Revoked_at

在用户不停地调用revoke Token的情况下,这样一个语句的结果是变化的,导致在数据库端和Keystone端的缓存都是会失效的。 当结果集足够大时,这一查询过程和结果数据传输过程都会变得很费时 …

Continue Reading