如何在 Docker 容器中使用 Kubernetes?

阅读时长 7 分钟读完

引言

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 集群中。

在执行上述命令后,Kubernetes 将会创建一个 Pod、一个 Service 和一个 Deployment,用于管理和提供我们的应用程序。

访问应用程序

在将应用程序部署到 Kubernetes 集群后,我们需要知道如何访问它。

首先,我们可以使用 kubectl get 命令来查看 Pod 和 Service 的状态。

在获取到 Pod 和 Service 的信息后,我们可以通过 Service 的 Cluster IP 和端口来访问应用程序。

总结

在本文中,我们学习了如何在 Docker 容器中使用 Kubernetes,以及如何通过 Kubernetes 部署应用程序。使用 Kubernetes 可以更好地管理和扩展容器化应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646b10b1968c7c53b0a81411

纠错
反馈