Kubernetes教程 - Kubernetes综合指南(Use Guide)

英文原作者:Sahiti Kappagantula  翻译&转载:https://www.edureka.co/blog/kubernetes-tutorial/

Kubernetes教程 - Kubernetes综合指南(Use Guide)

Kubernetes是一个平台,可以消除部署容器化应用程序所涉及的手动过程。在这篇关于Kubernetes Tutorial的博客中,您将了解与此多容器管理解决方案相关的所有概念。

本教程将介绍以下主题:

现在,在本博客向前推进之前,让我快速向您简要介绍一下集装箱化。

因此,在容器出现之前,开发人员和测试人员之间总是有一些关系。这通常是因为在开发方面工作的,在测试方面不起作用。它们都存在于不同的环境中。现在,为了避免这种情况,引入了容器,以便开发人员和测试人员都在同一页面上。

同时处理大量容器也是一个问题。有时在运行容器时,在产品方面,几乎没有提出问题,这些问题在开发阶段并不存在。这种场景引入了Container Orchestration System。 在深入研究编排系统之前,让我快速列出没有这个系统所面临的挑战。

 

正如您在上图中看到的,当多个服务在容器内运行时,您可能希望扩展这些容器。在大型工业中,这很难做到。那是因为它会增加维护服务的成本,以及并排运行它们的复杂性。

现在,为了避免手动设置服务并克服挑战,需要一些重要的东西。这就是Container Orchestration Engine的用武之地

这个引擎允许我们组织多个容器,以便启动所有底层机器,容器健康并在集群环境中分布。在今天的世界中,主要有两个这样的引擎:KubernetesDocker Swarm

 

Kubernetes教程:  Kubernetes vs Docker Swarm

Kubernetes  和  Docker Swarm  是当今市场上领先的容器编排工具。所以在使用它们之前,你应该知道它们究竟是什么以及它们是如何工作的。

此外,在博客中,我将深入探讨Kubernetes,但要了解Docker,您可以点击这里

 

正如您可以参考上面的图片,Kubernetes与Docker Swarm相比,拥有一个非常活跃的社区,并在许多组织中实现自动扩展。同样,与Kubernetes相比,Docker Swarm有一个易于启动的集群,但它仅限于Docker API的功能。

好吧,伙计们,这些不是这些顶级工具之间的唯一区别。如果您想知道这两个容器编排工具之间的详细差异,可以单击此处。

 

如果我可以在两者之间选择我的选择,那么它必须是Kubernetes,因为容器需要被管理并连接到外部世界以执行诸如调度,负载平衡和分发之类的任务。

但是,如果你从逻辑上思考,Docker Swarm会提供更好的选择,因为它运行在Docker之上吗?如果我是你,我肯定会对使用哪种工具感到困惑。但是,嘿,Kubernetes是市场上无可争议的领导者,并且还拥有更好的功能性Docker容器。

现在,您已经了解了对Kubernetes的需求,这是一个美好的时光,我告诉您什么是Kubernetes?

 

Kubernetes教程:  什么是Kubernetes?

Kubernetes是一个开源的系统,负责处理将容器调度到计算群集的工作,并管理工作负载以确保它们按用户的意图运行。作为Google的佼佼者,它提供了出色的社区,并与所有云提供商合作,成为一个 多容器管理解决方案。

 

Kubernetes教程:  Kubernetes功能

Kubernetes的功能如下:

  • 自动调度: Kubernetes提供高级调度程序,以根据资源需求和其他约束在集群节点上启动容器,同时不牺牲可用性。
  • 自我修复功能: Kubernetes允许在节点死亡时替换和重新安排容器。它还会杀死不响应用户定义的运行状况检查的容器,并且在它们准备好服务之前不会将它们通告给客户端。 
  • 自动部署和回滚: Kubernetes在监控应用程序运行状况时推出 对应用程序或其配置的更改,以确保它不会同时终止所有实例。如果出现问题,使用Kubernetes可以回滚更改。
  • 水平扩展和负载平衡: Kubernetes可以根据需求通过简单的命令,使用UI或根据CPU使用情况自动扩展和缩小应用程序。

Kubernetes教程:  Kubernetes架构

Kubernetes Architecture具有以下主要组件:

  • 主节点
  • 工/从节点

我将逐一讨论它们中的每一个。所以,首先让我们从理解主节点开始

主节点

主节点负责管理Kubernetes集群。它主要是所有管理任务的切入点。群集中可以有多个主节点来检查容错。

如上图所示,主节点具有各种组件,如API服务器,控制器管理器,调度程序和ETCD。

  • API服务器:  API服务器是用于控制集群的所有REST命令的入口点。
  • 控制器管理器:是一个守护程序,用于管理Kubernetes集群,并管理不同的非终止控制循环。
  • 调度程序: 调度程序将任务调度到从属节点。它存储每个从节点的资源使用信息。
  • ETCD:  ETCD是一个简单,分布式,一致的键值存储。它主要用于共享配置和服务发现。

工/从节点

工作节点包含管理容器之间的网络,与主节点通信以及将资源分配给预定容器的所有必要服务。

 

如上图所示,worker节点有各种组件,如Docker Container,Kubelet,Kube-proxy和Pods。

  • Docker容器: Docker在每个工作节点上运行,并运行配置的pod
  • Kubelet:  Kubelet从API服务器获取Pod的配置,并确保所描述的容器已启动并正在运行。
  • Kube-proxy: Kube-proxy充当单个工作节点上的服务的网络代理和负载平衡器
  • 窗格:  窗格是一个或多个逻辑上在节点上一起运行的容器。 

如果您想要详细解释Kubernetes Architecture的所有组件,那么您可以参考我们的 关于Kubernetes Architecture的博客

 

Yahoo JAPAN  是一家总部位于加利福尼亚州桑尼维尔的网络服务提供商。由于该公司旨在虚拟化硬件,公司 于2012年开始使用  OpenStack 。他们的内部环境变化非常快。然而,由于云和容器技术的进步,该公司希望能力在各种平台上推出服务。

问题:如何从一个应用程序代码为所有必需的平台创建映像,并将这些映像部署到每个平台上?

为了便于您更好地理解,请参阅下图。在代码注册表中更改代码后,裸金属映像,Docker容器和VM映像由持续集成工具创建,推送到映像注册表,然后部署到每个基础架构平台。 

 

 

现在,让我们关注容器工作流,以了解他们如何使用Kubernetes作为部署平台。请参阅下图,了解平台架构。

使用OpenStack实例,其上有Docker,Kubernetes,Calico等,以执行各种操作,如Container Networking,Container Registry等。

如果您有多个集群,那么管理它们会变得很难吗?

因此,他们只想创建一个简单的基础OpenStack集群,以提供Kubernetes所需的基本功能,并使OpenStack环境更易于管理。

通过图像创建工作流程和Kubernetes的组合,他们构建了以下工具链,使得从代码推送到部署变得简单。

 

这种工具链确保考虑了生产部署的所有因素,如多租户,身份验证,存储,网络,服务发现。

这就是人们,雅虎! 在GoogleSolinea的帮助下,JAPAN为运行在OpenStack上的Kubernetes构建了一个自动化工具链,用于“一键式”代码部署。

Kubernetes教程:动手实践

在本动手中,我将向您展示如何创建部署和服务。我正在使用Amazon EC2实例,使用Kubernetes。好吧,亚马逊为Kubernetes(Amazon EKS)提供了Amazon Elastic Container Service,这使他们能够非常快速,轻松地在云中创建Kubernetes集群。如果您想了解更多相关信息,可以参考此处的博客 

步骤1:首先创建一个文件夹,您将在其中创建部署和服务。之后,使用编辑器打开部署文件

1

2

3

mkdir handsOn

cd handsOn

vi Deploy.yaml

步骤2:打开部署文件后,请提及要部署的应用程序的所有规范。在这里,我试图部署一个httpd应用程序。 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

apiVersion: apps/v1  #Defines the API Version

kind: Deployment     #Kinds parameter defines which kind of file is it, over here it is Deployment

metadata:

  name: dep1        #Stores the name of the deployment

spec:               # Under Specifications, you mention all the specifications for the deployment

  replicas: 3       # Number of replicas would be 3

  selector:

   matchLabels:

     app: httpd     #Label name which would be searched is httpd

  template:

    metadata:

    labels:

      app: httpd   #Template name would be httpd

  spec:            # Under Specifications, you mention all the specifications for the containers

   containers:

   - name: httpd   #Name of the containers would be httpd

     image: httpd:latest  #The image which has to be downloaded is httpd:latest

     ports:

     - containerPort: 80 #The application would be exposed on port 80

步骤3:编写部署文件后,使用以下命令应用部署。

1

kubectl apply -f Deploy.yaml

  • $ kubectl apply -f Deploy.yaml
  • deployment.apps/dep1  configured

演示快照 -  Kubernetes教程 -  Edureka

这里-f是用于标记名称牛逼他的文件名。

第4步:现在,应用部署后,获取正在运行的pod列表。

1

kubectl get pods -o wide

  • $ kubectl get pods -o wide
  • NAMR                          READY          STATUS           RESTARTS          AGR         IP                          NODE             NOMTNATED MODE
  • dep1-2939-6hzdb          1/1                 running             0                          39m          10.244.1.23           knode                <none>

演示快照 -  Kubernetes教程 -  Edureka

这里,-o wide用于了解部署运行的节点。

步骤5:创建部署后,现在必须创建服务。为此,再次使用编辑器并打开一个空白服务。yaml文件

1

vi service.yaml

演示快照 -  Kubernetes教程 -  Edureka

步骤6:打开服务文件后,请提及该服务的所有规范。 

1

2

3

4

5

6

7

8

9

10

11

12

apiVersion: v1  #Defines the API Version

kind: Service   #Kinds parameter defines which kind of file is it, over here it is Service

metadata:

  name: netsvc   #Stores the name of the service

spec:            # Under Specifications, you mention all the specifications for the service

  type: NodePort

  selector:

    app: httpd

ports:

-protocol: TCP

 port: 80

 targetPort: 8084    #Target Port number is 8084

步骤7:  编写服务文件后,使用以下命令应用服务文件。

1

kubectl apply -f service.yaml

  • $ kubectl apply -f service.yaml
  • service/netsvc created

步骤8:现在,一旦您的服务应用于检查服务是否正在运行,请使用以下命令。

1

kubectl get svc

  • $ kubectl get svc
  • NAME               TYPE        CLUSTER-IP        EXTERNAL-IP      PORT(s)          AGE
  • kubernetes        ClusterIP    10.96.0.1                <none>                443/tcp            96m
  • netave               NodePort    10.97.46.48            <none>               80:32657/tcp    16m

演示快照 -  Kubernetes教程 -  Edureka

步骤9:现在,要查看服务规范,并检查绑定到哪个端点,请使用以下命令。

1

kubectl describe svc <name of the service>

步骤10:既然我们正在使用amazon ec2实例,要获取网页并检查输出,请使用以下命令。

1

curl ip-address

$ curl 10.97.46.48:8084
<html><body><h1>It works!</h1></body></html>

 

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/84893772