Docker Kubernetes k8s 从入门到精通

0. Docker

在这里插入图片描述

在这里插入图片描述

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。[1]

Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。[2]

Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担[3]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,

依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上执行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以执行,无论是公用云端服务器、私有云端服务器、单机等。” [4]

Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers.[6] The service has both free and premium tiers. The software that hosts the containers is called Docker Engine.[7] It was first started in 2013 and is developed by Docker, Inc.

0.1 Docker引擎

Docker引擎(Docker Engine)是一个服务端-客户端结构的应用,主要有这些部分:Docker守护进程、Docker Engine API(页面存档备份,存于互联网档案馆)、Docker客户端。[6]

Docker守护进程(Docker daemons),也叫 dockerd ,是一个持久化的进程,用户管理容器。守护进程会监听Docker Engine API(页面存档备份,存于互联网档案馆) 的请求。[7]
Docker Engine API(页面存档备份,存于互联网档案馆)是用于与Docker守护进程交互用的的API。它是一个RESTful API,因此它不仅可以被Docker客户端调用,也可以被wget 和 curl等命令调用。[8]
Docker客户端,也叫docker,是大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。命令会遵循Docker Engine API(页面存档备份,存于互联网档案馆)[9]

0.2 Docker注册中心

Docker注册中心(Docker registry)是用于存储Docker的镜像。Docker Hub 是一个公共的注册中心,任何人都可以使用,默认配置下,Docker将会在这里寻找镜像。[6]

另外,用户可以自行构建私有注册中心。Docker Datacenter (DDC)的用户,可以直接使用 Docker Trusted Registry (DTR)。

扫描二维码关注公众号,回复: 13813523 查看本文章

0.3 对象

Docker的对象是指Images、Containers、Networks、Volumes、Plugins等等。[6]

  • 容器(Containers)是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控。[6]
  • 镜像(Images)是一个只读模板,用于指示创建容器。[6] 镜像分层(layers)构建的,而定义这些层次的文件叫Dockerfile。[10]
  • 服务(Services)允许用户跨越不同的Docker守护进程(Docker daemons)的情况下增加容器,并将这些容器分为管理者(managers)和工作者(workers),让他们为swarm共同工作。[6]

1. 初始Kubernetes

Google内部容器编排系统Borg的开源版,该项目由google 2014年开始启动,Kubernetes 1.0 版本在2015年release。
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。[3]该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。

它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。[4] 它支持一系列容器工具,包括Docker等。

它将构成应用程序的容器分组为逻辑单元,以便于管理和发现。Kubernetes 建立在 Google 15 年运行生产工作负载的经验之上,并结合了来自社区的最佳创意和实践。
https://github.com/kubernetes/kubernetes

1.1 云原生计算基金会Cloud Native Computing Foundation( CNCF )

云原生计算基金会( CNCF )是一个Linux 基金会项目,成立于 2015 年,旨在帮助推进容器技术[1]并使科技行业围绕其发展进行调整。

它与开源容器集群管理器Kubernetes 1.0一起发布,它是由谷歌作为种子技术贡献给 Linux 基金会的。创始成员包括Google、CoreOS、Mesosphere、Red Hat、Twitter、华为、英特尔、思科、IBM、Docker、Univa和VMware。[2] [3]今天,CNCF 得到了 450 多名成员的支持。为了建立由 CNCF 管理的技术的合格代表,2016 年 8 月在多伦多举行的首届 CloudNativeDay 上宣布了一项计划。[4]
https://www.cncf.io/

考试验证
https://training.linuxfoundation.cn/certificates/1

在这里插入图片描述

2. 设计

Kubernetes在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计概念为松耦合和可扩展的,这样可以使之满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes API提供,此API主要被作为扩展的内部组件以及Kubernetes上运行的容器来使用。[18]

3. Pod

Kubernetes的基本调度单元称为“pod”。通过该种抽象类别可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。[18]Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用同一端口,而避免了发生冲突的问题。[19] Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。[20]。pod可以通过Kubernetes API手动管理,也可以委托给控制器来实现自动管理。

4. 构建

Kubernetes遵循主从式架构设计。Kubernetes的组件可以分为管理单个的 node 组件和控制平面部分的组件。[18][26]

Kubernetes Master是集群的主要控制单元,其用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持高可用性集群[26]的多个主节点上运行。是Kubernetes控制平面的各种组件如下:

4.1 etcd

etcd (页面存档备份,存于互联网档案馆) 是由CoreOS开发,用于可靠地存储集群的配置数据的一种持久性,轻量型的,分布式的键-值数据存储组件。该组件可表示在任何给定时间点处的集群的整体状态。其他组件在注意到存储的变化之后,会变成相应的状态。[26]

4.2 API服务器

API服务器是一个关键组件 并使用 Kubernetes API 和 JSON over HTTP来提供了Kubernetes的内部和外部接口。[18][27] API服务器处理和验证 REST请求并更新 API 对象的状态etcd (页面存档备份,存于互联网档案馆),从而允许客户端在Worker节点之间配置工作负载和容器。

4.3 调度器

T调度程序是可插拔式组件,其基于资源可用性来选择未调度的pod(由调度程序管理的基本实体)应该运行哪个节点。调度程序跟踪每个节点上的资源利用率,以确保工作负载不会超过可用资源。为此,调度程序必须知道资源需求,资源可用性以及各种其他用户提供的约束和策略指令,例如服务质量,亲和力/反关联性要求,数据位置等。实质上,调度程序的作用是将资源“供应”与工作负载“需求”相匹配以维持系统的稳定和可靠。 [28]

4.4 控制器管理

控制器管理器是核心Kubernetes控制器,其包括DaemonSet控制器和复制控制器等。该控制器可与API服务器进行通信以在需要时创建,更新和删除他们管理的资源(pod,服务端点等)[27]

4.5 Kubernetes 节点

Node也称为Worker或Minion,是部署容器(工作负载)的单机器(或虚拟机)。集群中的每个节点都必须具备容器的运行环境(runtime) ——比如 Docker,以及下面提到的其他组件,以便与这些容器的网络配置进行通信。

4.6 Kubelet

Kubelet负责每个节点的运行状态(即确保节点上的所有容器都正常运行)。它按照控制面板的指示来处理启动,停止和维护应用程序容器(按组织到pod中)。[18][29]

Kubelet会监视pod的状态,如果不处于所需状态,则pod将被重新部署到同一个节点。节点状态每隔几秒就会传递消息至中继主机。主控器检测到节点故障后,复制控制器将观察此状态更改,并在其他健康节点上启动pod。[来源请求]

4.7 容器

容器从属于pod。在运行应用、库及其依赖的微服务中,容器是最低层级的。通过绑定一个外部IP,容器可以被外网访问。

4.8 Kube代理

Kube代理是网络代理和负载均衡的实现,支持服务抽象以及其他网络操作。[18]根据传入请求的IP和端口,该组件会将流量转发到指定的合适的容器中。

4.9 cAdvisor

cAdvisor 是监视和收集例如每个节点上的容器的CPU,内存,文件和网络使用情况等的资源使用情况和性能指标的代理组件。

5. 阿里云实操

https://ecs.console.aliyun.com/

云服务器 ECS --> 创建实例
在这里插入图片描述
选择 抢占式实例(价格便宜), 可用区 选择 可用区 C,不要选择随机分配

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击管理控制台
在这里插入图片描述

在这里插入图片描述
修改名称 master01, node01, node02

在这里插入图片描述
SecureCRT SSH2 连接 公网ip,master01, node01, node02
在这里插入图片描述
保持session
在这里插入图片描述

google 搜索 opsx

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.24a01b11k30fre

Docker CE 是免费的 Docker 产品的新名称,Docker CE 包含了完整的 Docker 平台,非常适合开发人员和运维团队构建容器 APP。

下载地址:https://mirrors.aliyun.com/docker-ce/

配置方法
Ubuntu 14.04/16.04(使用 apt-get 进行安装)

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

节省停机模式(原停机不收费)

切记,如果不用的话,请停机不收费
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zgpeace/article/details/124055598