一、Docker简介

于2021年9月25日重新编辑

一、简介

  • Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现。
  • Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,程序之间相互隔离;
  • Docker使用Go语言开发。

二、版本

  • docker-ce 社区版(免费,包含大部分的核心功能)
  • docker-ee 企业版(要给钱)

参考资料:容器的版本

三、名词解释

3.1、Docker镜像

类似于系统镜像,是一个只读的模板。

就像练字的字帖一样,上面有字的那一页是不能涂写的,能写的只是上面一层薄纸。
镜像是创建容器的基础。

3.2、Docker容器

类似于一个轻量级的沙箱,可以运行和隔离应用。

3.3、Docker仓库

存放镜像文件的场所。
分为公开仓库和私有仓库。

3.4、NameSpace

命名空间的作用是进行资源隔离。

Linux内核提供了六种Namespace:UTS、IPC、PID、Network、Mount、User。

UTS隔离主机名和域名

IPC隔离进程间的通信

PID隔离进程的ID

Network隔离网络资源

Mount隔离文件系统挂载点

User隔离用户和用户组的ID

参考资料:
命名空间
命名空间详解
Linux中的Namespace

3.5、Cgroup

控制组的作用是进行资源限制。

参考资料:cgroups的作用

cgroup跟namespace的区别

3.6、运行原理

docker启动后会有一个守护进程,即服务端,用于接收客户端指令。
docker一个容器是以一个进程存在的,复用宿主机的内核。

查看docker进程
ps -ef |grep docker                                                               

容器跟镜像仓库,守护进程daemon,客户端client之间的关系

这里以运行centos容器为例

  1. 客户端告知守护进程daemon要运行centos容器。
  2. 守护进程daemon查找本地镜像库,如果有centos镜像则加载运行,如果没有则向镜像仓库发送请求下载镜像。

四、其他资料

五、K8S简介

组件介绍

master节点组件

1、kube-APIserver:

k8s的中心,各个组件通过它进行信息交互,提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;只有API Server才直接和etcd进行交互

2、Controller-Manager

集群的状态管理器,负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

常用控制器有
Deployment:版本升级回退,副本扩容裁剪
DaemonSet:守护进程
Job: 一次性任务
cronjob:类似于计划任务

3、Scheduler

k8s 集群的调度器,负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上

4、Etcd

键值数据库,用于保存了整个集群的状态。

比如说用户提交了新任务、增加了新的Node、Node宕机了、容器死掉了等等,都会触发状态数据的变更。

Node节点组件

1、kubelet

kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;

2、kube-proxy

kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

3、Pod

Pod是Kubernetes最基本的操作单元。它内部封装了一个或多个紧密相关的容器

运行流程

用户要创建一个 Pod,先把请求发送给 kube-APIserver ,kube-APIserver 收到后会把请求写到 Etcd,之后 kube-APIserver 告诉给Scheduler,来启动pod,Scheduler就来选节点 ,选好节点后节点信息发送给 kube-APIserver,kube-APIserver 写到 Etcd ,再告诉 Kubelet,节点信息去运行 Pod, Kubelet 调用 docker 运行,docker 启动完成后,告诉 Kubelet,然后 Kubelet告诉 kube-APIserver 节点启动好了 ,kube-APIserver 再次会把信息写到 Etcd 里,代表Pod 启动完成。

Pod (里面运行的是容器)

Service跟Ingress

Service

使集群内部能访问pod,或者集群外访问pod

用于pod的服务发现与负载均衡(TCP/UDP 4层)

缺点:只支持4层协议通信,不支持7层协议,因此nodeport不能代理https(客户端的角度);nodeport需要暴露service所属每个node节点上端口,当需求越来越多,端口数量越多,导致维护成本过高,并且集群不好管理。

ingress-controller

他是一个统称,我用的到时ingress-nginx,类似于Nginx,暴露集群内部服务,跟Service功能差不多。

支持七层负载均衡,使用域名进行负载均衡,

介绍1:https://blog.csdn.net/qq_46470349/article/details/120911791

介绍2:https://blog.csdn.net/zhangsaho/article/details/111476534

面试问题:https://www.cnblogs.com/threecha/p/13709482.html

六、参考资料

docker简介
虚拟机与容器的区别

posted @ 2020-01-21 14:27  努力吧阿团  阅读(232)  评论(0编辑  收藏  举报