引言
Docker 是一种轻量级的容器化技术,可以方便地将应用程序打包到镜像中,并在不同的环境中部署。但是,随着应用规模的增长,单个 Docker 容器可能会变得难以管理。这时候,Kubernetes(也称为 K8s)就是一个非常好的选择。Kubernetes 可以自动部署、扩展和管理容器化应用程序。在本篇文章中,我们将学习如何在 Docker 容器中使用 Kubernetes。
准备工作
在准备开始之前,我们需要安装 Docker 和 Kubernetes。这里不再赘述,读者可以自行搜索相关资料。另外,我们需要创建一个示例应用程序来部署。这里我们选择一个简单的 Node.js 应用程序,使用 Express 框架展示 "Hello, World!"。
-- -------------------- ---- ------- -- ------ ----- ------- - ------------------- ----- --- - ---------- ----- ---- - ---------------- -- ----- ------------ ----- ---- -- - ---------------- --------- --- ---------------- -- -- - ------------------- --------- -- ---- ----------- ---
同时,在项目根目录下创建一个 Dockerfile 来构建应用程序的 Docker 镜像。
-- -------------------- ---- ------- - ---------- ---- --------------- ------- ---- ---- ------------- -- --- --- ------- ---- - - ------ ---- --- - ------ ------- -
这里我们使用了 Node.js v14 的基础镜像,并在其中安装了应用程序的依赖。
使用 Kubernetes 部署应用程序
定义 Kubernetes 对象
在 Kubernetes 中,我们使用 YAML 文件来定义各种对象,例如:Pod、Service、Deployment 等。
Pod:Pod 是 Kubernetes 中最基本的抽象概念,是一个或多个容器的集合,这些容器共享网络和存储空间。每个 Pod 都拥有自己的 IP 地址,并且该地址只能在 Pod 内部使用。在我们的示例中,我们只需要一个容器,因此只需要创建一个 Pod 即可。
-- -------------------- ---- ------- - -------- ----------- -- ----- --- --------- ----- --------------- ----- ----------- - ----- --------------------- ------ ---------------------------- ------ - -------------- ----
在上面的 YAML 文件中,我们定义了一个名为 "hello-world-pod" 的 Pod,其中包含一个名为 "hello-world-container" 的容器。其中,image 字段需要根据实际情况填写。如果您已经将应用程序的 Docker 镜像上传到 DockerHub,可以直接填写您的镜像名称。否则,可以在构建镜像后使用 docker tag
命令重新打标签,然后使用 docker push
命令将其上传到 DockerHub。
Service:Service 是 Kubernetes 中用于定义一组 Pod 访问的入口点。Service 可以通过标签选择器来选择与之关联的 Pod,从而提供一个稳定的网络端点。在我们的示例中,我们需要将 "hello-world-pod" 容器暴露在 Kubernetes 集群中。
-- -------------------- ---- ------- - ------------ ----------- -- ----- ------- --------- ----- ------------------- ----- --------- ---- ----------- ------ - --------- --- ----- -- ----------- ----
在上面的 YAML 文件中,我们定义了一个名为 "hello-world-service" 的 Service,其中的 selector 字段使用了与 Pod 中 metadata.labels 相同的标签选择器。这样,Service 就能够选择到与之关联的 Pod。另外,我们将服务端口设置为 80,目标端口设置为 8080,这样 Service 就可以将流量转发到容器的 8080 端口。
Deployment:Deployment 是 Kubernetes 中的一种控制器,用于管理 Pod 的创建、删除和更新。Deployment 中定义了要运行的 Pod 副本数以及更新 Pod 时使用的策略。在我们的示例中,我们需要使用 Deployment 来管理 Pod。
-- -------------------- ---- ------- - --------------- ----------- ------- ----- ---------- --------- ----- ---------------------- ----- --------- ------------ ---- ----------- --------- - --------- --------- ------- ---- ----------- ----- ----------- - ----- --------------------- ------ ---------------------------- ------ - -------------- ----
在上面的 YAML 文件中,我们定义了一个名为 "hello-world-deployment" 的 Deployment。其中,spec.replicas 字段用于指定要创建的 Pod 副本数,template 字段用于指定 Pod 模板。Pod 模板中的内容与 Pod 配置文件的内容类似。最终,Deployment 会根据 Pod 模板创建多个 Pod,并使用标签选择器匹配对应的 Pod。
部署应用程序
在定义好 Kubernetes 对象后,我们需要使用 kubectl apply
命令来将其部署到 Kubernetes 集群中。
$ kubectl apply -f pod.yaml $ kubectl apply -f service.yaml $ kubectl apply -f deployment.yaml
在执行上述命令后,Kubernetes 将会创建一个 Pod、一个 Service 和一个 Deployment,用于管理和提供我们的应用程序。
访问应用程序
在将应用程序部署到 Kubernetes 集群后,我们需要知道如何访问它。
首先,我们可以使用 kubectl get
命令来查看 Pod 和 Service 的状态。
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-world-deployment-695c8f6878 1/1 Running 0 5m52s $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-world-service ClusterIP 10.105.105.80 <none> 80/TCP 5m52s
在获取到 Pod 和 Service 的信息后,我们可以通过 Service 的 Cluster IP 和端口来访问应用程序。
$ curl http://10.105.105.80 Hello, World!
总结
在本文中,我们学习了如何在 Docker 容器中使用 Kubernetes,以及如何通过 Kubernetes 部署应用程序。使用 Kubernetes 可以更好地管理和扩展容器化应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646b10b1968c7c53b0a81411