暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
技术分享 _ Kubernetes 学习笔记之基础知识篇.pdf
120
5页
7次
2024-06-20
免费下载
技术分享 | Kubernetes 学习笔记之基础知识篇
收录于话题
#kubernetes
作者:张强
爱可生研发中心成员,后端研发工程师,目前负责DMP产品 Redis 相关业务开发。
本文来源:原创投稿
* 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
一. 什么是 Kubernetes ?
Kubernetes,又称为 k8s(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s )或者
简称为「kube」,是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务。相比与传统部署
以及虚拟化部署方式而言,具有如下特点:
敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的 容器镜像构建和部
署。
关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像, 从而将应用程序与基础架
构分离。
可观察性:不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行。
跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes
Engine 和其他任何地方运行。
以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程
序。
松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 -
而不是在一台大型单机上整体运行。
资源隔离:可预测的应用程序性能。
资源利用:高效率和高密度。
1. Docker 的兴起
要说 Kubernetes,还要从 docker 容器化技术谈起。
2013年,Docker 公司(彼时还称之为 dotCloud Inc.)在 PyCon 大会上首次公开介绍了 Docker 这一产品。
当时最热门的 PaaS 项目是 Cloud Foundary,然而 Docker 项目在 docker 镜像上的优秀设计,解决了当时其
他 PaaS 技术未能解决的应用打包和应用发布的繁琐步骤问题。大多数 docker 镜像是直接由一个完整操作系统
的所有文件和目录构成的,所以这个压缩包里的内容跟你本地开发和测试环境用的操作系统是完全一样的 ——
正是这一优秀的特性使得 docker 项目在众多 Pass 技术迅速崛起。
2. Docker 编排的进化
Swarm 的最大特点,是完全使用 Docker 项目原本的容器管理 API 来完成集群管理。在部署了 Swarm 的多机
环境下,用户只需要使用原先的 Docker 指令创建一个容器,这个请求就会被 Swarm 拦截下来处理,然后通过
具体的调度算法找到一个合适的 Docker Daemon 运行起来。
2014年,docker 并购 Fig 项目,将其发展为现在的 Compose,使得容器的部署更加的便利 —— 可以使用配
置文件就可以完成较为复杂的容器的编排参数的配置。同年6月,Google 公司发布了 Kubernetes
2015 年 6 月 22 日,由 Docker 公司牵头,CoreOS、Google、RedHat 等公司共同宣布,Docker 公司将
Libcontainer 捐出,并改名为 RunC 项目,交由一个完全中立的基金会管理,然后以 RunC 为依据,大家共同
制定一套容器和镜像的标准和规范。这套标准和规范,就是 OCI( Open Container Initiative )。OCI 的提
出,意在将容器运行时和镜像的实现从 Docker 项目中完全剥离出来。从 API 到容器运行时的每一层,
Kubernetes 项目都为开发者暴露出了可以扩展的插件机制,鼓励用户通过代码的方式介入到 Kubernetes 项目
的每一个阶段。Kubernetes 项目的这个变革的效果立竿见影,很快在整个容器社区中催生出了大量的、基于
Kubernetes API 和扩展接口的二次创新工作,比如:
微服务治理项目 Istio;
有状态应用部署框架 Operator
还有像 Rook 这样的开源创业项目,它通过 Kubernetes 的可扩展接口,把 Ceph 这样的重量级产品封装成
了简单易用的容器存储插件。
二. Docker 容器的技术基础
1. 进程与 Linux Namespaces
为了达到在容器中排除其他进程,docker 利用了 Linux 的 Namespace 机制。在 Linux 系统中创建线程的系
统调用是 clone(),比如:
int pid = clone(main_function, stack_size, SIGCHLD, NULL);
此时,这个系统调用就会为我们创建一个新的进程,并且返回它的进程号 pid。而如果在用 clone() 系统调用创
建一个新进程时,加入 CLONE_NEWPID 参数,比如:
int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL);
此时这个进程就会在一个全新的进程空间里,在这个进程空间里,它的 pid 是1。除去 PID Namespace,
Linux 系统还提供了 Mount、UTS、IPC、Newwork 和 User 等 Namespace。这就是为什么容器中只能「看
到」自身容器内的进程的原因了。
2. 资源限制与Linux Cgroups
虽然在容器中 PID 为1的进程只能看到容器里的情况。但是从宿主机角度来看,它作为一个普通进程与其他进程
依然是平等关系,也就说它能够使用的资源(CPU、内存等),仍旧可以被宿主机上的其他进程占用。这种情
况导致了容器内的进程「隔离了但没有完全隔离」的尴尬,是不符合容器作为一个「沙盒」的特性的。
Linux Cgroups 的全称是 Linux Control Groups。它的最主要作用,就是限制一个进程组能够使用的资源上
限,包括 CPU、内存、磁盘、网络带宽等。比如:
blkio,为块设备设定 I/O 限制,一般用于磁盘等设备;
cpuset,为进程分配单独的 CPU 核和对应的内存节点;
memory,为进程设定内存使用的限制。等等
of 5
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜