community.okd.openshift_adm_prune_images 模块 – 删除未引用的镜像

注意

此模块是 community.okd 集合 (版本 4.0.0) 的一部分。

如果您使用的是 ansible 软件包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装它,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.okd。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在剧本中使用它,请指定:community.okd.openshift_adm_prune_images

community.okd 2.2.0 中的新增功能

概要

  • 此模块允许管理员删除镜像引用。

  • 请注意,如果指定了 namespace,则只有相应命名空间的镜像流上的镜像引用才会成为修剪候选对象,前提是它们在另一个命名空间的另一个镜像流中未使用或未被引用。

  • 类似于 oc adm prune images

要求

执行此模块的主机需要以下要求。

  • python >= 3.6

  • kubernetes >= 12.0.0

  • docker-image-py

参数

参数

注释

all_images

布尔值

将从外部注册表导入的镜像包含在修剪候选对象中。

如果进行修剪,则与其关联的所有镜像对象也将从集成注册表中删除。

选项

  • false

  • true ← (默认)

api_key

字符串

用于对 API 进行身份验证的令牌。也可以通过 K8S_AUTH_API_KEY 环境变量指定。

ca_cert

别名:ssl_ca_cert

路径

用于对 API 进行身份验证的 CA 证书的路径。必须提供完整的证书链,以避免证书验证错误。也可以通过 K8S_AUTH_SSL_CA_CERT 环境变量指定。

client_cert

别名:cert_file

路径

用于对 API 进行身份验证的证书的路径。也可以通过 K8S_AUTH_CERT_FILE 环境变量指定。

client_key

别名:key_file

路径

用于对 API 进行身份验证的密钥文件的路径。也可以通过 K8S_AUTH_KEY_FILE 环境变量指定。

context

字符串

配置文件中找到的上下文的名称。也可以通过 K8S_AUTH_CONTEXT 环境变量指定。

host

字符串

提供用于访问 API 的 URL。也可以通过 K8S_AUTH_HOST 环境变量指定。

ignore_invalid_refs

布尔值

如果设置为 *True*,则修剪过程将忽略解析镜像引用时的所有错误。

这意味着修剪过程将忽略对象与被引用镜像之间的预期连接。

结果可能导致错误地删除未使用镜像。

选项

  • false ← (默认)

  • true

impersonate_groups

列表 / 元素=字符串

kubernetes.core 2.3.0 中新增

要模拟操作的组。

也可以通过 K8S_AUTH_IMPERSONATE_GROUPS 环境变量指定。例如:Group1,Group2

impersonate_user

字符串

kubernetes.core 2.3.0 中新增

要模拟操作的用户名。

也可以通过 K8S_AUTH_IMPERSONATE_USER 环境变量指定。

keep_younger_than

整数

指定镜像及其引用者的最小生存时间(以分钟为单位),才能将其视为修剪候选对象。

kubeconfig

任意

现有 Kubernetes 配置文件的路径。如果没有提供,并且没有提供其他连接选项,Kubernetes 客户端将尝试从 *~/.kube/config* 加载默认配置文件。也可以通过 K8S_AUTH_KUBECONFIG 环境变量指定。

可以使用分隔符“;” (Windows 平台) 或“:” (其他平台) 提供多个 Kubernetes 配置文件。

Kubernetes 配置可以作为字典提供。此功能需要 python kubernetes 客户端版本 >= 17.17.0。在 2.2.0 版本中添加。

namespace

字符串

用于指定对象的命名空间。

no_proxy

字符串

kubernetes.core 2.3.0 中新增

不应该通过代理的主机/域名/IP/CIDR 的逗号分隔列表。也可以通过 K8S_AUTH_NO_PROXY 环境变量指定。

请注意,此模块不会从环境中获取典型的代理设置(例如 NO_PROXY)。

此功能需要 kubernetes>=19.15.0。当 kubernetes 库小于 19.15.0 时,即使 no_proxy 正确设置,它也会失败。

示例值为“localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16”

password

字符串

提供用于对 API 进行身份验证的密码。也可以通过 K8S_AUTH_PASSWORD 环境变量指定。

请阅读 username 选项的描述,了解何时适用此选项。

persist_config

布尔值

是否保存 kube config 刷新令牌。也可以通过 K8S_AUTH_PERSIST_CONFIG 环境变量指定。

当 k8s 上下文使用具有刷新令牌的用户凭据(如 oidc 或 gke/gcloud auth)时,令牌由 k8s python 客户端库刷新,但默认情况下不会保存。因此,旧的刷新令牌可能会过期,并且下次身份验证可能会失败。将此标志设置为 true 将告诉 k8s python 客户端将新的刷新令牌保存到 kube config 文件。

默认为 false。

请注意,当前版本的 k8s python 客户端库尚不支持将此标志设置为 True。

此 k8s python 库的修复程序位于:https://github.com/kubernetes-client/python-base/pull/169

选项

  • false

  • true

proxy

字符串

用于连接的 HTTP 代理的 URL。也可以通过 K8S_AUTH_PROXY 环境变量指定。

请注意,此模块不会从环境中获取典型的代理设置(例如 HTTP_PROXY)。

proxy_headers

字典

kubernetes.core 2.0.0 中添加

basic_auth

字符串

用于基本身份验证标头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_BASIC_AUTH 环境变量指定。

proxy_basic_auth

字符串

用于代理基本身份验证标头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_PROXY_BASIC_AUTH 环境变量指定。

user_agent

字符串

表示所需用户代理的字符串,例如 foo/1.0。

也可以通过 K8S_AUTH_PROXY_HEADERS_USER_AGENT 环境变量指定。

prune_over_size_limit

布尔值

指定是否应考虑修剪在同一命名空间中指定的 LimitRanges 超限的镜像。

选项

  • false ← (默认)

  • true

prune_registry

布尔值

如果设置为 *False*,则修剪操作将清理镜像 API 对象,但不会删除注册表中任何关联的内容。

选项

  • false

  • true ← (默认)

registry_ca_cert

路径

用于联系注册表的 CA 证书的路径。必须提供完整的证书链以避免证书验证错误。

registry_url

字符串

联系注册表时使用的地址,而不是使用默认值。

如果您无法解析或访问默认注册表,但您确实有可行的替代路由,这将非常有用。

可以使用“<scheme>://”前缀强制执行特定传输协议。

registry_validate_certs

布尔值

是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。

选项

  • false

  • true

username

字符串

提供用于对 API 进行身份验证的用户名。也可以通过 K8S_AUTH_USERNAME 环境变量指定。

请注意,这仅适用于配置为使用 HTTP 基本身份验证的集群。如果您的集群具有其他形式的身份验证(例如 OpenShift 中的 OAuth2),则此选项将无法按预期工作,您应该查看 community.okd.k8s_auth 模块,因为它可能可以满足您的需求。

validate_certs

别名:verify_ssl

布尔值

是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。

选项

  • false

  • true

备注

注意

  • validate_certs 为 *True* 时,为避免 SSL 证书验证错误,必须通过 ca_cert 或 kubeconfig 文件提供 API 服务器的完整证书链。

示例

# Prune if only images and their referrers were more than an hour old
- name: Prune image with referrer been more than an hour old
  community.okd.openshift_adm_prune_images:
    keep_younger_than: 60

# Remove images exceeding currently set limit ranges
- name: Remove images exceeding currently set limit ranges
  community.okd.openshift_adm_prune_images:
    prune_over_size_limit: true

# Force the insecure http protocol with the particular registry host name
- name: Prune images using custom registry
  community.okd.openshift_adm_prune_images:
    registry_url: http://registry.example.org
    registry_validate_certs: false

返回值

常用返回值已在 此处 记录,以下是此模块独有的字段

描述

deleted_images

列表 / 元素=字典

已删除的镜像。

返回:成功

示例: [{"apiVersion": "image.openshift.io/v1", "dockerImageLayers": [{"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:5e0b432e8ba9d9029a000e627840b98ffc1ed0c5172075b7d3e869be0df0fe9b", "size": 54932878}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:a84cfd68b5cea612a8343c346bfa5bd6c486769010d12f7ec86b23c74887feb2", "size": 5153424}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:e8b8f2315954535f1e27cd13d777e73da4a787b0aebf4241d225beff3c91cbb1", "size": 10871995}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:0598fa43a7e793a76c198e8d45d8810394e1cfc943b2673d7fcf5a6fdc4f45b3", "size": 54567844}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:83098237b6d3febc7584c1f16076a32ac01def85b0d220ab46b6ebb2d6e7d4d4", "size": 196499409}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:b92c73d4de9a6a8f6b96806a04857ab33cf6674f6411138603471d744f44ef55", "size": 6290769}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:ef9b6ee59783b84a6ec0c8b109c409411ab7c88fa8c53fb3760b5fde4eb0aa07", "size": 16812698}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:c1f6285e64066d36477a81a48d3c4f1dc3c03dddec9e72d97da13ba51bca0d68", "size": 234}, {"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "name": "sha256:a0ee7333301245b50eb700f96d9e13220cdc31871ec9d8e7f0ff7f03a17c6fb3", "size": 2349241}], "dockerImageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json", "dockerImageMetadata": {"Architecture": "amd64", "Config": {"Cmd": ["python3"], "Env": ["PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG=C.UTF-8", "GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568", "PYTHON_VERSION=3.8.12", "PYTHON_PIP_VERSION=21.2.4", "PYTHON_SETUPTOOLS_VERSION=57.5.0", "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/3cb8888cc2869620f57d5d2da64da38f516078c7/public/get-pip.py", "PYTHON_GET_PIP_SHA256=c518250e91a70d7b20cceb15272209a4ded2a0c263ae5776f129e0d9b5674309"], "Image": "sha256:cc3a2931749afa7dede97e32edbbe3e627b275c07bf600ac05bc0dc22ef203de"}, "Container": "b43fcf5052feb037f6d204247d51ac8581d45e50f41c6be2410d94b5c3a3453d", "ContainerConfig": {"Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"python3\"]"], "Env": ["PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG=C.UTF-8", "GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568", "PYTHON_VERSION=3.8.12", "PYTHON_PIP_VERSION=21.2.4", "PYTHON_SETUPTOOLS_VERSION=57.5.0", "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/3cb8888cc2869620f57d5d2da64da38f516078c7/public/get-pip.py", "PYTHON_GET_PIP_SHA256=c518250e91a70d7b20cceb15272209a4ded2a0c263ae5776f129e0d9b5674309"], "Hostname": "b43fcf5052fe", "Image": "sha256:cc3a2931749afa7dede97e32edbbe3e627b275c07bf600ac05bc0dc22ef203de"}, "Created": "2021-12-03T01:53:41Z", "DockerVersion": "20.10.7", "Id": "sha256:f746089c9d02d7126bbe829f788e093853a11a7f0421049267a650d52bbcac37", "Size": 347487141, "apiVersion": "image.openshift.io/1.0", "kind": "DockerImage"}, "dockerImageMetadataVersion": "1.0", "dockerImageReference": "python@sha256:a874dcabc74ca202b92b826521ff79dede61caca00ceab0b65024e895baceb58", "kind": "Image", "metadata": {"annotations": {"image.openshift.io/dockerLayersOrder": "ascending"}, "creationTimestamp": "2021-12-07T07:55:30Z", "name": "sha256:a874dcabc74ca202b92b826521ff79dede61caca00ceab0b65024e895baceb58", "resourceVersion": "1139214", "uid": "33be6ab4-af79-4f44-a0fd-4925bd473c1f"}}, "..."]

updated_image_streams

列表 / 元素=字典

已更新的镜像流。

返回:成功

示例: [{"apiVersion": "image.openshift.io/v1", "kind": "ImageStream", "metadata": {"annotations": {"openshift.io/image.dockerRepositoryCheck": "2021-12-07T07:55:30Z"}, "creationTimestamp": "2021-12-07T07:55:30Z", "generation": 1, "name": "python", "namespace": "images", "resourceVersion": "1139215", "uid": "443bad2c-9fd4-4c8f-8a24-3eca4426b07f"}, "spec": {"lookupPolicy": {"local": false}, "tags": [{"annotations": null, "from": {"kind": "DockerImage", "name": "python:3.8.12"}, "generation": 1, "importPolicy": {"insecure": true}, "name": "3.8.12", "referencePolicy": {"type": "Source"}}]}, "status": {"dockerImageRepository": "image-registry.openshift-image-registry.svc:5000/images/python", "publicDockerImageRepository": "default-route-openshift-image-registry.apps-crc.testing/images/python", "tags": []}}, "..."]

作者

  • Aubin Bikouo (@abikouo)