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负责对外提供服务。
-