From 0a667fcc2d493599fe36d56fd1c47d32e652cb96 Mon Sep 17 00:00:00 2001 From: howieyuen Date: Mon, 18 Apr 2022 20:55:04 +0800 Subject: [PATCH] [zh]Sync content/zh/docs/concepts/containers/images.md --- content/zh/docs/concepts/containers/images.md | 185 ++---------------- 1 file changed, 18 insertions(+), 167 deletions(-) diff --git a/content/zh/docs/concepts/containers/images.md b/content/zh/docs/concepts/containers/images.md index b782d01833..12c48ef463 100644 --- a/content/zh/docs/concepts/containers/images.md +++ b/content/zh/docs/concepts/containers/images.md @@ -45,8 +45,7 @@ and possibly a port number as well; for example: `fictional.registry.example:104 If you don't specify a registry hostname, Kubernetes assumes that you mean the Docker public registry. -After the image name part you can add a _tag_ (as also using with commands such -as `docker` and `podman`). +After the image name part you can add a _tag_ (in the same way you would when using with commands like `docker` or `podman`). Tags let you identify different versions of the same series of images. --> ## 镜像名称 {#image-names} @@ -57,8 +56,7 @@ Tags let you identify different versions of the same series of images. 如果你不指定仓库的主机名,Kubernetes 认为你在使用 Docker 公共仓库。 -在镜像名称之后,你可以添加一个 _标签(Tag)_ (就像在 `docker` 或 `podman` -中也在用的那样)。 +在镜像名称之后,你可以添加一个标签(Tag)(与使用 `docker` 或 `podman` 等命令时的方式相同)。 使用标签能让你辨识同一镜像序列中的不同版本。 当使用镜像标签时,如果镜像仓库修改了代码所对应的镜像标签,可能会出现新旧代码混杂在 Pod 中运行的情况。 镜像摘要唯一标识了镜像的特定版本,因此 Kubernetes 每次启动具有指定镜像名称和摘要的容器时,都会运行相同的代码。 -指定一个镜像可以固定你所运行的代码,这样镜像仓库的变化就不会导致版本的混杂。 +通过摘要指定镜像可固定你运行的代码,这样镜像仓库的变化就不会导致版本的混杂。 有一些第三方的[准入控制器](/zh/docs/reference/access-authn-authz/admission-controllers/) 在创建 Pod(和 Pod 模板)时产生变更,这样运行的工作负载就是根据镜像摘要,而不是标签来定义的。 @@ -346,17 +344,12 @@ These options are explained in more detail below. ### 配置 Node 对私有仓库认证 -如果你在节点上运行的是 Docker,你可以配置 Docker -容器运行时来向私有容器仓库认证身份。 - -此方法适用于能够对节点进行配置的场合。 +设置凭据的具体说明取决于你选择使用的容器运行时和仓库。 +你应该参考解决方案的文档来获取最准确的信息。 -Docker 将私有仓库的密钥保存在 `$HOME/.dockercfg` 或 `$HOME/.docker/config.json` -文件中。如果你将相同的文件放在下面所列的搜索路径中,`kubelet` 会在拉取镜像时将其用作凭据 -数据来源: - - -* `{--root-dir:-/var/lib/kubelet}/config.json` -* `{kubelet 当前工作目录}/config.json` -* `${HOME}/.docker/config.json` -* `/.docker/config.json` -* `{--root-dir:-/var/lib/kubelet}/.dockercfg` -* `{kubelet 当前工作目录}/.dockercfg` -* `${HOME}/.dockercfg` -* `/.dockercfg` - - -{{< note >}} -你可能不得不为 `kubelet` 进程显式地设置 `HOME=/root` 环境变量。 -{{< /note >}} - - -推荐采用如下步骤来配置节点以便访问私有仓库。以下示例中,在 PC 或笔记本电脑中操作: - - -1. 针对你要使用的每组凭据,运行 `docker login [服务器]` 命令。这会更新 - 你本地环境中的 `$HOME/.docker/config.json` 文件。 -1. 在编辑器中打开查看 `$HOME/.docker/config.json` 文件,确保其中仅包含你要 - 使用的凭据信息。 -1. 获得节点列表;例如: - - - 如果想要节点名称:`nodes=$(kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}')` - - - 如果想要节点 IP ,`nodes=$(kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}')` - -1. 将本地的 `.docker/config.json` 拷贝到所有节点,放入如上所列的目录之一: - - 例如,可以试一下:`for n in $nodes; do scp ~/.docker/config.json root@"$n":/var/lib/kubelet/config.json; done` - - -{{< note >}} -对于产品环境的集群,可以使用配置管理工具来将这些设置应用到 -你所期望的节点上。 -{{< /note >}} - - -创建使用私有镜像的 Pod 来验证。例如: - -```shell -kubectl apply -f - < -如果一切顺利,那么一段时间后你可以执行: -```shell -kubectl logs private-image-test-1 -``` -然后可以看到命令的输出: -``` -SUCCESS -``` - - -如果你怀疑命令失败了,你可以运行: - -```shell -kubectl describe pods/private-image-test-1 | grep 'Failed' -``` - - -如果命令确实失败,输出类似于: - -``` - Fri, 26 Jun 2015 15:36:13 -0700 Fri, 26 Jun 2015 15:39:13 -0700 19 {kubelet node-i2hq} spec.containers{uses-private-image} failed Failed to pull image "user/privaterepo:v1": Error: image user/privaterepo:v1 not found -``` - - -你必须确保集群中所有节点的 `.docker/config.json` 文件内容相同。 -否则,Pod 会能在一些节点上正常运行而无法在另一些节点上启动。 -例如,如果使用节点自动扩缩,那么每个实例模板都需要包含 `.docker/config.json`, -或者挂载一个包含该文件的驱动器。 - -在 `.docker/config.json` 中配置了私有仓库密钥后,所有 Pod 都将能读取私有仓库中的镜像。 +有关配置私有容器镜像仓库的示例,请参阅任务 +[从私有镜像库中提取图像](/zh/docs/tasks/configure-pod-container/pull-image-private-registry)。 +该示例使用 Docker Hub 中的私有注册表。 #### 使用 Docker Config 创建 Secret {#creating-a-secret-with-docker-config} -运行以下命令,将大写字母代替为合适的值: +你需要知道用于向仓库进行身份验证的用户名、密码和客户端电子邮件地址,以及它的主机名。 +运行以下命令,注意替换适当的大写值: ```shell -kubectl create secret docker-registry <名称> \ - --docker-server=DOCKER_REGISTRY_SERVER \ - --docker-username=DOCKER_USER \ - --docker-password=DOCKER_PASSWORD \ - --docker-email=DOCKER_EMAIL +kubectl create secret docker-registry --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL ```