k8s入门篇
k8s入门篇docker起源我先简单介绍下docker的起源吧,docker是随着pass项目而发展起来的一种容器技术,具有解放开发人员,快速部署的能力定义开源高性能的容器化技术开源是他得以快速发展的原因高性能要用快和省来解释,后面讲docker特点时会详细讲容器化用一个词来定义我觉得就是隔离特点一、高效的虚拟化,它是在操作系统层面实现的虚拟化,直接复用本机的操作系统,而传统虚拟机是在硬件层面实现
k8s入门篇
docker
起源
- 我先简单介绍下docker的起源吧,docker是随着pass项目而发展起来的一种容器技术,具有解放开发人员,快速部署的能力
定义
- 开源高性能的容器化技术
- 开源是他得以快速发展的原因
- 高性能要用快和省来解释,后面讲docker特点时会详细讲
- 容器化用一个词来定义我觉得就是隔离
特点
-
一、高效的虚拟化,它是在操作系统层面实现的虚拟化,直接复用本机的操作系统,而传统虚拟机是在硬件层面实现的,而且需要再叠一个操作系统,所以说docker就这两方面而言是一种更高效的一种虚拟化
-
二、因为第一个特点,所以docket容器不用启动完整的操作系统,就是启动一个进程,所以速度很快
-
三、docker镜像提供了除内核外完整的运行时环境,起到了屏蔽环境差异的作用
实现原理
- 前面讲到了前两个特点,其实也是容器的特点,而容器实现的核心技术就是这两个,namespace和cgroups,这两种技术是干嘛,主要就是去做隔离这件事
namespace
-
通过namespace,可以隔离挂载点,隔离进程id,隔离网络设备、端口号,隔离进程间通信,隔离主机名和域名,隔离用户名和用户组,
-
比较后会发现上面提到的各种隔离中并不包括cpu和内存资源的使用,而这实际是通过cgroups来限额实现的,
-
原理分析
- 1.man unshare(unshare是实现一种namespace的方式)
- 2.ps -ef (显示所有的进程信息,其中1是根进程)
- 3.readlink /proc/$$/ns/pid(读取到的pid可以用于pid namespace的隔离识别)
- 4.unshare --pid --mount-proc --fork /bin/bash(以bash进程为根进程创建出一个隔离的环境)
- 5.ps -ef(此时显示的编号1的根进城是/bin/bash进程)
- 6.readlink /proc/$$/ns/pid(读取倒到的pid与第3步不等,说明pid namespace起到了隔离作用)
cgroups
-
全称就是control groups,控制组的意思,其中控制的目标是一个子系统的概念,
包括的内容像cpu使用率,同时也可以为进程分配单独的cpu节点,也可以限制块设备的io,控制进程可以访问哪些设备,标记进程的网络数据包,设计网络流量的优先级,挂起或恢复cgroups下的进程,让cgroups下的进程使用不同的namespace -
这些都是在当前系统的子系统目录下实现的
-
group就是对各种资源分组,同时是目录结构,天然就带有层级关系
-
原理分析
-
1.mount | grep cgroup (可以显示出cgroup控制的相关概念)
-
2.cd /sys/fs/cgroup/cpu(切换到cgroups控制的子系统)
-
3.mkdir testDocker(创建一个测试cgroups的子系统)
-
4.ll testDocker(显示testDocker目录下的内容)
-
6.sudo echo 20000 > testDocker/cpu.cfs_quota_us(testDocker/cpu.cfs_quota_us是控制cpu资源的变量,testDocker/cpu.cfs_period_us中的默认值是100000,这里配置20000,所以计算出的cpu百分比是20%)
-
7.echo $$ > testDocker/tasks(把当前进程加入到testDocker对应的cgroups任务列表中)
-
8.创建一个shell脚本test.sh,并在这个进程下执行
-
#!/bin/bash while true; do echo "aaa" done;
-
sh test.sh
-
-
9.重新打开一个shell,使用top命令,可以看到占用的cpu百分比不会超过20%
-
三个核心概念
-
镜像,容器,和仓库
-
镜像是容器启动的先决条件,如果我们自定义一个镜像,首先要确定基础镜像,然后再自定义内容,
-
而容器就是运行起来的镜像,此时容器有自己独立的命名空间和资源限制,是无法看到主机上的信息的
-
是仓库就是用来分发和存储镜像的
总结
- docker的本质是一个视图被隔离,资源被分配的进程,而k8s是一个自动化的容器编排平台,是google根据之前的技术积累开发出的一种技术,
k8s应用实例
-
蚂蚁金服,基本上是从第三代架构,分布式微服务之后也就开始做这种云平台了,一直到现在的serverless、service mesh这种概念
-
美团,跟蚂蚁很像,也是一开始自研,后面在k8s上做二次开发
云原生
概念
-
到2020 年,还是有很多人会对“云原生”充满了疑惑甚至误解。这想必也是为何我们一直能够在不同场合听到关于云原生的各种不同定义的原因所在。有人说,云原生就是 Kubernetes 和容器;也有人说,云原生就是“弹性可扩展”;还有人说,云原生就是 Serverless ;而后来,有人干脆做出判断:云原生本身就是“哈姆雷特”,因为每个人的理解都不一样。
-
这个是官方基金会的一个定义,我个人的解读是,云原生是devops新时代的一种新的技术形式吧
发展历史
- 2004 年— 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
- 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干;
- 2013 年,Docker 项目正式发布。
- 2014 年,Kubernetes 项目也正式发布。这样的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。
- 2015 年,由Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。在这之后,CNCF 的发展速度非常迅猛;
- 2017 年,CNCF 达到 170 个成员和 14 个基金项目;
- 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。
全景图
- https://github.com/cncf/landscape
cncf知识体系总结
- 第一部分是云应用定义与开发流程。这包括应用定义与镜像制作、配置 CI/CD、消息和 Streaming 以及数据库等。
- 第二部分是云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调度、服务发现治理、远程调用、API 网关以及 Service Mesh。
- 第三部分是监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、Tracing 以及在云上如何实现破坏性测试,也就是混沌工程的概念。
- 第四部分就是云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。
- 第五部分是云原生工具集,在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使用,比如流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。
- 最后则是 Serverless。Serverless 是一种 PaaS 的特殊形态,它定义了一种更为“极端抽象”的应用编写方式,包含了 FaaS 和 BaaS 这样的概念。而无论是 FaaS 还是 BaaS,其最为典型的特点就是按实际使用计费(Pay as you go),因此 Serverless 计费也是重要的知识和概念。
更多推荐
所有评论(0)