0%

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

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

  • 正向代理:将客户端作为网络用户。客户端访问服务端时,先访问代理服务器,随后代理服务器再访问服务端。此过程需客户端进行代理配置,对服务端透明。
  • 反向代理:将服务端作为网络用户。访问过程与正向代理相同,不过此过程对客户端透明,需服务端进行代理配置(也可不配置)。
阅读全文 »

排序算法简介

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

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

阅读全文 »

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

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

这些控制器由一个专门的组件管理,叫做kube-controller-manager,可以加上--help参数查看支持的控制器,目前有如下:

阅读全文 »

什么是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目录。

实现效果

先来看看实现效果吧。

阅读全文 »

前言

玩过容器的同学肯定都知道,容器里所看到的文件系统和宿主机是不一样的。以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
阅读全文 »

前言

最近一直在看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数量等限制。

阅读全文 »