ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Kubernetes 基础知识:您的第一个应用程序

2023-07-06 12:22:52  阅读:122  来源: 互联网

标签:Kubernetes集群 ConfigMap Pod


什么是 Kubernetes?
Kubernetes 就像管理容器的超级英雄。但什么是容器呢?将它们视为小型门户包,其中包含应用程序顺利运行代码所需的所有内容。

现在,想象一下您有一堆容器需要一起运行才能使您的应用程序正常工作。例如(前端、后端、数据库等)。Kubernetes 来拯救你了!

它可以帮助您管理和控制这些容器,确保它们在正确的位置、正确的时间以及正确的机器上运行。

Kubernetes 就像一个大脑,在多台称为“节点”的计算机上协调和分发这些容器。

借助 Kubernetes,您可以轻松部署、更新和回滚您的应用程序,而无需任何停机。它还可以处理负载平衡,以便流量在容器之间均匀分布,从而保持应用程序的响应能力和可靠性。

Kubernetes 是一种流行的容器编排工具。

让我们使用 kubernetes 部署我们的第一个应用程序。

注意:请按照以下步骤进行部署

第 1 步:先决条件:
在主节点和工作节点上安装 Kubernetes:

Scripts/k8sss.sh 位于 main · RishikeshOps/Scripts
通过在 GitHub 上创建帐户来为 RishikeshOps/Scripts 开发做出贡献。
github.com

第 2 步:克隆存储库

git 克隆 https://github.com/tejashreeSalvi/django-todo-cicd.git
让我们看看这个存储库中的 docker 文件:

从 python:3

WORKDIR /data

RUN pip install django==3.2

COPY 。。

RUN python manage.py migrate

EXPOSE 8000

CMD ["python","manage.py","runserver","0.0.0.0:8000"]
这是一个在端口号上运行的 Django 应用程序8000,该应用程序的入口点是manage.py


什么是容器?
容器是一个运行时环境,您的应用程序代码及其依赖项将在其中打包和执行。

容器是从镜像创建的。

第 3 步:从 Dockerfile 构建镜像
码头工人构建。-t trajendra/django-todo:最新
转到存储库cd django-todo并运行上述命令来创建镜像。

运行docker images命令以获取图像列表。

镜像创建成功。

第 4 步:将 docker 镜像推送到注册表
登录 docker hub
码头登录
运行该命令后,它将提示输入用户名和密码。输入详细信息,您已成功登录。


将镜像推送到注册表
docker Push trajendra/django-todo:最新

验证我们是否已成功将 docker 映像推送到注册表。

哇 !您已成功创建映像并推送到注册表。我们将从此图像创建容器。

创建和管理资源主要有两种方法:
命令行界面
YAML 清单
命令行界面:
简称 Kubernetes CLIkubectl是一个允许您与 Kubernetes 集群交互的工具。它提供了一组命令来创建、修改和管理 Kubernetes 资源

例如:

kubectl create创建资源,kubectl edit或kubectl patch修改资源并kubectl delete删除任何资源,kubectl get pods以获取默认命名空间中的所有 Pod。还有很多命令。

YAML 清单:
YAML 清单是用 YAML 编写的配置文件。这些文件定义了 Pod、Deployments、ConfigMap、Secret 等的所需状态。

我们将使用 YAML 清单来部署我们的应用程序。

Pod 是什么?
我们的应用程序的代码在容器内运行,这些容器封装在 Kubernetes 的 Pod 内。

一个Pod可以包含一个或多个容器,所有容器共享相同的CPU、内存、存储等资源
Pod在集群中拥有自己唯一的 IP 地址,使其他 Pod 或服务能够与它们进行通信。
Kubernetes 中的 Pod 被认为是短暂的,这意味着它们可以根据系统的所需状态动态创建、扩展或终止。
建议将 1 Pod = 1 容器作为最佳实践。

任务 1:创建您的第一个 Pod。
我们将使用 YAML 清单创建一个 pod。

pod.yml

apiVersion:v1
种类:Pod
元数据:
  名称:django-app
规范:
  容器:
  - 名称:django-app
    图像:trajendra/django-todo:最新
    端口:
    -containerPort:8000
在pod.yml文件中,

apiVersion: v1指定正在使用的 Kubernetes API 版本。
kind: Pod表示您正在创建一个 Pod 对象。
metadata包含有关 Pod 的元数据,包括其名称。
spec定义 Pod 的所需状态。
containers是在 Pod 内运行的容器对象的数组。在这种情况下,只有一个容器。
name: crud-backend-app将容器的名称设置为“crud-backend-app”。
image: trajendra/crudbackend:latest指定要用于容器的 Docker 映像。在本例中,它使用带有“latest”标签的图像“trajendra/django-todo”。
ports定义容器公开的网络端口。在此示例中,它公开端口 8000。
kubectl apply -f pod.yml
运行此命令,Kubernetes 将读取我们的 YAML 文件,并相应地更新集群中的所有资源。要查看新创建的 Pod 的运行情况,您可以运行kubectl get pods。您应该看到 Pod 正在运行。

Worker 节点是 Kubernetes 集群中调度 Pod 和运行容器的机器

连接Worker Node验证容器是否创建成功。
码头工人

让我们进入容器内部并执行curl命令
docker exec -it 3551dae bash

嘿 !我们已经成功地能够使用 YAML 清单通过 pod 创建容器

命名空间
命名空间是在集群内创建的逻辑组。它们允许多个团队或应用程序在同一个集群中共存。

每个命名空间都有自己的一组资源,包括 Pod、服务、部署、ConfigMap 等。

默认情况下,Kubernetes 提供一个default命名空间,如果没有指定特定的命名空间,则在该命名空间中创建资源
您可以定义 RBAC(基于角色的访问控制)策略,以基于命名空间授予对资源的不同级别的访问权限。
第 5 步:创建命名空间
kubectl 创建命名空间 my-django-app
我们将为my-django-app应用程序创建命名空间,以包含此命名空间中的所有 Pod、服务、部署和容器。


任务 2:在命名空间内创建 Pod
pod.yml

apiVersion:v1
种类:Pod
元数据:
  名称:django-app
  命名空间:my-django-app
规格:
  容器:
  -名称:django-app
    图像:trajendra/django-todo:最新
    端口:
    -containerPort:8000
要创建 pod,请运行以下命令:
kubectl apply -f pod.yml
验证命名空间内创建的 Pod
kubectl 获取 pods -n=my-django-app

删除 Pod
kubectl删除-f pod.yml
这里,pod将从namespace中删除my-django-app。

因为我们已经在元数据中添加了命名空间。


我们刚刚学会了在命名空间内创建一个 Pod。

部署
我们的应用程序在 kubernetes 集群内运行。应用程序由多个 pod 组成,每个 pod 代表应用程序的一个组件。您可以使用部署,而不是为应用程序手动创建和管理单独的 Pod。

它确保每个组件所需数量的副本始终可用,并处理任何必要的更新或扩展。
Kubernetes 监控Deployment 管理的Pod 的运行状况。如果 Pod 发生故障或变得无响应,Kubernetes 会自动替换它以维持所需的副本数量。
第 6 步:创建部署
部署.yml

apiVersion:apps / v1
种类:部署
元数据:
  名称:my-django-app-deployment
  标签:
    app:django-app
  命名空间:my-django-app
规范:
  副本:3
  选择器:
    matchLabels:
      app:django-app
  模板:
    元数据:
      标签:
        应用程序:django-app
    规范:
      容器:
      -名称:django-app-container
        图像:trajendra/django-todo:最新
        端口:
        -containerPort:8000
在清单中,我们声明了

kind:定义资源的类型,在本例中是 Deployment。

selector:指定用于选择哪些 Pod 属于此 Deployment 的标签。

matchLabels:定义 Pod 必须被视为 Deployment 一部分的标签。在这种情况下,带有标签的 Podapp: django-app将被包含在内。
replicas:定义需要维护的副本(Pod)数量,在本示例中设置为 3。
template:定义用于创建 Deployment 管理的 Pod 的 Pod 模板。
spec:指定从模板创建的 Pod 的规格。

kubectl apply -f deployment.yml # 运行部署

kubectl get pods -n=my-django-app # 获取命名空间中的 pod 列表
然后,您可以使用该kubectl apply命令在 Kubernetes 集群中创建或更新 Deployment。

获取在命名空间内创建的 Pod kubectl get pods -n=my-django-app。


规模
它用于扩展部署中的副本(Pod)数量

任务 3:使用 Kubernetes CLI 命令创建 10 个副本
kubectl 规模部署 my-django-app-deployment --replicas=10 -n=my-django-app
--replicas=10:将所需的副本(Pod)数量设置为 10。这意味着 Kubernetes 将调整 Deployment 中的 Pod 数量以匹配该值。

它在 Cluster 中创建了 10 个 pod

服务
您的部署包含多个运行 Web 应用程序的 Pod。每个 Pod 都有自己的 IP 地址,该地址可以动态更改。如果将这些 pod 直接公开给客户端,客户端将需要跟踪每个 pod 的 IP 地址并处理潜在的更改。随着 Pod 数量的增加或减少,这种方法变得不切实际。为了解决这个问题,你可以创建一个服务。

它提供了一种将 Pod 中运行的应用程序公开给集群内的其他服务或外部用户的方法。
第 7 步:向外部用户公开您的应用程序
服务.yml

apiVersion: v1
kind: Servicemetadata
:
  name: my-django-app-service
  namespace: my-django-app
spec:
  type: NodePort
  Selector:
    app: django-app
  ports:
      # 默认情况下,为了方便起见, `targetPort` 是设置为与“port”字段相同的值。
    - port: 80
      targetPort: 8000
      # 可选字段
      # 默认情况下,为了方便起见,Kubernetes 控制平面将从一个范围(默认:30000-32767)中分配一个端口
      nodePort: 30009
NodePort:在每个集群节点的 IP 上的端口上公开服务。允许外部访问服务。我们使用允许的 NodePort (30007–32767) IP 范围。

port:指定服务本身的端口号。在本例中,它被设置为80。
targetPort:指定服务应将流量转发到的 Pod 上的端口号。在本例中,它被设置为8000
nodePort: 30009:设置为30009,表示到达的流量nodeIP:30009将定向到服务。
kubectl apply -f service.yml

在EC2实例的安全组中编辑入站规则,然后单击保存规则。


访问应用程序
访问应用程序:http://<public_ip_of_instance>:30009


做得好!我们已经成功在 Kubernetes 集群上部署了一个 todo 应用程序。

标签:Kubernetes集群,ConfigMap,Pod
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有