Kubernetes 是一款广泛使用的容器编排工具,它能够管理大规模容器化应用程序的部署、扩展、副本配置和自动化操作等。其中最重要的部分就是容器镜像,因此理解 Kubernetes 中容器镜像的拉取和登陆方法对于了解 Kubernetes 的整体架构和实现非常重要。
容器镜像概览
在 Kubernetes 中,一个容器镜像是一个可执行的二进制文件,它能够包含一个应用程序以及运行它所需要的所有库和依赖项。容器镜像的构建基于 Docker,Docker 是在 Linux 操作系统上实现容器虚拟化的一个项目,Kubernetes 的容器镜像使用 Docker 镜像库作为存储、分配和管理镜像的地方。
Docker 镜像库是容器镜像的存储库,它通常位于 Docker Hub 中心化的镜像库中,其他的镜像库也可以被使用,如 Google Container Registry, Quay.io 和自建的镜像库等。
镜像拉取
在 Kubernetes 用户进行容器部署时,他们需要在容器上运行一个特定的镜像。而这个容器镜像通常并不在本地机器上,需要从 Docker 镜像库中抓取到 Kubernetes 群集所在机器上,然后通过 Kubernetes 对容器进行运行和管理。
下面是一个使用 kubectl 命令行工具来拉取容器镜像的示例,该工具是一个用于 Kubernetes 管理的标准命令行工具:
# 拉取指定的容器镜像到本地 $ kubectl pull [image_name]
例如,要拉取 Docker Hub 上的 Ubuntu 18.04 镜像,可以使用以下命令:
$ kubectl pull ubuntu:18.04
在 Kubernetes 群集中,容器镜像也可以使用 Kubernetes 的 Pod 定义来定义。具体来说,kubectl 命令行工具可以使用 YAML 或 JSON 格式的 Pod 定义来指定 pod 中要使用的各种容器和容器镜像。下面是一个示例 YAML 文件,它描述了一个名为 nginx 的 Pod:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ----- ----- ----------- - ----- ----- ------ ----- ------ - ----- ---- -------------- --
在这个 YAML 文件中,image 是一个包含容器镜像名称和标签的字段。在此示例中,nginx 的容器镜像来自 Docker Hub 上的公共 nginx 镜像。
登录私有镜像库
对于私有容器镜像存储库,Kubernetes 使用的是基于 Docker 的镜像,需要用户输入 Docker 镜像库的用户名和密码来访问私有镜像。以下是一个示例命令,用于在 Docker Hub 中授权用户拉取私有应用的镜像,其中需要用户提供其 Docker 镜像库的凭据:
$ docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
在 Kubernetes 中,可以使用 Kubernetes 机密对象来存储 Docker 镜像库凭据和其他重要信息,有了机密对象后,可以在各个部署中引用机密对象,以便在容器镜像拉取时提供凭据,这个机密信息在集群内公开,因此建议使用较高的安全级别。
创建一个机密需要使用 kubectl 命令行工具,如下所示:
$ kubectl create secret docker-registry my-registry-cred \ --docker-server=DOCKER_REGISTRY_SERVER \ --docker-username=DOCKER_USER \ --docker-password=DOCKER_PASSWORD \ --docker-email=DOCKER_EMAIL
上述代码中的编码内容,"DOCKER_REGISTRY_SERVER" 应该是 Docker 镜像库的地址,"DOCKER_USER" 是 Docker 镜像库的用户名,"DOCKER_PASSWORD" 是 Docker 镜像库密码,"DOCKER_EMAIL" 是与帐户关联的电子邮件地址。
之后在 Pod YAML 文件中,使用机密对象引用 Docker 镜像库的用户名和密码等信息,如下所示:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ----------------- - ----- ----------------
结论
通过以上示例,我们可以更好地理解 Kubernetes 中容器镜像的拉取和登录方法,从而更好地学习和理解 Kubernetes 的整体架构以及实现。除此之外,也希望对容器的运维运用有所指导,可以帮助更多的应用程序在 Kubernetes 中进行部署和管理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67035a7ed91dce0dc84b3db0