一文了解docker与k8s
Docker Compose 是什么通过使用一个YAML 文件来配置应用服务,给予Docker Compose 我们就可以通过一个单独的命令来创建和启动所有服务。可以大大的简化配置环境的复杂度。Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务可以基于容器对应用运行环境的资源配置要求自动部署应用容器当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度...
1.为什么要docker
为什么?
-
通过提供可复用的容器实现应用程序快速部署
Docker存在以下优势:
-
轻量级:Docker容器本身只有几百兆的大小,而且不需要安装宿主操作系统,能够极大地缩小应用程序启动时间;
-
灵活性:Docker支持跨平台的部署,可以更灵活的部署应用程序和微服务;
-
可移植性:Docker容器可以在开发环境和生产环境之间更加容易的移植。
2.和虚拟机的区别
docker也具有镜像,那么和虚拟机区别是什么
-
虚拟机包含操作系统的完整副本,包括内核及所有驱动和应用 ;容器在操作系统层面进行虚拟化,共享宿主机的操作系统内核
- 虚拟机通常启动时间较长;容器启动几乎是即时的
-
虚拟机提供了高度的隔离性;容器之间的隔离性较低
3.Dockerfile 是什么?
-
Dockerfile 是什么
-
Dockerfile 是一个文本文件,用于自动化地构建 Docker 镜像。
-
Dockerfile 定义了从基础镜像开始,按步骤配置环境和部署应用所需要的所有命令。
-
4.什么是 Docker Compose?
-
Docker Compose 是什么
-
通过使用一个 YAML 文件来配置应用服务,给予Docker Compose 我们就可以通过一个单独的命令来创建和启动所有服务。可以大大的简化配置环境的复杂度。
-
5.什么是k8s
-
Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务
-
可以基于容器对应用运行环境的资源配置要求自动部署应用容器
-
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度
- ...
-
6.k8s架构
-
架构
-
Master Node
-
k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求
-
Master Node 由如下组成
-
kube-apiserver:相当于 k8s 的网关,所有的指令请求都必须经过 api server
-
如果需要与您的 Kubernetes 集群进行交互,就要通过 API。Kubernetes API 是 Kubernetes 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
-
-
kube-scheduler:调度器,使用调度算法,把请求资源调度到某个work node 节点
-
您的集群是否状况良好?如果需要新的容器,要将它们放在哪里?这些是 Kubernetes 调度程序所要关注的问题。调度程序会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。
-
-
kube-controller-manager:控制器,维护 k8s 资源对象(CRUD:添加、删除、更新、修改)
-
控制器负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。控制器会将服务连接至容器集,以便让请求前往正确的端点。还有一些控制器用于创建帐户和 API 访问令牌。
-
-
ETCD 数据库:存储资源对象(可以服务注册、发现等等)
-
配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。
-
-
-
-
Worker Node
-
集群工作节点,运行用户业务应用容器
-
Worker Node 由如下组成
-
kubelet: kuberlet 来执行资源操作
-
每个计算节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。kublet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。
-
-
kube proxy:代理服务,负载均衡
-
每个计算节点中还包含 kube-proxy,这是一个用于优化 Kubernetes 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信——靠操作系统的数据包过滤层,或者自行转发流量
-
-
ContainerRuntime
-
实际运行容器的底层软件,如 Docker、containerd 等
-
-
-
注意:
-
pod:k8s 管理的基本单元(最小单元),pod 内部是容器
-
k8s 不直接管理容器,而是管理 pod
-
-
-
-
工作流程
-
向apiserver发出请求后,apiserver把请求存储到etcd,并通知Controller-manager;Controller-manager会通过apiserver读取etcd并创建pod,并将数据写入etcd;Controller-manager会通过API server找Scheduler为pod挑选合适的worknode运行。然后apiserver通知kubelet去创建pod,kube-proxy负责对外提供服务。
-
更多推荐
所有评论(0)