手动拉取 Docker 镜像到 Kubernetes

在 Kubernetes (K8s) 中,我们可以通过手动拉取 Docker 镜像来准备我们的应用程序。这在以下情况下特别有用:

  • 你的 Kubernetes 集群没有互联网连接。
  • 你想要拉取特定版本的 Docker 镜像。
  • 你希望在拉取镜像之前对其进行某些自定义操作。

在本文中,我们将介绍如何手动拉取 Docker 镜像并将其部署到 Kubernetes 集群中。

步骤 1 - 拉取 Docker 镜像

首先,我们需要在具有互联网连接的机器上拉取我们想要使用的 Docker 镜像。为了演示,我们将以 nginx 镜像为例。

在命令行中,运行以下命令来拉取 nginx 镜像:

docker pull nginx

这将从 Docker Hub 拉取 nginx 镜像的最新版本。你可以通过指定标签来拉取特定版本的镜像,例如:

docker pull nginx:1.19.10

步骤 2 - 导出 Docker 镜像

在拉取镜像之后,我们需要将镜像导出到一个文件,以便将其复制到没有互联网连接的 Kubernetes 集群中。

docker save -o nginx.tar nginx

这将把 nginx 镜像保存为 nginx.tar 文件。

步骤 3 - 传输 Docker 镜像

将导出的 Docker 镜像文件传输到 Kubernetes 集群的节点上。你可以使用各种方法进行传输,例如使用 scprsync 或者将文件上传到云存储服务。

scp nginx.tar user@kubernetes-node:/path/to/nginx.tar

确保将 user 替换为你的用户名,kubernetes-node 替换为你的 Kubernetes 节点的 IP 地址或主机名,并将 /path/to/nginx.tar 替换为目标路径。

步骤 4 - 导入 Docker 镜像

在 Kubernetes 节点上,我们需要导入传输过来的 Docker 镜像。

docker load -i nginx.tar

这将从 nginx.tar 文件中导入 nginx 镜像。

步骤 5 - 部署 Docker 镜像到 Kubernetes

现在我们可以使用导入的 Docker 镜像部署到 Kubernetes 集群中。

首先,你需要创建一个包含镜像名称和版本的 Deployment 对象。以下是一个示例 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

将上述内容保存为 nginx-deployment.yaml 文件,并使用以下命令在 Kubernetes 中创建该部署:

kubectl apply -f nginx-deployment.yaml

这将创建一个名为 nginx-deployment 的 Deployment,其中包含一个名为 nginx 的容器。容器会暴露在 80 端口上。

现在,你可以使用以下命令检查部署的状态:

kubectl get deployments

总结

在本文中,我们介绍了手动拉取 Docker 镜像并将其部署到 Kubernetes 集群的步骤。首先,我们拉取 Docker 镜像并将其导出到文件中。然后,我们将文件传输到 Kubernetes 节点,并在节点上导入镜像。最后,我们使用 Kubernetes 创建一个 Deployment,将镜像部署到集群中。

通过手动拉取 Docker 镜像,你可以在没有互联网连接的环境中部署 Kubernetes 应用程序,并对镜像进行自定义操作。