1.Docker容器

Docker是第一个使容器在不同机器间移植的系统,打包应用程序及其所依赖的环境,这个包可以被用来在任何其他运行Docker的机器上使用。
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository);
容器是由镜像实例化而来,把镜像看作类,把容器看作类实例化后的对象。
Docker容器使用流程:

  1. 首先开发者在开发环境机器上开发应用并制作镜像。Docker执行命令,构建镜像并存储在机器上
  2. 开发者上传镜像命令。Docker接收到命令后,将本地镜像上传到镜像仓库
  3. 开发者向生产环境机器发送运行镜像命令。Docker从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。
  4. 镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统,将每一层的改变以读写层的形式增加到原来的只读文件上。容器=镜像+可读可写,容器是图像的可运行实例。要构建自己的映像,您可以使用简单的语法创建一个Dockerfile,以定义创建映像并运行它所需的步骤。
  5. Docker打包镜像两步
    1、创建Dockerfile
    2、创建镜像docker build -t
  6. 1.创建docker镜像:
  7. FROM:定制的镜像都是基于FROM的镜像,这里的node : current_slim就是定制需要的基础镜像。后续的操作都是基于node:current_slim.
  8. RUN :用于执行后面跟着的命令行命令
  9. 使用WORKDIR指定的后续操作应该从目录中取/usr/src/app你的映像文件系统(从不主机的文件系统)
  10. COPY复制指令,从上下文目录中复制文件或者目录到容器中指定路径。package.json从您的主机到图像当中的位置()的文件(因此在此情况下为/usr/src/app/package.json
  11. CMD 类似于RUN指令,用于运行程序,但是二者的运行时间点不相同:CMD在docker run时运行。RUN是在docker build.
  12. ENTRYPOINT类似于CMD,在执行docker run的时候可以指定ENTRYPOINT运行所需要的参数。
  13. 2.创建镜像
  14. 在Dockerfile文件的存放目录下,执行构建操作。
  15. $docker build -t nginx:test.
  16. 执行docker image查看镜像

3、本地运行容器镜像docker run
命令中-p是将本地机器的8080端口映射到容器的80端口,即本地机器的8080端口的流量会映射到容器的80端口.
docker run -p 8080:80 hello

2.K8s(集群管理平台)

什么是k8s

Kubernetes是一个谷歌开源的基于Docker容器的集群管理平台,可以实现微服务快速部署应用。
Kubernetes可以根据可用计算资源每个容器的资源要求,管理计算实例集群,并调度在集群上运行的容器。在逻辑分组中运行的容器被称为Pod,您可以将一个或多个容器作为一个Pod进行运行和扩展。 Kubernetes控制层面软件确定何时何地运行Pod、管理流量路由选择,以及根据利用率或您定义的其他指标扩展Pod。

为什么要k8s(从Docker到k8s)

1) 最开始是虚拟机,在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来,但占用空间更大,几十GB,启动更慢。

2) 容器不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境。提供容器运行时所需的程序、库、资源、配置等文件,及为运行时准备的一些配置参数(例如环境变量)。占用空间小几MB即可,启动时间快。

3)** Docker**本身并不是容器,它是创建容器的工具,是应用容器引擎。Docker镜像确保了应用运行环境一致性。Docker 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,没有进行硬件虚拟;Build once,Run anywhere。

4) 随着系统可部署组件的数量增长,把它们都管理起来会变得 越来越困难。K8s允许在其上很容易地部署和管理容器化的应用。

核心功能

1、调度:K8s可以把用户提交的容器根据其所需的CPU和memory放到k8s管理的集群的某一台空闲的节点上。

2、自动修复:会把运行在这些失败节点上的容器进行自动迁移,迁移到一个正在健康运行的宿主机上。

3、水平伸缩:监测CPU负载值,增/减容器数量。

k8s架构

一个Master对应一群Node节点。

k8s集群架构

Master 节点结构如下:
APIserver 即 K8s 网关,是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。包括认证授权、数据校验以及集群状态变更等。接受外部请求,并将信息写到ETCD中。
Controller 控制器,执行集群级功能,例如复制组件,跟踪Node节点,处理节点故障等等。
Scheduler 调度器,使用调度算法,把请求资源调度到某一个 Node 节点。
etcd 存储资源对象。一个分布式数据存储组件,负责存储集群的配置信息。
Node节点是集群的计算节点,即运行容器化应用的节点。
节点结构如下:
Kubelet 在每一个 Node 节点都存在一份,负责维护容器的生命周期,在 Node 节点上的资源操作指令由 Kubelet 来执行。kubelet主要负责同Container Runtime打交道,并与API Server交互,管理节点上的容器
Kube-proxy 应用组件间的访问代理,解决节点上应用的访问问题。
Pod 是 K8s 管理的基本单元(最小单元),Pod 内部是容器,K8s 不直接管理容器,而是管理 Pod。
Docker 运行容器的基础环境,容器引擎。
Fluentd 日志收集服务。

核心概念

 

Pod(容器组,k8s最小调度对象)

Pod 是 Kubernetes 的一个最小调度单元,包含一个或多个容器,k8s直接管理Pod而不是容器。为什么在容器之上再封装一层?Docker容器之间的通信受到Docker网络机制的限制,大量容器之间的link非常繁重,通过Pod概念只需要Localhost即可相互通信。一个Pod封装一个或多个容器container,存储资源volume,独立的网路IP。

Deployment(应用部署,无状态负载)

Deployment 是在 Pod 这个抽象上更为上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。Pod的服务化封装。
Deployment集成了上线部署、滚动升级、创建副本、恢复上线的功能,在某种程度上,Deployment实现无人值守的上线,大大降低了上线过程的复杂性和操作风险。

StatefulSet(有状态负载)

管理有状态应用的对象。和Deployment相同的是,StatefulSet管理了基于相同容器定义的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个Pod维护了一个固定的ID。

DaemonSet(守护进程集)

DaemonSet 是这样一种对象(守护进程),它在集群的每个节点上运行一个 Pod,且保证只有一个 Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,

Service(服务发现)

Service 提供了一个或者多个 Pod 实例的稳定访问地址。

ConfigMap

ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对。通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置。相比环境变量,Pod中引用的ConfigMap可以做到实时更新,当您更新ConfigMap的数据后,Pod中引用的ConfigMap会同步刷新。

Secret

Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活。
Secret与ConfigMap相同,是以键值对形式保存数据,所不同的是在创建时,Secret的Value必须使用Base64编码

Helm

Helm 是 Kubernetes 的软件包管理工具。Helm和Kubernetes的关系,我们可以理解成apt-get和Ubuntu的关系,或者Python中的 pip 一样。Helm由两部分组成,客户端helm和服务端tiller。其中tiller运行在Kubernetes集群上,管理chart,而客户端helm就是一个命令行工具,可在本地运行,一般运行在持续集成/持续交付的服务器上 。
https://www.runoob.com/docker/docker-dockerfile.html
https://docs.docker.com/get-started/part2/

Event(操作事件)

1、是Kubelet负责用来记录多个容器运行过程中的事件,命名由被记录的对象和时间戳构成。

Event结构体还包含了Events相关的对象、原因、内容、消息源、首次记录时间、最近记录时间、记录统计和类型。

2、在Events的定义里,比较重要的有两个成员,一个是InvolvedObject, 另一个是Source。

首先,InvolvedObject表示的是这个Events所属的资源。它的类型是ObjectReference.然后,Source表示的是该Events的来源,它的类型是EventSource

3、原来我们在kubectl describe pod时得到的返回的结果不仅包含了Pod的信息,还有Events的信息,它们来自的是不同的处理过程。

3.AWS

1.EKS(Elastic K8s Service)

Amazon EKS 是一项托管服务,借助该服务,您可以轻松在 AWS 上运行 Kubernetes,而无需安装和操作您自己的 Kubernetes 控制平面。

2.EC2(Elastic Container Service)

亚马逊弹性容器服务(Amazon ECS)是一种高度可扩展、快速的容器管理服务,使容器在集群上运行、停止和管理都非常简单。
Amazon ECS 集群是您可以用于运行任务请求的一个或多个容器实例的区域性分组。在您首次使用 Amazon ECS 服务时,每个账户会收到默认集群。集群可能包含多个 Amazon EC2 实例类型。

3.CloudWatch Logs

我们希望集中收集各服务器日志统一查看、报警。AWS 给我们提供了这种服务,叫 CloudWatch Logs。
Amazon EKS 控制平面日志记录会直接将审计和诊断日志从 Amazon EKS 控制平面发送至您账户中的 CloudWatch Logs。

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐