要阅读更多类似的文章,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与我联系。