0%

代理是网络中的一项重要的功能,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站,对于客户端来说,代理扮演的是服务器的角色,接收请求报文,返回响应报文;对于web服务器来说,代理扮演的是客户端的角色,发送请求报文,接收响应报文。

代理具有多种类型,如果是根据网络用户划分的话,可以划分为正向代理和反向代理:

阅读全文 »

排序算法简介

排序算法顾名思义,就是用来排序的算法,它可以将一组相同类型的元素从无序转变为有序。

排序算法有多种考量指标:

  • 时间复杂度:描述算法的快慢
  • 空间复杂度:描述算法额外占用的存储空间,如果不占用则可以说是原地排序
  • 稳定性:如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变
阅读全文 »

前篇文章有说明了CRD用来创建自定义资源,不过,资源只是一些数据,真正想要让这些数据具备实际意义还需要围绕数据的操作。

在k8s中,数据称之为资源,比如说Namespace, ReplicaSet, Deployment等等,而对这些数据的操作则是通过控制器实现的,比如说namespace-controllerdeployment-controller等等。

阅读全文 »

什么是CRD

CRD的全称为CustomResourceDefinitions,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方式,使用户可以自定义新的资源,以扩展k8s的功能。

使用CRD可以在不修改k8s源代码的基础上方便的扩展k8s的功能,比如腾讯云TKE使用CRD:logcollectors.ccs.cloud.tencent.com以添加日志收集服务,而Istio也大量使用到了CRD。

阅读全文 »

经过namespace,cgroup和overlay2的简单认识后,该文章将实现一个run命令版本的容器,该程序能够识别命令行参数,运行namespace隔离的程序,并且能挂载/proc目录。

实现效果

先来看看实现效果吧。

使用说明界面,主要使用了github.com/urfave/cli库,以提供方便的命令行参数操作。

阅读全文 »

前言

玩过容器的同学肯定都知道,容器里所看到的文件系统和宿主机是不一样的。以docker为例,运行一个alpine的容器并进入:

1
2
3
4
5
[root@staight chmdocker]# ls /
bin boot cgroup data dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@staight chmdocker]# docker run -it --name=alpine alpine
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
阅读全文 »

前言

cgroup是实现容器的除了namespace以外的另一种技术,namespace的用途是隔离环境,而cgroup则用来限制进程使用的资源。

对于cgroup的概述之前已写过一篇文章,这是链接:linux资源管理器–cgroups理解

简单来说,使用cgroup限制进程的资源有如下几步:

  1. 规划需要限制的资源,比如说限制内存资源为100M。
  2. 创建需限制的进程。
  3. /sys/fs/cgroup/memory/目录下创建文件夹,并进入该文件夹。
  4. 100M写入memory.max_usage_in_bytes文件,将进程pid追加写入tasks文件。
阅读全文 »

前言

最近一直在看Kubernetes有关的知识,自认为对于k8s已经有了较深的理解,且在处理客户问题中也积累了相当多的排错经验。不过,在处理k8s相关问题时,我感觉到有几个知识点是我比较欠缺的,没有掌握的:

  • 容器:即容器本身的问题,而非容器编排引擎的问题。比如说如下的案例:
    • 使用kubectl delete PODNAMEdocker rm CONTAINERID删除容器后,发现容器依然存在。经研发大佬研究后说是docker的bug,docker与容器之间的同步出现问题。
    • 运行容器服务的云服务器出现重启现象,发现原因是内核crash。经研发大佬研究后发现是cgroup在耗尽内存后申请内存失败引发的内核空指针crash。
  • 微服务:在k8s上运行微服务相关的咨询。这些并非排错问题,但我觉得有必要进行相关的学习,k8s本身就适合作为微服务的载体,如果说光学k8s不学微服务,岂不等于武功练了一半?
  • k8s的编程扩展:出于实用度以及职业的考虑,我在学习k8s的过程中一直没有涉及k8s的编程扩展部分,比如自己实现CRI,CNI,CSI,以及CRD,以及自定义准入控制器。我不打算专门研究这些,但是有必要带着看一点点。
阅读全文 »

有时候需要多个用户共用一个集群,这种情况需要为其分配一个新的用户;为了集群的安全性还需要限制新用户的权限范围;多个用户难免会有资源竞争的情况,这时还需要限制其资源使用。

Kubernetes提供了一系列机制以满足多用户的使用,包括多用户,鉴权,命名空间,资源限制等等。

接下来将创建一个名为staight的用户,其拥有practice命名空间下的管理员权限,该命名空间有着CPU,内存,Pod数量等限制。

阅读全文 »