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

注意

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

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

要安装它,请使用:ansible-galaxy collection install community.okd。您需要更多要求才能使用此模块,请参阅 要求 以了解详细信息。

要在 playbook 中使用它,请指定: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

boolean

包括从外部注册表导入的镜像作为修剪的候选对象。

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

选择

  • false

  • true ←(默认)

api_key

string

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

ca_cert

别名:ssl_ca_cert

path

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

client_cert

别名:cert_file

path

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

client_key

别名:key_file

path

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

context

string

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

host

string

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

ignore_invalid_refs

boolean

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

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

因此,可能会错误地删除未使用的镜像。

选择

  • false ←(默认)

  • true

impersonate_groups

list / elements=string

在 kubernetes.core 2.3.0 中添加

要为此操作模拟的组。

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

impersonate_user

string

在 kubernetes.core 2.3.0 中添加

要为此操作模拟的用户名。

也可以通过 K8S_AUTH_IMPERSONATE_USER 环境指定。

keep_younger_than

integer

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

kubeconfig

any

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

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

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

namespace

string

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

no_proxy

string

在 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”

密码

string

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

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

persist_config

boolean

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

当 k8s 上下文使用带有刷新令牌的用户凭据(如 oidc 或 gke/gcloud 身份验证)时,令牌由 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

string

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

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

proxy_headers

字典

在 kubernetes.core 2.0.0 中添加

basic_auth

string

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

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

proxy_basic_auth

string

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

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

user_agent

string

表示您想要的 user-agent 的字符串,例如 foo/1.0。

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

prune_over_size_limit

boolean

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

选择

  • false ←(默认)

  • true

prune_registry

boolean

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

选择

  • false

  • true ←(默认)

registry_ca_cert

path

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

registry_url

string

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

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

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

registry_validate_certs

boolean

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

选择

  • false

  • true

username

string

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

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

validate_certs

别名:verify_ssl

boolean

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

选择

  • false

  • true

说明

注意

  • 为了避免当 validate_certsTrue 时出现 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

列表 / elements=字典

已删除的镜像。

返回:成功

示例: [{"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

列表 / elements=字典

更新的镜像流。

返回:成功

示例: [{"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)