您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

揭开 Kubernetes 的神秘面纱

时间:2019-12-24 10:38:05  来源:  作者:
揭开 Kubernetes 的神秘面纱

 

Kubernetes 是一款生产级的开源系统,用于容器化应用程序的自动部署、扩展和管理。本文关于使用 Kubernetes 来管理容器。-- Abhinav Nath Gupta(作者)

“容器”已成为最新的流行语之一。但是,这个词到底意味着什么呢?说起“容器”,人们通常会把它和 Docker 联系起来,Docker 是一个被定义为软件的标准化单元容器。该容器将软件和运行软件所需的环境封装到一个易于交付的单元中。

容器是一个软件的标准单元,用它来打包代码及其所有依赖项,这样应用程序就可以从一个计算环境到另一个计算环境快速可靠地运行。容器通过创建类似于 ISO 镜像的方式来实现此目的。容器镜像是一个轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的所有信息,包括代码、运行时、系统工具、系统库和设置。

容器镜像在运行时变成容器,对于 Docker 容器,镜像在 Docker 引擎上运行时变成容器。容器将软件与环境隔离开来,确保不同环境下的实例,都可以正常运行。

什么是容器管理?

容器管理是组织、添加或替换大量软件容器的过程。容器管理使用软件来自动化创建、部署和扩展容器。这一过程就需要容器编排,容器编排是一个自动对基于容器的应用程序进行部署、管理、扩展、联网和提供可用性的工具。

Kubernetes

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,它有助于配置和自动化。它最初由 google 开发,拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、技术支持和工具得到广泛应用。

Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 十五年大规模运行生产工作负载的经验基础上,并结合了社区中最好的想法和实践以及声明式句法的使用。

下面列出了与Kubernetes生态系统相关的一些常用术语。

Pod:Pod 是 Kubernetes 应用程序的基本执行单元,是你创建或部署的 Kubernetes 对象模型中的最小和最简单的单元。Pod 代表在 Kubernetes 集群上运行的进程。

Pod 将运行中的容器、存储、网络 IP(唯一)和控制容器应如何运行的命令封装起来。它代表 Kubernetes 生态系统内的单个部署单元,代表一个应用程序的单个实例,该程序可能包含一个或多个紧密耦合并共享资源的容器。

Kubernetes 集群中的 Pod 有两种主要的使用方式。第一种是运行单个容器。即“一个容器一个 Pod”,这种方式是最常见的。第二种是运行多个需要一起工作的容器。

Pod 可能封装一个由紧密关联且需要共享资源的多个同位容器组成的应用程序。

副本集(ReplicaSet):副本集的目的是维护在任何给定时间运行的一组稳定的副本容器集。 副本集包含有关一个特定 Pod 应该运行多少个副本的信息。为了创建多个 Pod 以匹配副本集条件,Kubernetes 使用 Pod 模板。副本集与其 Pod 的链接是通过后者的 metas.ownerReferences 字段实现,该字段指定哪个资源拥有当前对象。

服务(Services):服务是一种抽象,用来公开一组 Pod 功能。使用 Kubernetes,你无需修改应用程序即可使用陌生服务发现机制。Kubernetes 给 Pod 提供了其自己的 IP 地址和一组 Pod 的单个 DNS 名称,并且可以在它们之间负载平衡。

服务解决的一个主要问题是 Web 应用程序前端和后端的集成。由于 Kubernetes 将幕后的 IP 地址提供给 Pod,因此当 Pod 被杀死并复活时,IP 地址会更改。这给给定的后端 IP 地址连接到相应的前端 IP 地址带来一个大问题。服务通过在 Pod 上提供抽象来解决此问题,类似于负载均衡器。

卷(Volumes): Kubernetes 卷具有明确的生命周期,与围绕它的 Pod 相同。 因此,卷超过了 Pod 中运行的任何容器的寿命,并且在容器重新启动后保留了数据。当然,当 Pod 不存在时,该卷也将不再存在。也许比这更重要的是 Kubernetes 支持多种类型的卷,并且 Pod 可以同时使用任意数量的卷。

卷的核心只是一个目录,其中可能包含一些数据,Pod 中的容器可以访问该目录。该目录是如何产生的,它后端基于什么存储介质,其中的数据内容是什么,这些都由使用的特定卷类型来决定的。

为什么选择 Kubernetes?

容器是捆绑和运行应用程序的好方法。在生产环境中,你需要管理运行应用程序的容器,并确保没有停机时间。例如,如果一个容器发生故障,则需要启动另一个容器。如果由系统自动实现这一操作,岂不是更好? Kubernetes 就是来解决这个问题的!Kubernetes 提供了一个框架来弹性运行分布式系统。该框架负责扩展需求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的金丝雀部署。

Kubernetes 为用户提供了:

  1. 服务发现和负载平衡
  2. 存储编排
  3. 自动退出和回退
  4. 自动打包
  5. 自我修复
  6. 秘密配置管理

Kubernetes 可以做什么?

在本文中,我们将会看到一些从头构建 Web 应用程序时如何使用 Kubernetes 的代码示例。我们将在 Python 中使用 Flask 创建一个简单的后端服务器。

对于那些想从头开始构建 Web 应用程序的人,有一些前提条件,即:

  1. 对 Docker、Docker 容器和 Docker 镜像的基本了解。可以访问 这里 快速了解。
  2. 系统中应该安装 Docker。
  3. 系统中应该安装 Kubernetes,有关如何在本地计算机上安装的说明,请访问 这里 。

现在,创建一个目录,如下代码片段所示:

mkdir flask-kubernetes/App && cd flask-kubernetes/app

接下来,在 flask-kubernetes/app 目录中,创建一个名为 main.py 的文件,如下面的代码片段所示:

touch main.py

在新创建的 main.py 文件中,粘贴下面代码:

from flask import Flask

app = Flask(__name__)

 

@app.route("/")

def hello():

 return "Hello from Kubernetes!"

 

if __name__ == "__main__":

 app.run(host='0.0.0.0')

使用下面命令在本地安装 Flask:

pip install Flask==0.10.1

Flask 安装后,执行下面的命令:

python app.py

应该在本地 5000 端口运行 Flask 服务器,这是 Flask 应用程序的默认端口,并且你可以在 http://localhost:5000 上看到输出 “Hello from Kubernetes!”。服务器在本地运行之后,我们创建一个供 Kubernetes 使用的 Docker 镜像。创建一个名为 Dockerfile 的文件,并将以下代码片段粘贴到其中:

FROM python:3.7

 

RUN mkdir /app

WORKDIR /app

ADD . /app/

RUN pip install -r requirements.txt

 

EXPOSE 5000

CMD ["python", "/app/main.py"]

Dockerfile 文件的说明如下:

  1. Docker 将从 DockerHub 获取 Python 3.7 镜像。
  2. 将在镜像中创建一个应用程序目录。
  3. 它将一个 /app 目录设置为工作目录。
  4. 将内容从主机中的应用程序目录复制到镜像应用程序目录。
  5. 发布端口 5000。
  6. 最后,它运行命令,启动 Flask 服务器。

接下来,我们将使用以下命令创建 Docker 镜像:

docker build -f Dockerfile -t flask-kubernetes:latest .

创建 Docker 镜像后,我们可以使用以下命令在本地运行该镜像进行测试:

docker run -p 5001:5000 flask-kubernetes

通过运行容器在本地完成测试之后,我们需要在 Kubernetes 中部署它。我们将首先使用 kubectl 命令验证 Kubernetes 是否正在运行。如果没有报错,则说明它正在工作。如果有报错,请参考 该信息 。

接下来,我们创建一个部署文件。这是一个 Yaml 文件,其中包含有关 Kubernetes 的说明,该说明涉及如何以声明性的方式创建 Pod 和服务。因为我们有 Flask Web 应用程序,我们将创建一个 deployment.yaml 文件,并在其中包含 Pod 和服务声明。

创建一个名为 deployment.yaml 的文件并向其中添加以下内容,然后保存:

apiVersion: v1

kind: Service

metadata:

 name: flask-kubernetes -service

spec:

 selector:

 app: flask-kubernetes

 ports:

 - protocol: "TCP"

 port: 6000

 targetPort: 5000

 type: LoadBalancer



---

apiVersion: apps/v1

kind: Deployment

metadata:

 name: flask-kubernetes

spec:

 replicas: 4

 template:

 metadata:

 labels:

 app: flask-kubernetes

 spec:

 containers:

 - name: flask-kubernetes

 image: flask-kubernetes:latest

 imagePullPolicy: Never

 ports:

 - containerPort: 5000

使用以下命令将 yaml 文件发送到 Kubernetes:

kubectl apply -f deployment.yaml

如果执行以下命令,你会看到 Pod 正在运行:

kubectl get pods

现在,导航至 http://localhost:6000,你应该会看到 “Hello from Kubernetes!”消息。成功了! 该应用程序现在正在 Kubernetes 中运行!

Kubernetes 做不了什么?

Kubernetes 不是一个传统的,包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 运行在容器级别而非硬件级别,因此它提供了 PaaS 产品共有的一些普遍适用功能,如部署、扩展、负载平衡、日志记录和监控。Kubernetes 为开发人员平台提供了构建块,但在重要的地方保留了用户的选择和灵活性。

  • Kubernetes 不限制所支持的应用程序的类型。如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上更好地运行。
  • 它不部署和构建源代码。
  • 它不决定日志记录、监视或警报解决方案。
  • 它不提供或不要求配置语言/系统。它提供了一个声明式的 API 供所有人使用。
  • 它不提供或不采用任何全面的机器配置、维护、管理或自我修复系统。

via: https://opensourceforu.com/2019/11/demystifying-kubernetes/

作者: Abhinav Nath Gupta 选题: lujun9972 译者: Morisun029 校对: wxy

本文由 LCTT 原创编译, linux中国 荣誉推出



Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  Tags: Kubernetes  点击:(21)  评论:(0)  加入收藏
当我们通过kubectl来查看、修改Kubernetes资源时,有没有想过后面的接口到底是怎样的?有没有办法探查这些交互数据呢?Kuberenetes客户端和服务端交互的接口,是基于http协议的。所...【详细内容】
2021-11-23  Tags: Kubernetes  点击:(29)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: Kubernetes  点击:(61)  评论:(0)  加入收藏
背景: 前端Pod 需要 访问 后端Pod ,可以采用service 的DNS 解析 ,为Kubernetes集群里的容器提供DNS服务,用于解析service名称一、部署CoreDNS Pod CoreDNS 是用于service做dns...【详细内容】
2020-11-03  Tags: Kubernetes  点击:(70)  评论:(0)  加入收藏
Antrea 0.9.0 发布了。Antrea 是一个 Kubernetes 网络解决方案,旨在实现 Kubernetes 原生。它使用 Open vSwitch 作为网络数据平面,在 Layer3/4 上运行,从而为 Kubernetes 集群...【详细内容】
2020-08-18  Tags: Kubernetes  点击:(142)  评论:(0)  加入收藏
Kubernetes 号称云原生操作系统,可想而知其复杂程度也是非常大的,由许多组件组成,我们很难去追踪到所有的组件信息。 上图中至少列出了七八个组件,我们这里会忽略其中大部分组件...【详细内容】
2020-07-07  Tags: Kubernetes  点击:(85)  评论:(0)  加入收藏
当我们使用 Kubernetes 部署应用后,会发现如果用户增长速度超过预期,以至于计算资源不够时,你会怎么做呢?Kubernetes 给出的解决方案就是:自动伸缩(auto-scaling),通过自动伸缩组件...【详细内容】
2020-06-21  Tags: Kubernetes  点击:(81)  评论:(0)  加入收藏
容器网络发端于 Docker 的网络。Docker 使用了一个比较简单的网络模型,即内部的网桥加内部的保留 IP。这种设计的好处在于容器的网络和外部世界是解耦的,无需占用宿主机的 IP...【详细内容】
2020-06-05  Tags: Kubernetes  点击:(45)  评论:(0)  加入收藏
Kubernetes 是一款生产级的开源系统,用于容器化应用程序的自动部署、扩展和管理。本文关于使用 Kubernetes 来管理容器。-- Abhinav Nath Gupta(作者)“容器”已成为最新的流...【详细内容】
2019-12-24  Tags: Kubernetes  点击:(83)  评论:(0)  加入收藏
什么是 KindKind(Kubernetes in Docker) 是一个Kubernetes孵化项目,Kind是一套开箱即用的Kubernetes环境搭建方案。顾名思义,就是将Kubernetes所需要的所有组件,全部部署在一个D...【详细内容】
2019-09-20  Tags: Kubernetes  点击:(135)  评论:(0)  加入收藏
▌简易百科推荐
一、前因闲来没事,想着升级下树莓派中的应用,没曾想,全是最新的,害我以为被黑客眷顾,帮我升级了。多方查证,才知道,是上次搭建的photoprism搞的鬼,不过也不全是它的锅,只是它的yml文...【详细内容】
2021-12-28  闲余悟道    Tags:Docker   点击:(2)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(12)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(11)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(48)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(34)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(62)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(168)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条