Kubernetes 基础知识:您的第一个应用程序
作者:互联网
什么是 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 来源: