带有nodejs的kubernetes
#aws #react #node #kubernetes

要阅读更多类似的文章,visit my blog

让我们在kubernetes群集上部署nodejs应用程序

previous article中,我们学到了Kubernetes概念的基础知识。

今天,我们将学习如何在kubernetes群集上部署nodejs应用程序。步骤如下

  • 为nodejs应用程序创建docker映像
  • 将该图像发布到Dockerhub
  • 创建一个linode kubernetes群集
  • 在我们本地机器上安装kubectl
  • 将我们的应用程序部署到Kubernetes群集

让我们开始!

创建一个Docker映像

在上一篇文章中,我们了解了如何对基本的nodejs应用程序进行扩展。
您可以找到该文章here

可以找到该文章的存储库here

所以让我们先克隆!

git clone https://github.com/Mohammad-Faisal/express-typescript-docker.git

cd express-typescript-docker

因此,我们现在有一个已经对接的nodejs应用程序了!

在Dockerhub上发布图像

Dockerhub是您可以发布存储库的地方。这是用于Docker图像的GitHub,可以免费使用!因此,请随时开设帐户here

然后在我们发布图像之前,我们必须构建它。

docker image build -t 56faisal/learn-kubernetes:1.0 .

在这里注意,

56faisal -> is the Dockerhub Username
learn-kubernets -> is the image name and
1.0 -> is the tag name

如果您正在运行Mac,则您的默认Docker系统将使用 ARM64 架构。但是在Linode上,您的VM最有可能是使用 amd64 架构构建的。部署图像时,此版本不匹配会导致问题。因此,如果您在Mac上,请使用以下命令构建图像。

docker image build  --platform=linux/amd64 -t 56faisal/learn-kubernetes:1.0 .

然后查看本地列表上的图像。

docker image ls


REPOSITORY                                TAG                   IMAGE ID       CREATED        SIZE
56faisal/learn-kubernetes                 1.0                   13a974972901   2 hours ago    263MB

然后登录到dockerhub

docker login --username docker_hub_id # for me it's 56faisal

它将要求您的密码。给那个,你应该很好。

然后将图像推到dockerhub。

docker image push 56faisal/learn-kubernetes:1.0

您可以转到Dockerhub并验证您的图像在那里。对我来说,URL看起来像这样:

https://hub.docker.com/repository/docker/56faisal/learn-kubernetes

让我们部署!

但是在我们这样做之前,我们需要安装kubernetes-cli

brew install kubernetes-cli

您可以获得其他OS here

的安装说明

在Linode上创建Kubernetes群集

有许多Kubernetes服务,但是Linode提供了管理它们的最简单方法。因此,我们将在Linode上创建一个带有两个工作节点的Kubernetes群集。

我不会详细介绍。您可以做到这一点。

获取Kubernetes群集配置

在Linode Kubernetes群集页面上,您会注意到您的Kubernetes配置文件有一个下载按钮。

下载并将其放入项目的根源。或任何地方,就此而言。这将使我们能够以后与Kubernetes群集进行交互。

打开一个终端,并保存库贝菲格的路径到$KUBECONFIG环境变量。

您可以通过运行pwd获取当前目录路径,并使用它来获取配置文件的路径。

让我们现在为我们设置上下文!

export KUBECONFIG=/Users/mohammadfaisal/Documents/learning/express-typescript-docker/learn-kubernetes-kubeconfig.yml

然后运行以下命令查看节点!节点是在云上运行的物理机器或VM。

kubectl get nodes

我们在Linode群集上创建了两个服务器。因此,我们将看到两个节点。

NAME                          STATUS   ROLES    AGE   VERSION
lke55618-87276-6237a2503845   Ready    <none>   33m   v1.22.6
lke55618-87276-6237a2510769   Ready    <none>   33m   v1.22.6

节点准备运行我们的应用程序。

创建部署

所以现在我们可以与我们的kubernetes群集进行互动。
但是现在我们实际上需要部署一些东西来了解它的力量。 Kubernetes有一个豆荚的概念。豆荚是在基础架构上运行的独立容器。

您可以根据需要创建尽可能多的POD,并且可以通过配置部署来做到这一点。这意味着您可以在两台机器上有20个豆荚。通常,我们在一个吊舱内有一个容器。

让我们创建一个名为 deployment.yml 并在那里粘贴以下配置的部署配置。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: learn-kubernetes-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: express-docker-kubernetes
  template:
    metadata:
      labels:
        app: express-docker-kubernetes
    spec:
      containers:
      - name: express-docker-kubernetes
        image: 56faisal/learn-kubernetes:1.0
        ports:
        - containerPort: 3000

在这里需要注意的一些重要事情如下:

选择器 - > matchlabels - > app - > express -docker -kubernetes

这个应用程序帮助我们命名豆荚。后来,它将帮助我们修改我们的部署并将其与服务联系起来。

部署您的应用程序

然后使用以下命令部署此功能。

kubectl create -f deployment.yml

我们使用-f配置传递deployment.yml文件。这使我们可以为不同文件夹创建多个部署文件。

您可以通过运行以下命令看到部署:

kubectl get deployments

如果您想要部署的详细信息:

kubectl explain deployment

这将提供像这样的输出

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
learn-kubernetes-deployment   0/2     2            0           7s

如果要删除部署,则可以运行以下命令:

kubectl delete deploy learn-kubernetes-deployment

这最后一部分是部署的名称。

看到豆荚

您的部署创建了两个POD,因为我们给了我们的部署配置选项 replicas:2

让我们看看那些豆荚!

kubectl get pods

它将为您提供这样的输出。

NAME                                          READY   STATUS    RESTARTS   AGE
learn-kubernetes-deployment-6fdf4bf45-pglg8   1/1     Running   0          49m
learn-kubernetes-deployment-6fdf4bf45-s9dsd   1/1     Running   0          49m

,我们的两个豆荚都在运行!如果您需要扩大规模,则需要将数字从2增加到您想要的任何内容并重新部署。
很容易!

有时您需要查看豆荚内发生的事情。您可以使用以下命令从POD中获取更多详细信息。

kubectl describe pods

输出将具有您需要的所有信息,包括POD的IP地址。但不幸的是,您将无法访问您的应用程序,因为您的应用程序还没有暴露在世界上!

让我们现在就这样做!

向公众展示

让我们使用以下命令将部署到世界上。

kubectl expose deployment learn-kubernetes-deployment --type="LoadBalancer"

否则我们也可以为部署创建服务

apiVersion: v1
kind: Service
metadata:
  name: learn-kubernetes-service
spec:
  selector:
    app: learn-kubernetes
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

然后运行

kubectl apply -f service.yml

这将为我们在Linode服务器上的应用程序创建一个负载平衡器,我们将获得一个公共端点来调用我们的服务。

成功部署服务后,通过运行以下命令获取负载平衡器的详细信息:

kubectl get services

您将看到以下输出:

NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
kubernetes                 ClusterIP      10.128.0.1       <none>           443/TCP          4h58m
learn-kubernetes-service   LoadBalancer   10.128.247.181   172.105.44.102   3000:31752/TCP   74s

请注意为您提供应用程序的公共IP地址的EXTERNAL-IP列。

让我们浏览浏览器并点击以下URL

http://172.105.44.102:3000/

,您将受到以下输出的欢迎。

{ "message": "Hello World!" }

我们的应用程序现在已经存在了!我们可以用它做任何我们想做的!

恭喜您使用kubernetes部署第一个Nodejs应用程序。

Github repo:

https://github.com/Mohammad-Faisal/nodejs-docker-kubernetes

祝您有美好的一天! :D

通过LinkedIn或我的Personal Website与我联系。