Docker Kubernetes k8s 从入门到精通

Posted AI架构师易筋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)。

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]

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

切记,如果不用的话,请停机不收费

以上是关于Docker Kubernetes k8s 从入门到精通的主要内容,如果未能解决你的问题,请参考以下文章

Docker从入门到初步掌握

从Docker到Kubernetes

如何入门k8s?

27.Docker技术入门与实战 --- Kubernetes—生产级容器集群平台

k8s入门系列之介绍篇

k8s入门系列之介绍篇