Repository: kubeflow/training-operator (language: python)

Issue:
Support Kubernetes v1.27 - v1.29
As part of Training Operator 1.8 release we need to support Kubernetes `v1.27 - v1.29` versions.

Currently, we validate Training Operator for Kubernetes `v1.25 - v1.27` in our integration tests.
We should drop support for `v1.25` and `v1.26` and add support for `v1.28` and `v1.29`.

Let's identify the required changes in this issue.

cc @kubeflow/wg-training-leads @tenzen-y @kubeflow/release-team 



Discussion / hints:
/assign


Fix patch:
diff --git a/Makefile b/Makefile
index 1a2c12bb15..a291511c82 100644
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,7 @@ ifeq ($(GOLANGCI_LINT),)
 endif
 	golangci-lint run --timeout 5m --go 1.20 ./...
 
-ENVTEST_K8S_VERSION ?= 1.28
+ENVTEST_K8S_VERSION ?= 1.29
 HAS_SETUP_ENVTEST := $(shell command -v setup-envtest;)
 
 testall: manifests generate fmt vet golangci-lint test ## Run tests.
@@ -72,7 +72,7 @@ test: envtest
 
 envtest:
 ifndef HAS_SETUP_ENVTEST
-	go install sigs.k8s.io/controller-runtime/tools/setup-envtest@116a1b831fffe7ccc3c8145306c3e1a3b1b14ffa # v0.15.0
+	go install sigs.k8s.io/controller-runtime/tools/setup-envtest@bf15e44028f908c790721fc8fe67c7bf2d06a611 # v0.17.2
 	@echo "setup-envtest has been installed"
 endif
 	@echo "setup-envtest has already installed"
diff --git a/build/images/kubectl-delivery/Dockerfile b/build/images/kubectl-delivery/Dockerfile
index 16d87a6031..406b07e20d 100644
--- a/build/images/kubectl-delivery/Dockerfile
+++ b/build/images/kubectl-delivery/Dockerfile
@@ -1,7 +1,7 @@
 FROM alpine:3.17 AS build
 
 # Install kubectl.
-ENV K8S_VERSION v1.28.8
+ENV K8S_VERSION v1.29.3
 
 RUN apk add --no-cache wget
 RUN wget -q https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/kubectl
diff --git a/go.mod b/go.mod
index 25b2d6ff7e..fb0fcedb54 100644
--- a/go.mod
+++ b/go.mod
@@ -3,24 +3,24 @@ module github.com/kubeflow/training-operator
 go 1.20
 
 require (
-	github.com/go-logr/logr v1.2.4
-	github.com/google/go-cmp v0.5.9
-	github.com/onsi/ginkgo/v2 v2.11.0
-	github.com/onsi/gomega v1.27.10
-	github.com/prometheus/client_golang v1.16.0
+	github.com/go-logr/logr v1.4.1
+	github.com/google/go-cmp v0.6.0
+	github.com/onsi/ginkgo/v2 v2.14.0
+	github.com/onsi/gomega v1.30.0
+	github.com/prometheus/client_golang v1.18.0
 	github.com/sirupsen/logrus v1.9.0
 	github.com/stretchr/testify v1.8.4
-	go.uber.org/zap v1.25.0
-	k8s.io/api v0.28.8
-	k8s.io/apimachinery v0.28.8
-	k8s.io/client-go v0.28.8
-	k8s.io/code-generator v0.28.8
-	k8s.io/klog/v2 v2.100.1
-	k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9
-	k8s.io/utils v0.0.0-20230406110748-d93618cff8a2
-	sigs.k8s.io/controller-runtime v0.16.5
+	go.uber.org/zap v1.26.0
+	k8s.io/api v0.29.3
+	k8s.io/apimachinery v0.29.3
+	k8s.io/client-go v0.29.3
+	k8s.io/code-generator v0.29.3
+	k8s.io/klog/v2 v2.110.1
+	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
+	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
+	sigs.k8s.io/controller-runtime v0.17.2
 	sigs.k8s.io/scheduler-plugins v0.26.7
-	sigs.k8s.io/yaml v1.3.0
+	sigs.k8s.io/yaml v1.4.0
 	volcano.sh/apis v1.8.0
 )
 
@@ -30,9 +30,9 @@ require (
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 	github.com/evanphx/json-patch v5.6.0+incompatible // indirect
-	github.com/evanphx/json-patch/v5 v5.6.0 // indirect
-	github.com/fsnotify/fsnotify v1.6.0 // indirect
-	github.com/go-logr/zapr v1.2.4 // indirect
+	github.com/evanphx/json-patch/v5 v5.8.0 // indirect
+	github.com/fsnotify/fsnotify v1.7.0 // indirect
+	github.com/go-logr/zapr v1.3.0 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 	github.com/go-openapi/jsonreference v0.20.2 // indirect
 	github.com/go-openapi/swag v0.22.3 // indirect
@@ -48,22 +48,22 @@ require (
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+	github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
-	github.com/prometheus/client_model v0.4.0 // indirect
-	github.com/prometheus/common v0.44.0 // indirect
-	github.com/prometheus/procfs v0.10.1 // indirect
+	github.com/prometheus/client_model v0.5.0 // indirect
+	github.com/prometheus/common v0.45.0 // indirect
+	github.com/prometheus/procfs v0.12.0 // indirect
 	github.com/spf13/pflag v1.0.5 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
 	golang.org/x/mod v0.14.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
-	golang.org/x/oauth2 v0.8.0 // indirect
-	golang.org/x/sys v0.15.0 // indirect
+	golang.org/x/oauth2 v0.12.0 // indirect
+	golang.org/x/sys v0.16.0 // indirect
 	golang.org/x/term v0.15.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
@@ -74,9 +74,9 @@ require (
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/apiextensions-apiserver v0.28.3 // indirect
-	k8s.io/component-base v0.28.3 // indirect
-	k8s.io/gengo v0.0.0-20220902162205-c0856e24416d // indirect
+	k8s.io/apiextensions-apiserver v0.29.0 // indirect
+	k8s.io/component-base v0.29.0 // indirect
+	k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 )
diff --git a/go.sum b/go.sum
index 619df9a60a..6b0f10649d 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,3 @@
-github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
-github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
@@ -15,16 +13,16 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
 github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
-github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
-github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
-github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
+github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro=
+github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
+github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
-github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA=
+github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
+github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
 github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
 github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
 github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
@@ -37,15 +35,15 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
 github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
 github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -57,14 +55,12 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
 github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
-github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@@ -74,8 +70,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -83,23 +79,22 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
-github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
-github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/onsi/ginkgo/v2 v2.14.0 h1:vSmGj2Z5YPb9JwCWT6z6ihcUvDhuXLc3sJiqd3jMKAY=
+github.com/onsi/ginkgo/v2 v2.14.0/go.mod h1:JkUdW7JkN0V6rFvsHcJ478egV3XH9NxpD27Hal/PhZw=
+github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
+github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
-github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
-github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
-github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
-github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
-github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
-github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg=
-github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
+github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk=
+github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA=
+github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
 github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
 github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
@@ -118,55 +113,39 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
-go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
-go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
-go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
+go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
+go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
 golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
 golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
 golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
-golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8=
-golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
+golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -177,12 +156,10 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
 golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -196,7 +173,6 @@ google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID
 google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
 google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -209,37 +185,37 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.28.8 h1:G0/G7yX1puRAcon/+XPLsKXZ9A5L7Ds6oKbDIe027xw=
-k8s.io/api v0.28.8/go.mod h1:rU8f1t9CNUAXlk/1j/wMJ7XnaxkR1g1AlZGQAOOL+sw=
-k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08=
-k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc=
-k8s.io/apimachinery v0.28.8 h1:hi/nrxHwk4QLV+W/SHve1bypTE59HCDorLY1stBIxKQ=
-k8s.io/apimachinery v0.28.8/go.mod h1:cBnwIM3fXoRo28SqbV/Ihxf/iviw85KyXOrzxvZQ83U=
-k8s.io/client-go v0.28.8 h1:TE59Tjd87WKvS2FPBTfIKLFX0nQJ4SSHsnDo5IHjgOw=
-k8s.io/client-go v0.28.8/go.mod h1:uDVQ/rPzWpWIy40c6lZ4mUwaEvRWGnpoqSO4FM65P3o=
-k8s.io/code-generator v0.28.8 h1:hpm1UTuu+aKdmzrRaSoR/3jkbTxyWO+Cehrc1fusjAA=
-k8s.io/code-generator v0.28.8/go.mod h1:3UVI3rmoCGzESkcYbqyhXBES9wQLycOK4VtiwgsPGG4=
-k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI=
-k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8=
-k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08=
-k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
+k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0=
+k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/code-generator v0.29.3 h1:m7E25/t9R9NvejspO2zBdyu+/Gl0Z5m7dCRc680KS14=
+k8s.io/code-generator v0.29.3/go.mod h1:x47ofBhN4gxYFcxeKA1PYXeaPreAGaDN85Y/lNUsPoM=
+k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s=
+k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M=
+k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01 h1:pWEwq4Asjm4vjW7vcsmijwBhOr1/shsbSYiWXmNGlks=
+k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/controller-runtime v0.16.5 h1:yr1cEJbX08xsTW6XEIzT13KHHmIyX8Umvme2cULvFZw=
-sigs.k8s.io/controller-runtime v0.16.5/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
+k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/controller-runtime v0.17.2 h1:FwHwD1CTUemg0pW2otk7/U5/i5m2ymzvOXdbeGOUvw0=
+sigs.k8s.io/controller-runtime v0.17.2/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 sigs.k8s.io/scheduler-plugins v0.26.7 h1:GW7UN2cbqgdAWEjwmhM3iJFTVmhtC1jQ++UnUByYFyw=
 sigs.k8s.io/scheduler-plugins v0.26.7/go.mod h1:EUJPaj+L54KGwV0D018nfyfzjf5WLOM8uU+TOZpv9tI=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
 volcano.sh/apis v1.8.0 h1:TO9mxoqLMToBAEB195OPuiC3pnupqsUqfXVJroT7KEI=
 volcano.sh/apis v1.8.0/go.mod h1:h+xbUpkjfRaHjktAi8h+7JNnNahjwhRSgpN9FUUwNXQ=
diff --git a/hack/python-sdk/swagger.json b/hack/python-sdk/swagger.json
index cdf90b7b1c..673b5bc4b8 100644
--- a/hack/python-sdk/swagger.json
+++ b/hack/python-sdk/swagger.json
@@ -74,12 +74,10 @@
       "properties": {
         "lastTransitionTime": {
           "description": "Last time the condition transitioned from one status to another.",
-          "default": {},
           "$ref": "#/definitions/v1.Time"
         },
         "lastUpdateTime": {
           "description": "The last time this condition was updated.",
-          "default": {},
           "$ref": "#/definitions/v1.Time"
         },
         "message": {
@@ -609,7 +607,6 @@
         "minResources": {
           "type": "object",
           "additionalProperties": {
-            "default": {},
             "$ref": "#/definitions/.Quantity"
           }
         },
diff --git a/hack/swagger/go.mod b/hack/swagger/go.mod
index a75c06a26b..9b945aa488 100644
--- a/hack/swagger/go.mod
+++ b/hack/swagger/go.mod
@@ -4,22 +4,22 @@ go 1.20
 
 require (
 	github.com/kubeflow/training-operator v0.0.0-00010101000000-000000000000
-	k8s.io/klog/v2 v2.100.1
-	k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9
+	k8s.io/klog/v2 v2.110.1
+	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 )
 
 replace github.com/kubeflow/training-operator => ../../
 
 require (
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/go-logr/logr v1.2.4 // indirect
+	github.com/go-logr/logr v1.4.1 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 	github.com/go-openapi/jsonreference v0.20.2 // indirect
 	github.com/go-openapi/swag v0.22.3 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.5.9 // indirect
+	github.com/google/go-cmp v0.6.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
@@ -28,16 +28,16 @@ require (
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/sirupsen/logrus v1.9.0 // indirect
 	golang.org/x/net v0.19.0 // indirect
-	golang.org/x/sys v0.15.0 // indirect
+	golang.org/x/sys v0.16.0 // indirect
 	golang.org/x/text v0.14.0 // indirect
 	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/api v0.28.8 // indirect
-	k8s.io/apimachinery v0.28.8 // indirect
-	k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect
-	sigs.k8s.io/controller-runtime v0.16.5 // indirect
+	k8s.io/api v0.29.3 // indirect
+	k8s.io/apimachinery v0.29.3 // indirect
+	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
+	sigs.k8s.io/controller-runtime v0.17.2 // indirect
 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 )
diff --git a/hack/swagger/go.sum b/hack/swagger/go.sum
index 71bf3e2498..b7297be7cb 100644
--- a/hack/swagger/go.sum
+++ b/hack/swagger/go.sum
@@ -8,6 +8,8 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr
 github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
 github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
 github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
 github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
@@ -26,6 +28,7 @@ github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYu
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -90,6 +93,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
 golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
@@ -122,20 +126,27 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 k8s.io/api v0.28.2 h1:9mpl5mOb6vXZvqbQmankOfPIGiudghwCoLl1EYfUZbw=
 k8s.io/api v0.28.2/go.mod h1:RVnJBsjU8tcMq7C3iaRSGMeaKt2TWEUXcpIt/90fjEg=
 k8s.io/api v0.28.8/go.mod h1:rU8f1t9CNUAXlk/1j/wMJ7XnaxkR1g1AlZGQAOOL+sw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
 k8s.io/apimachinery v0.28.2 h1:KCOJLrc6gu+wV1BYgwik4AF4vXOlVJPdiqn0yAWWwXQ=
 k8s.io/apimachinery v0.28.2/go.mod h1:RdzF87y/ngqk9H4z3EL2Rppv5jj95vGS/HaFXrLDApU=
 k8s.io/apimachinery v0.28.8/go.mod h1:cBnwIM3fXoRo28SqbV/Ihxf/iviw85KyXOrzxvZQ83U=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
 k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
 k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
 k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
 k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
 k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
 k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 sigs.k8s.io/controller-runtime v0.16.2 h1:mwXAVuEk3EQf478PQwQ48zGOXvW27UJc8NHktQVuIPU=
 sigs.k8s.io/controller-runtime v0.16.2/go.mod h1:vpMu3LpI5sYWtujJOa2uPK61nB5rbwlN7BAB8aSLvGU=
 sigs.k8s.io/controller-runtime v0.16.5/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+sigs.k8s.io/controller-runtime v0.17.2/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
 sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
diff --git a/manifests/base/crds/kubeflow.org_mpijobs.yaml b/manifests/base/crds/kubeflow.org_mpijobs.yaml
index d881f66e58..7938cd0797 100644
--- a/manifests/base/crds/kubeflow.org_mpijobs.yaml
+++ b/manifests/base/crds/kubeflow.org_mpijobs.yaml
@@ -324,8 +324,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -371,6 +372,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -471,8 +494,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -517,6 +541,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -612,8 +658,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -659,6 +706,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -759,8 +828,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -805,6 +875,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1177,6 +1269,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1277,6 +1382,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2532,6 +2650,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2632,6 +2763,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3892,6 +4036,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3992,6 +4149,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6003,34 +6173,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6109,6 +6251,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -6516,6 +6665,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/manifests/base/crds/kubeflow.org_mxjobs.yaml b/manifests/base/crds/kubeflow.org_mxjobs.yaml
index 1ad65be3aa..ead44a5576 100644
--- a/manifests/base/crds/kubeflow.org_mxjobs.yaml
+++ b/manifests/base/crds/kubeflow.org_mxjobs.yaml
@@ -321,8 +321,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -368,6 +369,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -468,8 +491,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -514,6 +538,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -609,8 +655,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -656,6 +703,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -756,8 +825,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -802,6 +872,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1174,6 +1266,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1274,6 +1379,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2529,6 +2647,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2629,6 +2760,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3889,6 +4033,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3989,6 +4146,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6000,34 +6170,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6106,6 +6248,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -6513,6 +6662,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/manifests/base/crds/kubeflow.org_paddlejobs.yaml b/manifests/base/crds/kubeflow.org_paddlejobs.yaml
index e59a266448..ee07b19763 100644
--- a/manifests/base/crds/kubeflow.org_paddlejobs.yaml
+++ b/manifests/base/crds/kubeflow.org_paddlejobs.yaml
@@ -802,8 +802,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -849,6 +850,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -949,8 +972,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -995,6 +1019,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1090,8 +1136,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -1137,6 +1184,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -1237,8 +1306,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -1283,6 +1353,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1655,6 +1747,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1755,6 +1860,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3010,6 +3128,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3110,6 +3241,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4370,6 +4514,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4470,6 +4627,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6481,34 +6651,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6587,6 +6729,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -6994,6 +7143,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/manifests/base/crds/kubeflow.org_pytorchjobs.yaml b/manifests/base/crds/kubeflow.org_pytorchjobs.yaml
index 6905bd83ba..5286139833 100644
--- a/manifests/base/crds/kubeflow.org_pytorchjobs.yaml
+++ b/manifests/base/crds/kubeflow.org_pytorchjobs.yaml
@@ -839,8 +839,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -886,6 +887,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -986,8 +1009,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -1032,6 +1056,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1127,8 +1173,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -1174,6 +1221,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -1274,8 +1343,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -1320,6 +1390,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1692,6 +1784,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1792,6 +1897,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3047,6 +3165,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3147,6 +3278,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4407,6 +4551,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4507,6 +4664,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6518,34 +6688,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6624,6 +6766,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -7031,6 +7180,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/manifests/base/crds/kubeflow.org_tfjobs.yaml b/manifests/base/crds/kubeflow.org_tfjobs.yaml
index 85af13603e..c00c720a2e 100644
--- a/manifests/base/crds/kubeflow.org_tfjobs.yaml
+++ b/manifests/base/crds/kubeflow.org_tfjobs.yaml
@@ -388,8 +388,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -435,6 +436,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -535,8 +558,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -581,6 +605,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -676,8 +722,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -723,6 +770,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -823,8 +892,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -869,6 +939,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1241,6 +1333,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1341,6 +1446,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2596,6 +2714,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2696,6 +2827,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3956,6 +4100,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4056,6 +4213,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6067,34 +6237,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6173,6 +6315,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -6580,6 +6729,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/manifests/base/crds/kubeflow.org_xgboostjobs.yaml b/manifests/base/crds/kubeflow.org_xgboostjobs.yaml
index 66f14b9dba..9553e3b0a3 100644
--- a/manifests/base/crds/kubeflow.org_xgboostjobs.yaml
+++ b/manifests/base/crds/kubeflow.org_xgboostjobs.yaml
@@ -379,8 +379,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -426,6 +427,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -526,8 +549,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -572,6 +596,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -667,8 +713,9 @@ spec:
                                               weight.
                                             properties:
                                               labelSelector:
-                                                description: A label query over a
-                                                  set of resources, in this case pods.
+                                                description: |-
+                                                  A label query over a set of resources, in this case pods.
+                                                  If it's null, this PodAffinityTerm matches with no Pods.
                                                 properties:
                                                   matchExpressions:
                                                     description: matchExpressions
@@ -714,6 +761,28 @@ spec:
                                                     type: object
                                                 type: object
                                                 x-kubernetes-map-type: atomic
+                                              matchLabelKeys:
+                                                description: |-
+                                                  MatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
+                                              mismatchLabelKeys:
+                                                description: |-
+                                                  MismatchLabelKeys is a set of pod label keys to select which pods will
+                                                  be taken into consideration. The keys are used to lookup values from the
+                                                  incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                                  to select the group of existing pods which pods will be taken into consideration
+                                                  for the incoming pod's pod (anti) affinity.
+                                                items:
+                                                  type: string
+                                                type: array
+                                                x-kubernetes-list-type: atomic
                                               namespaceSelector:
                                                 description: |-
                                                   A label query over the set of namespaces that the term applies to.
@@ -814,8 +883,9 @@ spec:
                                           a pod of the set of pods is running
                                         properties:
                                           labelSelector:
-                                            description: A label query over a set
-                                              of resources, in this case pods.
+                                            description: |-
+                                              A label query over a set of resources, in this case pods.
+                                              If it's null, this PodAffinityTerm matches with no Pods.
                                             properties:
                                               matchExpressions:
                                                 description: matchExpressions is a
@@ -860,6 +930,28 @@ spec:
                                                 type: object
                                             type: object
                                             x-kubernetes-map-type: atomic
+                                          matchLabelKeys:
+                                            description: |-
+                                              MatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key in (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
+                                          mismatchLabelKeys:
+                                            description: |-
+                                              MismatchLabelKeys is a set of pod label keys to select which pods will
+                                              be taken into consideration. The keys are used to lookup values from the
+                                              incoming pod labels, those key-value labels are merged with `LabelSelector` as `key notin (value)`
+                                              to select the group of existing pods which pods will be taken into consideration
+                                              for the incoming pod's pod (anti) affinity.
+                                            items:
+                                              type: string
+                                            type: array
+                                            x-kubernetes-list-type: atomic
                                           namespaceSelector:
                                             description: |-
                                               A label query over the set of namespaces that the term applies to.
@@ -1232,6 +1324,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -1332,6 +1437,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2587,6 +2705,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -2687,6 +2818,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -3947,6 +4091,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -4047,6 +4204,19 @@ spec:
                                             required:
                                             - port
                                             type: object
+                                          sleep:
+                                            description: Sleep represents the duration
+                                              that the container should sleep before
+                                              being terminated.
+                                            properties:
+                                              seconds:
+                                                description: Seconds is the number
+                                                  of seconds to sleep.
+                                                format: int64
+                                                type: integer
+                                            required:
+                                            - seconds
+                                            type: object
                                           tcpSocket:
                                             description: |-
                                               Deprecated. TCPSocket is NOT supported as a LifecycleHandler and kept
@@ -6058,34 +6228,6 @@ spec:
                                                   status field of the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                                                 properties:
-                                                  claims:
-                                                    description: |-
-                                                      Claims lists the names of resources, defined in spec.resourceClaims,
-                                                      that are used by this container.
-
-
-                                                      This is an alpha field and requires enabling the
-                                                      DynamicResourceAllocation feature gate.
-
-
-                                                      This field is immutable. It can only be set for containers.
-                                                    items:
-                                                      description: ResourceClaim references
-                                                        one entry in PodSpec.ResourceClaims.
-                                                      properties:
-                                                        name:
-                                                          description: |-
-                                                            Name must match the name of one entry in pod.spec.resourceClaims of
-                                                            the Pod where this field is used. It makes that resource available
-                                                            inside a container.
-                                                          type: string
-                                                      required:
-                                                      - name
-                                                      type: object
-                                                    type: array
-                                                    x-kubernetes-list-map-keys:
-                                                    - name
-                                                    x-kubernetes-list-type: map
                                                   limits:
                                                     additionalProperties:
                                                       anyOf:
@@ -6164,6 +6306,13 @@ spec:
                                                   storageClassName is the name of the StorageClass required by the claim.
                                                   More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
                                                 type: string
+                                              volumeAttributesClassName:
+                                                description: |-
+                                                  volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim.
+                                                  If specified, the CSI driver will create or update the volume with the attributes defined
+                                                  in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName,
+                                                  it can be changed after the claim is created.
+                                                type: string
                                               volumeMode:
                                                 description: |-
                                                   volumeMode defines what type of volume is required by the claim.
@@ -6571,6 +6720,95 @@ spec:
                                           description: Projection that may be projected
                                             along with other supported volume types
                                           properties:
+                                            clusterTrustBundle:
+                                              description: |-
+                                                ClusterTrustBundle allows a pod to access the `.spec.trustBundle` field
+                                                of ClusterTrustBundle objects in an auto-updating file.
+
+
+                                                Alpha, gated by the ClusterTrustBundleProjection feature gate.
+
+
+                                                ClusterTrustBundle objects can either be selected by name, or by the
+                                                combination of signer name and a label selector.
+                                              properties:
+                                                labelSelector:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this label selector.  Only has
+                                                    effect if signerName is set.  Mutually-exclusive with name.  If unset,
+                                                    interpreted as "match nothing".  If set but empty, interpreted as "match
+                                                    everything".
+                                                  properties:
+                                                    matchExpressions:
+                                                      description: matchExpressions
+                                                        is a list of label selector
+                                                        requirements. The requirements
+                                                        are ANDed.
+                                                      items:
+                                                        description: |-
+                                                          A label selector requirement is a selector that contains values, a key, and an operator that
+                                                          relates the key and values.
+                                                        properties:
+                                                          key:
+                                                            description: key is the
+                                                              label key that the selector
+                                                              applies to.
+                                                            type: string
+                                                          operator:
+                                                            description: |-
+                                                              operator represents a key's relationship to a set of values.
+                                                              Valid operators are In, NotIn, Exists and DoesNotExist.
+                                                            type: string
+                                                          values:
+                                                            description: |-
+                                                              values is an array of string values. If the operator is In or NotIn,
+                                                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
+                                                              the values array must be empty. This array is replaced during a strategic
+                                                              merge patch.
+                                                            items:
+                                                              type: string
+                                                            type: array
+                                                        required:
+                                                        - key
+                                                        - operator
+                                                        type: object
+                                                      type: array
+                                                    matchLabels:
+                                                      additionalProperties:
+                                                        type: string
+                                                      description: |-
+                                                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+                                                        map is equivalent to an element of matchExpressions, whose key field is "key", the
+                                                        operator is "In", and the values array contains only "value". The requirements are ANDed.
+                                                      type: object
+                                                  type: object
+                                                  x-kubernetes-map-type: atomic
+                                                name:
+                                                  description: |-
+                                                    Select a single ClusterTrustBundle by object name.  Mutually-exclusive
+                                                    with signerName and labelSelector.
+                                                  type: string
+                                                optional:
+                                                  description: |-
+                                                    If true, don't block pod startup if the referenced ClusterTrustBundle(s)
+                                                    aren't available.  If using name, then the named ClusterTrustBundle is
+                                                    allowed not to exist.  If using signerName, then the combination of
+                                                    signerName and labelSelector is allowed to match zero
+                                                    ClusterTrustBundles.
+                                                  type: boolean
+                                                path:
+                                                  description: Relative path from
+                                                    the volume root to write the bundle.
+                                                  type: string
+                                                signerName:
+                                                  description: |-
+                                                    Select all ClusterTrustBundles that match this signer name.
+                                                    Mutually-exclusive with name.  The contents of all selected
+                                                    ClusterTrustBundles will be unified and deduplicated.
+                                                  type: string
+                                              required:
+                                              - path
+                                              type: object
                                             configMap:
                                               description: configMap information about
                                                 the configMap data to project
diff --git a/pkg/apis/kubeflow.org/v1/defaulting_utils.go b/pkg/apis/kubeflow.org/v1/defaulting_utils.go
index ed6717822b..5b3a670854 100644
--- a/pkg/apis/kubeflow.org/v1/defaulting_utils.go
+++ b/pkg/apis/kubeflow.org/v1/defaulting_utils.go
@@ -4,7 +4,7 @@ import (
 	"strings"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func getDefaultContainerIndex(spec *corev1.PodSpec, defaultContainerName string) int {
@@ -41,7 +41,7 @@ func setDefaultRestartPolicy(replicaSpec *ReplicaSpec, defaultRestartPolicy Rest
 
 func setDefaultReplicas(replicaSpec *ReplicaSpec, replicas int32) {
 	if replicaSpec != nil && replicaSpec.Replicas == nil {
-		replicaSpec.Replicas = pointer.Int32(replicas)
+		replicaSpec.Replicas = ptr.To[int32](replicas)
 	}
 }
 
diff --git a/pkg/apis/kubeflow.org/v1/openapi_generated.go b/pkg/apis/kubeflow.org/v1/openapi_generated.go
index c1a49e2ae5..4932ff386f 100644
--- a/pkg/apis/kubeflow.org/v1/openapi_generated.go
+++ b/pkg/apis/kubeflow.org/v1/openapi_generated.go
@@ -199,14 +199,12 @@ func schema_pkg_apis_kubefloworg_v1_JobCondition(ref common.ReferenceCallback) c
 					"lastUpdateTime": {
 						SchemaProps: spec.SchemaProps{
 							Description: "The last time this condition was updated.",
-							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
 						},
 					},
 					"lastTransitionTime": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Last time the condition transitioned from one status to another.",
-							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
 						},
 					},
@@ -1115,8 +1113,7 @@ func schema_pkg_apis_kubefloworg_v1_SchedulingPolicy(ref common.ReferenceCallbac
 								Allows: true,
 								Schema: &spec.Schema{
 									SchemaProps: spec.SchemaProps{
-										Default: map[string]interface{}{},
-										Ref:     ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
 									},
 								},
 							},
diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go
index 9683dba886..608cd3582d 100644
--- a/pkg/client/informers/externalversions/factory.go
+++ b/pkg/client/informers/externalversions/factory.go
@@ -40,6 +40,7 @@ type sharedInformerFactory struct {
 	lock             sync.Mutex
 	defaultResync    time.Duration
 	customResync     map[reflect.Type]time.Duration
+	transform        cache.TransformFunc
 
 	informers map[reflect.Type]cache.SharedIndexInformer
 	// startedInformers is used for tracking which informers have been started.
@@ -78,6 +79,14 @@ func WithNamespace(namespace string) SharedInformerOption {
 	}
 }
 
+// WithTransform sets a transform on all informers.
+func WithTransform(transform cache.TransformFunc) SharedInformerOption {
+	return func(factory *sharedInformerFactory) *sharedInformerFactory {
+		factory.transform = transform
+		return factory
+	}
+}
+
 // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
 func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
 	return NewSharedInformerFactoryWithOptions(client, defaultResync)
@@ -182,6 +191,7 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal
 	}
 
 	informer = newFunc(f.client, resyncPeriod)
+	informer.SetTransform(f.transform)
 	f.informers[informerType] = informer
 
 	return informer
diff --git a/pkg/util/train/train_util.go b/pkg/util/train/train_util.go
index cb5295c2c6..c6ca98b87b 100644
--- a/pkg/util/train/train_util.go
+++ b/pkg/util/train/train_util.go
@@ -16,7 +16,7 @@
 package train
 
 import (
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
 )
@@ -26,5 +26,5 @@ func IsRetryableExitCode(exitCode int32) bool {
 }
 
 func IsJobSuspended(runPolicy *kubeflowv1.RunPolicy) bool {
-	return runPolicy != nil && pointer.BoolDeref(runPolicy.Suspend, false)
+	return runPolicy != nil && ptr.Deref(runPolicy.Suspend, false)
 }


Test patch:
diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml
index e0962bd182..34118c86a2 100644
--- a/.github/workflows/integration-tests.yaml
+++ b/.github/workflows/integration-tests.yaml
@@ -16,7 +16,7 @@ jobs:
     # strategy:
     #   fail-fast: false
     #   matrix:
-    #     kubernetes-version: ["v1.26.14", "v1.27.11", "v1.28.7"]
+    #     kubernetes-version: ["v1.27.11", "v1.28.7", "v1.29.2"]
     #     gang-scheduler-name: ["none", "scheduler-plugins", "volcano"]
     # ```
     # The difference is that each combination is randomly assigned various Python versions
@@ -26,7 +26,7 @@ jobs:
       matrix:
         # TODO (tenzen-y): Add volcano.
         include:
-          - kubernetes-version: v1.26.14
+          - kubernetes-version: v1.29.2
             gang-scheduler-name: "none"
             python-version: "3.10"
           - kubernetes-version: v1.27.11
@@ -35,7 +35,7 @@ jobs:
           - kubernetes-version: v1.28.7
             gang-scheduler-name: "none"
             python-version: "3.8"
-          - kubernetes-version: v1.26.14
+          - kubernetes-version: v1.29.2
             gang-scheduler-name: "scheduler-plugins"
             python-version: "3.9"
           - kubernetes-version: v1.27.11
@@ -44,7 +44,7 @@ jobs:
           - kubernetes-version: v1.28.7
             gang-scheduler-name: "scheduler-plugins"
             python-version: "3.10"
-          - kubernetes-version: v1.26.14
+          - kubernetes-version: v1.29.2
             gang-scheduler-name: "volcano"
             python-version: "3.9"
           - kubernetes-version: v1.27.11
diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml
index 29914c5289..98d9e4ec93 100644
--- a/.github/workflows/unittests.yaml
+++ b/.github/workflows/unittests.yaml
@@ -18,7 +18,7 @@ jobs:
       fail-fast: false
       matrix:
         # Detail: `setup-envtest list`
-        kubernetes-version: ["1.26.1", "1.27.1", "1.28.3"]
+        kubernetes-version: ["1.27.1", "1.28.3", "1.29.1"]
 
     steps:
       - name: Check out code
diff --git a/pkg/apis/kubeflow.org/v1/mpi_defaults_test.go b/pkg/apis/kubeflow.org/v1/mpi_defaults_test.go
index 818c154d4a..8be47db29b 100644
--- a/pkg/apis/kubeflow.org/v1/mpi_defaults_test.go
+++ b/pkg/apis/kubeflow.org/v1/mpi_defaults_test.go
@@ -5,7 +5,7 @@ import (
 	"testing"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func expectedMPIJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy) *MPIJob {
@@ -17,7 +17,7 @@ func expectedMPIJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy)
 			},
 			MPIReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 				MPIJobReplicaTypeLauncher: {
-					Replicas:      pointer.Int32(1),
+					Replicas:      ptr.To[int32](1),
 					RestartPolicy: restartPolicy,
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
@@ -31,7 +31,7 @@ func expectedMPIJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy)
 					},
 				},
 				MPIJobReplicaTypeWorker: {
-					Replicas:      pointer.Int32(0),
+					Replicas:      ptr.To[int32](0),
 					RestartPolicy: restartPolicy,
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
diff --git a/pkg/apis/kubeflow.org/v1/mpi_validation_test.go b/pkg/apis/kubeflow.org/v1/mpi_validation_test.go
index f13b1b7df8..e42e242cb6 100644
--- a/pkg/apis/kubeflow.org/v1/mpi_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/mpi_validation_test.go
@@ -18,7 +18,7 @@ import (
 	"testing"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1MpiJobSpec(t *testing.T) {
@@ -71,7 +71,7 @@ func TestValidateV1MpiJobSpec(t *testing.T) {
 		{
 			MPIReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 				MPIJobReplicaTypeLauncher: &ReplicaSpec{
-					Replicas: pointer.Int32(2),
+					Replicas: ptr.To[int32](2),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
diff --git a/pkg/apis/kubeflow.org/v1/mxnet_defaults_test.go b/pkg/apis/kubeflow.org/v1/mxnet_defaults_test.go
index 5293938e82..11d4061f9a 100644
--- a/pkg/apis/kubeflow.org/v1/mxnet_defaults_test.go
+++ b/pkg/apis/kubeflow.org/v1/mxnet_defaults_test.go
@@ -19,7 +19,7 @@ import (
 	"testing"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func expectedMXNetJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy, replicas int32, portName string, port int32) *MXJob {
@@ -51,13 +51,13 @@ func expectedMXNetJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy
 				CleanPodPolicy: &cleanPodPolicy,
 			},
 			MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-				MXJobReplicaTypeWorker: &ReplicaSpec{
-					Replicas:      pointer.Int32(replicas),
+				MXJobReplicaTypeWorker: {
+					Replicas:      ptr.To[int32](replicas),
 					RestartPolicy: restartPolicy,
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
-								corev1.Container{
+								{
 									Name:  MXJobDefaultContainerName,
 									Image: testImage,
 									Ports: ports,
@@ -80,11 +80,11 @@ func TestSetDefaults_MXJob(t *testing.T) {
 			original: &MXJob{
 				Spec: MXJobSpec{
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
+						MXJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -101,12 +101,12 @@ func TestSetDefaults_MXJob(t *testing.T) {
 			original: &MXJob{
 				Spec: MXJobSpec{
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
+						MXJobReplicaTypeWorker: {
 							RestartPolicy: RestartPolicyOnFailure,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -123,12 +123,12 @@ func TestSetDefaults_MXJob(t *testing.T) {
 			original: &MXJob{
 				Spec: MXJobSpec{
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
-							Replicas: pointer.Int32(3),
+						MXJobReplicaTypeWorker: {
+							Replicas: ptr.To[int32](3),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -146,15 +146,15 @@ func TestSetDefaults_MXJob(t *testing.T) {
 			original: &MXJob{
 				Spec: MXJobSpec{
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
+						MXJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          MXJobDefaultPortName,
 													ContainerPort: MXJobDefaultPort,
 												},
@@ -174,15 +174,15 @@ func TestSetDefaults_MXJob(t *testing.T) {
 			original: &MXJob{
 				Spec: MXJobSpec{
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
+						MXJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          MXJobDefaultPortName,
 													ContainerPort: 9999,
 												},
@@ -205,11 +205,11 @@ func TestSetDefaults_MXJob(t *testing.T) {
 						CleanPodPolicy: CleanPodPolicyPointer(CleanPodPolicyAll),
 					},
 					MXReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						MXJobReplicaTypeWorker: &ReplicaSpec{
+						MXJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  MXJobDefaultContainerName,
 											Image: testImage,
 										},
diff --git a/pkg/apis/kubeflow.org/v1/mxnet_validation_test.go b/pkg/apis/kubeflow.org/v1/mxnet_validation_test.go
index afcc4742e5..447b319f85 100644
--- a/pkg/apis/kubeflow.org/v1/mxnet_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/mxnet_validation_test.go
@@ -19,13 +19,13 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1MXJob(t *testing.T) {
 	validMXReplicaSpecs := map[ReplicaType]*ReplicaSpec{
 		MXJobReplicaTypeScheduler: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyNever,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -37,7 +37,7 @@ func TestValidateV1MXJob(t *testing.T) {
 			},
 		},
 		MXJobReplicaTypeServer: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyNever,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -49,7 +49,7 @@ func TestValidateV1MXJob(t *testing.T) {
 			},
 		},
 		MXJobReplicaTypeWorker: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyNever,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
diff --git a/pkg/apis/kubeflow.org/v1/paddlepaddle_validation_test.go b/pkg/apis/kubeflow.org/v1/paddlepaddle_validation_test.go
index ceb180d179..cd52f78fa1 100644
--- a/pkg/apis/kubeflow.org/v1/paddlepaddle_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/paddlepaddle_validation_test.go
@@ -19,13 +19,13 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1PaddleJob(t *testing.T) {
 	validPaddleReplicaSpecs := map[ReplicaType]*ReplicaSpec{
 		PaddleJobReplicaTypeWorker: {
-			Replicas:      pointer.Int32(2),
+			Replicas:      ptr.To[int32](2),
 			RestartPolicy: RestartPolicyNever,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
diff --git a/pkg/apis/kubeflow.org/v1/pytorch_defaults_test.go b/pkg/apis/kubeflow.org/v1/pytorch_defaults_test.go
index a489b6eef5..9cf2423589 100644
--- a/pkg/apis/kubeflow.org/v1/pytorch_defaults_test.go
+++ b/pkg/apis/kubeflow.org/v1/pytorch_defaults_test.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/onsi/ginkgo/v2"
 	"github.com/onsi/gomega"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestSetElasticPolicy(t *testing.T) {
@@ -31,15 +31,15 @@ func TestSetElasticPolicy(t *testing.T) {
 						ElasticPolicy: &ElasticPolicy{},
 						PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 							PyTorchJobReplicaTypeWorker: {
-								Replicas: pointer.Int32(1),
+								Replicas: ptr.To[int32](1),
 							},
 						},
 					},
 				},
 			},
 			result: result{
-				expectedMinReplicas: pointer.Int32(1),
-				expectedMaxReplicas: pointer.Int32(1),
+				expectedMinReplicas: ptr.To[int32](1),
+				expectedMaxReplicas: ptr.To[int32](1),
 			},
 		},
 		{
@@ -48,20 +48,20 @@ func TestSetElasticPolicy(t *testing.T) {
 				job: &PyTorchJob{
 					Spec: PyTorchJobSpec{
 						ElasticPolicy: &ElasticPolicy{
-							MaxReplicas: pointer.Int32(1),
-							MinReplicas: pointer.Int32(1),
+							MaxReplicas: ptr.To[int32](1),
+							MinReplicas: ptr.To[int32](1),
 						},
 						PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 							PyTorchJobReplicaTypeWorker: {
-								Replicas: pointer.Int32(1),
+								Replicas: ptr.To[int32](1),
 							},
 						},
 					},
 				},
 			},
 			result: result{
-				expectedMinReplicas: pointer.Int32(1),
-				expectedMaxReplicas: pointer.Int32(1),
+				expectedMinReplicas: ptr.To[int32](1),
+				expectedMaxReplicas: ptr.To[int32](1),
 			},
 		},
 		{
@@ -70,20 +70,20 @@ func TestSetElasticPolicy(t *testing.T) {
 				job: &PyTorchJob{
 					Spec: PyTorchJobSpec{
 						ElasticPolicy: &ElasticPolicy{
-							MaxReplicas: pointer.Int32(1),
-							MinReplicas: pointer.Int32(1),
+							MaxReplicas: ptr.To[int32](1),
+							MinReplicas: ptr.To[int32](1),
 						},
 						PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 							PyTorchJobReplicaTypeWorker: {
-								Replicas: pointer.Int32(1),
+								Replicas: ptr.To[int32](1),
 							},
 						},
 					},
 				},
 			},
 			result: result{
-				expectedMinReplicas: pointer.Int32(1),
-				expectedMaxReplicas: pointer.Int32(1),
+				expectedMinReplicas: ptr.To[int32](1),
+				expectedMaxReplicas: ptr.To[int32](1),
 			},
 		},
 		{
@@ -92,20 +92,20 @@ func TestSetElasticPolicy(t *testing.T) {
 				job: &PyTorchJob{
 					Spec: PyTorchJobSpec{
 						ElasticPolicy: &ElasticPolicy{
-							MaxReplicas: pointer.Int32(1),
+							MaxReplicas: ptr.To[int32](1),
 							MinReplicas: nil,
 						},
 						PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 							PyTorchJobReplicaTypeWorker: {
-								Replicas: pointer.Int32(1),
+								Replicas: ptr.To[int32](1),
 							},
 						},
 					},
 				},
 			},
 			result: result{
-				expectedMinReplicas: pointer.Int32(1),
-				expectedMaxReplicas: pointer.Int32(1),
+				expectedMinReplicas: ptr.To[int32](1),
+				expectedMaxReplicas: ptr.To[int32](1),
 			},
 		},
 		{
@@ -115,19 +115,19 @@ func TestSetElasticPolicy(t *testing.T) {
 					Spec: PyTorchJobSpec{
 						ElasticPolicy: &ElasticPolicy{
 							MaxReplicas: nil,
-							MinReplicas: pointer.Int32(1),
+							MinReplicas: ptr.To[int32](1),
 						},
 						PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 							PyTorchJobReplicaTypeWorker: {
-								Replicas: pointer.Int32(1),
+								Replicas: ptr.To[int32](1),
 							},
 						},
 					},
 				},
 			},
 			result: result{
-				expectedMinReplicas: pointer.Int32(1),
-				expectedMaxReplicas: pointer.Int32(1),
+				expectedMinReplicas: ptr.To[int32](1),
+				expectedMaxReplicas: ptr.To[int32](1),
 			},
 		},
 	}
@@ -163,7 +163,7 @@ func TestSetDefaultNprocPerNode(t *testing.T) {
 				},
 				PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 					PyTorchJobReplicaTypeWorker: {
-						Replicas: pointer.Int32(1),
+						Replicas: ptr.To[int32](1),
 					},
 				},
 			},
@@ -179,7 +179,7 @@ func TestSetDefaultNprocPerNode(t *testing.T) {
 				ElasticPolicy: nil,
 				PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 					PyTorchJobReplicaTypeWorker: {
-						Replicas: pointer.Int32(1),
+						Replicas: ptr.To[int32](1),
 					},
 				},
 			},
diff --git a/pkg/apis/kubeflow.org/v1/pytorch_validation_test.go b/pkg/apis/kubeflow.org/v1/pytorch_validation_test.go
index 0b46da3742..1be8f9922e 100644
--- a/pkg/apis/kubeflow.org/v1/pytorch_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/pytorch_validation_test.go
@@ -19,13 +19,13 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1PyTorchJob(t *testing.T) {
 	validPyTorchReplicaSpecs := map[ReplicaType]*ReplicaSpec{
 		PyTorchJobReplicaTypeMaster: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyOnFailure,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -43,7 +43,7 @@ func TestValidateV1PyTorchJob(t *testing.T) {
 			},
 		},
 		PyTorchJobReplicaTypeWorker: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyOnFailure,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -163,7 +163,7 @@ func TestValidateV1PyTorchJob(t *testing.T) {
 				Spec: PyTorchJobSpec{
 					PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 						PyTorchJobReplicaTypeMaster: {
-							Replicas: pointer.Int32(2),
+							Replicas: ptr.To[int32](2),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
@@ -186,13 +186,13 @@ func TestValidateV1PyTorchJob(t *testing.T) {
 					Name: "test",
 				},
 				Spec: PyTorchJobSpec{
-					NprocPerNode: pointer.String("1"),
+					NprocPerNode: ptr.To("1"),
 					ElasticPolicy: &ElasticPolicy{
-						NProcPerNode: pointer.Int32(1),
+						NProcPerNode: ptr.To[int32](1),
 					},
 					PyTorchReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 						PyTorchJobReplicaTypeMaster: {
-							Replicas: pointer.Int32(2),
+							Replicas: ptr.To[int32](2),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
diff --git a/pkg/apis/kubeflow.org/v1/tensorflow_defaults_test.go b/pkg/apis/kubeflow.org/v1/tensorflow_defaults_test.go
index 171796883a..d77a0de2ad 100644
--- a/pkg/apis/kubeflow.org/v1/tensorflow_defaults_test.go
+++ b/pkg/apis/kubeflow.org/v1/tensorflow_defaults_test.go
@@ -19,7 +19,7 @@ import (
 	"testing"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func expectedTFJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy, portName string, port int32) *TFJob {
@@ -54,13 +54,13 @@ func expectedTFJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy, p
 				CleanPodPolicy: &cleanPodPolicy,
 			},
 			TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-				TFJobReplicaTypeWorker: &ReplicaSpec{
-					Replicas:      pointer.Int32(1),
+				TFJobReplicaTypeWorker: {
+					Replicas:      ptr.To[int32](1),
 					RestartPolicy: restartPolicy,
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
-								corev1.Container{
+								{
 									Name:  TFJobDefaultContainerName,
 									Image: testImage,
 									Ports: ports,
@@ -80,11 +80,11 @@ func TestSetTypeNames(t *testing.T) {
 		Template: corev1.PodTemplateSpec{
 			Spec: corev1.PodSpec{
 				Containers: []corev1.Container{
-					corev1.Container{
+					{
 						Name:  TFJobDefaultContainerName,
 						Image: testImage,
 						Ports: []corev1.ContainerPort{
-							corev1.ContainerPort{
+							{
 								Name:          TFJobDefaultPortName,
 								ContainerPort: TFJobDefaultPort,
 							},
@@ -126,12 +126,12 @@ func TestSetDefaultTFJob(t *testing.T) {
 			original: &TFJob{
 				Spec: TFJobSpec{
 					TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						TFJobReplicaTypeWorker: &ReplicaSpec{
+						TFJobReplicaTypeWorker: {
 							RestartPolicy: customRestartPolicy,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  TFJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
@@ -154,15 +154,15 @@ func TestSetDefaultTFJob(t *testing.T) {
 			original: &TFJob{
 				Spec: TFJobSpec{
 					TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						TFJobReplicaTypeWorker: &ReplicaSpec{
+						TFJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  TFJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          TFJobDefaultPortName,
 													ContainerPort: TFJobDefaultPort,
 												},
@@ -181,13 +181,13 @@ func TestSetDefaultTFJob(t *testing.T) {
 			original: &TFJob{
 				Spec: TFJobSpec{
 					TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						TFJobReplicaTypeWorker: &ReplicaSpec{
-							Replicas:      pointer.Int32(1),
+						TFJobReplicaTypeWorker: {
+							Replicas:      ptr.To[int32](1),
 							RestartPolicy: customRestartPolicy,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  TFJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -204,17 +204,17 @@ func TestSetDefaultTFJob(t *testing.T) {
 			original: &TFJob{
 				Spec: TFJobSpec{
 					TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						TFJobReplicaTypeWorker: &ReplicaSpec{
-							Replicas:      pointer.Int32(1),
+						TFJobReplicaTypeWorker: {
+							Replicas:      ptr.To[int32](1),
 							RestartPolicy: customRestartPolicy,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  TFJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          customPortName,
 													ContainerPort: customPort,
 												},
@@ -236,17 +236,17 @@ func TestSetDefaultTFJob(t *testing.T) {
 						CleanPodPolicy: CleanPodPolicyPointer(CleanPodPolicyAll),
 					},
 					TFReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						TFJobReplicaTypeWorker: &ReplicaSpec{
-							Replicas:      pointer.Int32(1),
+						TFJobReplicaTypeWorker: {
+							Replicas:      ptr.To[int32](1),
 							RestartPolicy: customRestartPolicy,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  TFJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          customPortName,
 													ContainerPort: customPort,
 												},
diff --git a/pkg/apis/kubeflow.org/v1/tensorflow_validation_test.go b/pkg/apis/kubeflow.org/v1/tensorflow_validation_test.go
index f1e3b0a1e6..db54308547 100644
--- a/pkg/apis/kubeflow.org/v1/tensorflow_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/tensorflow_validation_test.go
@@ -19,13 +19,13 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1TFJob(t *testing.T) {
 	validTFReplicaSpecs := map[ReplicaType]*ReplicaSpec{
 		TFJobReplicaTypeWorker: {
-			Replicas:      pointer.Int32(2),
+			Replicas:      ptr.To[int32](2),
 			RestartPolicy: RestartPolicyOnFailure,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
diff --git a/pkg/apis/kubeflow.org/v1/xgboost_defaults_test.go b/pkg/apis/kubeflow.org/v1/xgboost_defaults_test.go
index 2ee530fedd..4f1ddbc342 100644
--- a/pkg/apis/kubeflow.org/v1/xgboost_defaults_test.go
+++ b/pkg/apis/kubeflow.org/v1/xgboost_defaults_test.go
@@ -19,7 +19,7 @@ import (
 	"testing"
 
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func expectedXGBoostJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPolicy, replicas int32, portName string, port int32) *XGBoostJob {
@@ -51,13 +51,13 @@ func expectedXGBoostJob(cleanPodPolicy CleanPodPolicy, restartPolicy RestartPoli
 				CleanPodPolicy: &cleanPodPolicy,
 			},
 			XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-				XGBoostJobReplicaTypeWorker: &ReplicaSpec{
-					Replicas:      pointer.Int32(replicas),
+				XGBoostJobReplicaTypeWorker: {
+					Replicas:      ptr.To[int32](replicas),
 					RestartPolicy: restartPolicy,
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
-								corev1.Container{
+								{
 									Name:  XGBoostJobDefaultContainerName,
 									Image: testImage,
 									Ports: ports,
@@ -80,11 +80,11 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 			original: &XGBoostJob{
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
+						XGBoostJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -101,12 +101,12 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 			original: &XGBoostJob{
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
+						XGBoostJobReplicaTypeWorker: {
 							RestartPolicy: RestartPolicyOnFailure,
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -123,12 +123,12 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 			original: &XGBoostJob{
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
-							Replicas: pointer.Int32(3),
+						XGBoostJobReplicaTypeWorker: {
+							Replicas: ptr.To[int32](3),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 										},
@@ -146,15 +146,15 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 			original: &XGBoostJob{
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
+						XGBoostJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          XGBoostJobDefaultPortName,
 													ContainerPort: XGBoostJobDefaultPort,
 												},
@@ -174,15 +174,15 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 			original: &XGBoostJob{
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
+						XGBoostJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 											Ports: []corev1.ContainerPort{
-												corev1.ContainerPort{
+												{
 													Name:          XGBoostJobDefaultPortName,
 													ContainerPort: 9999,
 												},
@@ -204,11 +204,11 @@ func TestSetDefaults_XGBoostJob(t *testing.T) {
 						CleanPodPolicy: CleanPodPolicyPointer(CleanPodPolicyAll),
 					},
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
-						XGBoostJobReplicaTypeWorker: &ReplicaSpec{
+						XGBoostJobReplicaTypeWorker: {
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{
-										corev1.Container{
+										{
 											Name:  XGBoostJobDefaultContainerName,
 											Image: testImage,
 										},
diff --git a/pkg/apis/kubeflow.org/v1/xgboost_validation_test.go b/pkg/apis/kubeflow.org/v1/xgboost_validation_test.go
index c64e70fdd1..7447b3c4da 100644
--- a/pkg/apis/kubeflow.org/v1/xgboost_validation_test.go
+++ b/pkg/apis/kubeflow.org/v1/xgboost_validation_test.go
@@ -19,13 +19,13 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 )
 
 func TestValidateV1XGBoostJob(t *testing.T) {
 	validXGBoostReplicaSpecs := map[ReplicaType]*ReplicaSpec{
 		XGBoostJobReplicaTypeMaster: {
-			Replicas:      pointer.Int32(1),
+			Replicas:      ptr.To[int32](1),
 			RestartPolicy: RestartPolicyNever,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -50,7 +50,7 @@ func TestValidateV1XGBoostJob(t *testing.T) {
 			},
 		},
 		XGBoostJobReplicaTypeWorker: {
-			Replicas:      pointer.Int32(2),
+			Replicas:      ptr.To[int32](2),
 			RestartPolicy: RestartPolicyExitCode,
 			Template: corev1.PodTemplateSpec{
 				Spec: corev1.PodSpec{
@@ -171,7 +171,7 @@ func TestValidateV1XGBoostJob(t *testing.T) {
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 						XGBoostJobReplicaTypeMaster: {
-							Replicas: pointer.Int32(2),
+							Replicas: ptr.To[int32](2),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{{
@@ -194,7 +194,7 @@ func TestValidateV1XGBoostJob(t *testing.T) {
 				Spec: XGBoostJobSpec{
 					XGBReplicaSpecs: map[ReplicaType]*ReplicaSpec{
 						XGBoostJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 							Template: corev1.PodTemplateSpec{
 								Spec: corev1.PodSpec{
 									Containers: []corev1.Container{{
diff --git a/pkg/common/util/util_test.go b/pkg/common/util/util_test.go
index 556e5210b2..67509d3f10 100644
--- a/pkg/common/util/util_test.go
+++ b/pkg/common/util/util_test.go
@@ -20,7 +20,7 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
 )
@@ -45,7 +45,7 @@ func TestDurationUntilExpireTime(t *testing.T) {
 		{
 			name: "succeeded job with remaining time 1s",
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(5),
+				TTLSecondsAfterFinished: ptr.To[int32](5),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				Conditions:     []kubeflowv1.JobCondition{newJobCondition(kubeflowv1.JobSucceeded)},
@@ -57,7 +57,7 @@ func TestDurationUntilExpireTime(t *testing.T) {
 		{
 			name: "failed job with remaining time 1s",
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(5),
+				TTLSecondsAfterFinished: ptr.To[int32](5),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				Conditions:     []kubeflowv1.JobCondition{newJobCondition(kubeflowv1.JobFailed)},
@@ -79,7 +79,7 @@ func TestDurationUntilExpireTime(t *testing.T) {
 		{
 			name: "succeeded job without remaining time",
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(5),
+				TTLSecondsAfterFinished: ptr.To[int32](5),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				Conditions:     []kubeflowv1.JobCondition{newJobCondition(kubeflowv1.JobSucceeded)},
@@ -91,7 +91,7 @@ func TestDurationUntilExpireTime(t *testing.T) {
 		{
 			name: "succeeded job with nil completion time error",
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(5),
+				TTLSecondsAfterFinished: ptr.To[int32](5),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				Conditions: []kubeflowv1.JobCondition{newJobCondition(kubeflowv1.JobSucceeded)},
diff --git a/pkg/controller.v1/mpi/mpijob_controller_test.go b/pkg/controller.v1/mpi/mpijob_controller_test.go
index 6fd66dff5d..2c63e484f2 100644
--- a/pkg/controller.v1/mpi/mpijob_controller_test.go
+++ b/pkg/controller.v1/mpi/mpijob_controller_test.go
@@ -27,7 +27,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/resource"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	ctrl "sigs.k8s.io/controller-runtime"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
@@ -115,7 +115,7 @@ var newMPIJob = newMPIJobWithLauncher
 func newMPIJobWithLauncher(name string, replicas *int32, pusPerReplica int64, resourceName string, startTime, completionTime *metav1.Time) *kubeflowv1.MPIJob {
 	mpiJob := newMPIJobOld(name, replicas, pusPerReplica, resourceName, startTime, completionTime)
 
-	mpiJob.Spec.MPIReplicaSpecs[kubeflowv1.MPIJobReplicaTypeLauncher].Replicas = pointer.Int32(1)
+	mpiJob.Spec.MPIReplicaSpecs[kubeflowv1.MPIJobReplicaTypeLauncher].Replicas = ptr.To[int32](1)
 
 	launcherContainers := mpiJob.Spec.MPIReplicaSpecs[kubeflowv1.MPIJobReplicaTypeLauncher].Template.Spec.Containers
 	for i := range launcherContainers {
@@ -158,7 +158,7 @@ var _ = Describe("MPIJob controller", func() {
 
 			for testName, testCase := range testCases {
 				mpiJob := newMPIJobWithLauncher("test-"+strings.ToLower(testName),
-					pointer.Int32(64), 1, testCase.gpu, &startTime, &completionTime)
+					ptr.To[int32](64), 1, testCase.gpu, &startTime, &completionTime)
 				Expect(isGPULauncher(mpiJob) == testCase.expected).To(BeTrue())
 			}
 		})
@@ -173,7 +173,7 @@ var _ = Describe("MPIJob controller", func() {
 
 			jobName := "test-launcher-succeeded"
 
-			mpiJob := newMPIJobWithLauncher(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJobWithLauncher(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 			Expect(testK8sClient.Create(ctx, mpiJob)).Should(Succeed())
 
 			launcher := reconciler.newLauncher(mpiJob, "kubectl-delivery", isGPULauncher(mpiJob))
@@ -217,7 +217,7 @@ var _ = Describe("MPIJob controller", func() {
 
 			jobName := "test-launcher-failed"
 
-			mpiJob := newMPIJobWithLauncher(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJobWithLauncher(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 			Expect(testK8sClient.Create(ctx, mpiJob)).Should(Succeed())
 
 			launcher := reconciler.newLauncher(mpiJob, "kubectl-delivery", isGPULauncher(mpiJob))
@@ -259,7 +259,7 @@ var _ = Describe("MPIJob controller", func() {
 
 			jobName := "test-launcher-succeeded2"
 
-			mpiJob := newMPIJobWithLauncher(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJobWithLauncher(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 			Expect(testK8sClient.Create(ctx, mpiJob)).Should(Succeed())
 
 			launcher := reconciler.newLauncher(mpiJob, "kubectl-delivery", isGPULauncher(mpiJob))
@@ -532,7 +532,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 			mpiJob.Spec.MPIReplicaSpecs[kubeflowv1.MPIJobReplicaTypeLauncher].Template.Spec.ServiceAccountName = launcherSaName
 			sa := newLauncherServiceAccount(mpiJob)
 			sa.OwnerReferences = nil
@@ -583,7 +583,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 
 			launcher := reconciler.newLauncher(mpiJob, "kubectl-delivery", isGPULauncher(mpiJob))
 			launcher.OwnerReferences = nil
@@ -613,7 +613,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(1), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](1), 1, gpuResourceName, &startTime, &completionTime)
 
 			for i := 0; i < 1; i++ {
 				name := fmt.Sprintf("%s-%d", mpiJob.Name+workerSuffix, i)
@@ -646,7 +646,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 
 			cm := newConfigMap(mpiJob, 64, isGPULauncher(mpiJob))
 			cm.OwnerReferences = nil
@@ -676,7 +676,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 
 			role := newLauncherRole(mpiJob, 64)
 			role.OwnerReferences = nil
@@ -706,7 +706,7 @@ var _ = Describe("MPIJob controller", func() {
 			startTime := metav1.Now()
 			completionTime := metav1.Now()
 
-			mpiJob := newMPIJob(jobName, pointer.Int32(64), 1, gpuResourceName, &startTime, &completionTime)
+			mpiJob := newMPIJob(jobName, ptr.To[int32](64), 1, gpuResourceName, &startTime, &completionTime)
 
 			rb := newLauncherRoleBinding(mpiJob)
 			rb.OwnerReferences = nil
@@ -780,7 +780,7 @@ var _ = Describe("MPIJob controller", func() {
 
 				jobName := "test-launcher-creation-" + strings.ToLower(testName)
 
-				mpiJob := newMPIJob(jobName, pointer.Int32(1), 1, gpuResourceName, &startTime, &completionTime)
+				mpiJob := newMPIJob(jobName, ptr.To[int32](1), 1, gpuResourceName, &startTime, &completionTime)
 				Expect(testK8sClient.Create(ctx, mpiJob)).Should(Succeed())
 
 				template := &mpiJob.Spec.MPIReplicaSpecs[kubeflowv1.MPIJobReplicaTypeLauncher].Template
@@ -831,7 +831,7 @@ var _ = Describe("MPIJob controller", func() {
 			Expect(testK8sClient.Create(ctx, ns)).Should(Succeed())
 
 			now := metav1.Now()
-			job = newMPIJob(name, pointer.Int32(1), 1, gpuResourceName, &now, &now)
+			job = newMPIJob(name, ptr.To[int32](1), 1, gpuResourceName, &now, &now)
 			job.Namespace = ns.Name
 			jobKey = client.ObjectKeyFromObject(job)
 			launcherKey = types.NamespacedName{
@@ -849,7 +849,7 @@ var _ = Describe("MPIJob controller", func() {
 		})
 		It("Shouldn't create resources if MPIJob is suspended", func() {
 			By("By creating a new MPIJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.MPIJob{}
@@ -957,7 +957,7 @@ var _ = Describe("MPIJob controller", func() {
 			By("Updating the MPIJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -1010,7 +1010,7 @@ var _ = Describe("MPIJob controller", func() {
 			By("Unsuspending the MPIJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
diff --git a/pkg/controller.v1/mxnet/mxjob_controller_test.go b/pkg/controller.v1/mxnet/mxjob_controller_test.go
index 3cbf2ef3f5..da2768fb3d 100644
--- a/pkg/controller.v1/mxnet/mxjob_controller_test.go
+++ b/pkg/controller.v1/mxnet/mxjob_controller_test.go
@@ -24,7 +24,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -72,7 +72,7 @@ var _ = Describe("MXJob controller", func() {
 			}
 			job.Spec.MXReplicaSpecs = map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 				kubeflowv1.MXJobReplicaTypeServer: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -92,7 +92,7 @@ var _ = Describe("MXJob controller", func() {
 					},
 				},
 				kubeflowv1.MXJobReplicaTypeScheduler: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -112,7 +112,7 @@ var _ = Describe("MXJob controller", func() {
 					},
 				},
 				kubeflowv1.MXJobReplicaTypeWorker: {
-					Replicas: pointer.Int32(2),
+					Replicas: ptr.To[int32](2),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -139,8 +139,8 @@ var _ = Describe("MXJob controller", func() {
 		})
 		It("Shouldn't create resources when MXJob is suspended; Should create resources once MXJob is unsuspended", func() {
 			By("By creating a new MXJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
-			job.Spec.MXReplicaSpecs[kubeflowv1.MXJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
+			job.Spec.MXReplicaSpecs[kubeflowv1.MXJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.MXJob{}
@@ -196,7 +196,7 @@ var _ = Describe("MXJob controller", func() {
 
 		It("Should delete resources after MXJob is suspended; Should resume MXJob after MXJob is unsuspended", func() {
 			By("By creating a new MXJob")
-			job.Spec.MXReplicaSpecs[kubeflowv1.MXJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.MXReplicaSpecs[kubeflowv1.MXJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.MXJob{}
@@ -272,7 +272,7 @@ var _ = Describe("MXJob controller", func() {
 			By("Updating the MXJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -339,7 +339,7 @@ var _ = Describe("MXJob controller", func() {
 			By("Unsuspending the MXJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
diff --git a/pkg/controller.v1/paddlepaddle/paddlepaddle_controller_test.go b/pkg/controller.v1/paddlepaddle/paddlepaddle_controller_test.go
index e13dacb9f8..493acf1ad5 100644
--- a/pkg/controller.v1/paddlepaddle/paddlepaddle_controller_test.go
+++ b/pkg/controller.v1/paddlepaddle/paddlepaddle_controller_test.go
@@ -24,7 +24,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -67,7 +67,7 @@ var _ = Describe("PaddleJob controller", func() {
 			}
 			job.Spec.PaddleReplicaSpecs = map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 				kubeflowv1.PaddleJobReplicaTypeMaster: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -87,7 +87,7 @@ var _ = Describe("PaddleJob controller", func() {
 					},
 				},
 				kubeflowv1.PaddleJobReplicaTypeWorker: {
-					Replicas: pointer.Int32(2),
+					Replicas: ptr.To[int32](2),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -185,8 +185,8 @@ var _ = Describe("PaddleJob controller", func() {
 		})
 		It("Shouldn't create resources if PaddleJob is suspended", func() {
 			By("By creating a new PaddleJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
-			job.Spec.PaddleReplicaSpecs[kubeflowv1.PaddleJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
+			job.Spec.PaddleReplicaSpecs[kubeflowv1.PaddleJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.PaddleJob{}
@@ -238,7 +238,7 @@ var _ = Describe("PaddleJob controller", func() {
 
 		It("Should delete resources after PaddleJob is suspended; Should resume PaddleJob after PaddleJob is unsuspended", func() {
 			By("By creating a new PaddleJob")
-			job.Spec.PaddleReplicaSpecs[kubeflowv1.PaddleJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.PaddleReplicaSpecs[kubeflowv1.PaddleJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.PaddleJob{}
@@ -307,7 +307,7 @@ var _ = Describe("PaddleJob controller", func() {
 			By("Updating the PaddleJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -368,7 +368,7 @@ var _ = Describe("PaddleJob controller", func() {
 			By("Unsuspending the PaddleJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
diff --git a/pkg/controller.v1/pytorch/elastic_test.go b/pkg/controller.v1/pytorch/elastic_test.go
index 9cf9dabdee..390376e316 100644
--- a/pkg/controller.v1/pytorch/elastic_test.go
+++ b/pkg/controller.v1/pytorch/elastic_test.go
@@ -20,7 +20,7 @@ import (
 	"github.com/onsi/ginkgo/v2"
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
 )
@@ -43,7 +43,7 @@ func TestElasticGenerate(t *testing.T) {
 				Spec: kubeflowv1.PyTorchJobSpec{
 					PyTorchReplicaSpecs: map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 						kubeflowv1.PyTorchJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 					},
 				},
@@ -56,12 +56,12 @@ func TestElasticGenerate(t *testing.T) {
 			job: &kubeflowv1.PyTorchJob{
 				Spec: kubeflowv1.PyTorchJobSpec{
 					ElasticPolicy: &kubeflowv1.ElasticPolicy{
-						MinReplicas: pointer.Int32(1),
-						MaxReplicas: pointer.Int32(3),
+						MinReplicas: ptr.To[int32](1),
+						MaxReplicas: ptr.To[int32](3),
 						RDZVBackend: &backendC10D,
-						RDZVPort:    pointer.Int32(1234),
-						RDZVHost:    pointer.String("localhost"),
-						RDZVID:      pointer.String("rdzv-id"),
+						RDZVPort:    ptr.To[int32](1234),
+						RDZVHost:    ptr.To("localhost"),
+						RDZVID:      ptr.To("rdzv-id"),
 						RDZVConf: []kubeflowv1.RDZVConf{
 							{
 								Key:   "rdzv-conf-name",
@@ -72,11 +72,11 @@ func TestElasticGenerate(t *testing.T) {
 								Value: "rdzv-conf-value-1",
 							},
 						},
-						MaxRestarts: pointer.Int32(3),
+						MaxRestarts: ptr.To[int32](3),
 					},
 					PyTorchReplicaSpecs: map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 						kubeflowv1.PyTorchJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 					},
 				},
diff --git a/pkg/controller.v1/pytorch/initcontainer_test.go b/pkg/controller.v1/pytorch/initcontainer_test.go
index 0a67c69d9f..732db75708 100644
--- a/pkg/controller.v1/pytorch/initcontainer_test.go
+++ b/pkg/controller.v1/pytorch/initcontainer_test.go
@@ -21,7 +21,7 @@ import (
 	"github.com/go-logr/logr"
 	"github.com/onsi/ginkgo/v2"
 	"github.com/onsi/gomega"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
 	"github.com/kubeflow/training-operator/pkg/config"
@@ -47,7 +47,7 @@ func TestInitContainer(t *testing.T) {
 				Spec: kubeflowv1.PyTorchJobSpec{
 					PyTorchReplicaSpecs: map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 						kubeflowv1.PyTorchJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 					},
 				},
@@ -62,10 +62,10 @@ func TestInitContainer(t *testing.T) {
 				Spec: kubeflowv1.PyTorchJobSpec{
 					PyTorchReplicaSpecs: map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 						kubeflowv1.PyTorchJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 						kubeflowv1.PyTorchJobReplicaTypeMaster: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 					},
 				},
@@ -80,10 +80,10 @@ func TestInitContainer(t *testing.T) {
 				Spec: kubeflowv1.PyTorchJobSpec{
 					PyTorchReplicaSpecs: map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 						kubeflowv1.PyTorchJobReplicaTypeWorker: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 						kubeflowv1.PyTorchJobReplicaTypeMaster: {
-							Replicas: pointer.Int32(1),
+							Replicas: ptr.To[int32](1),
 						},
 					},
 				},
diff --git a/pkg/controller.v1/pytorch/pytorchjob_controller_test.go b/pkg/controller.v1/pytorch/pytorchjob_controller_test.go
index 2065f9c410..e64dc65e03 100644
--- a/pkg/controller.v1/pytorch/pytorchjob_controller_test.go
+++ b/pkg/controller.v1/pytorch/pytorchjob_controller_test.go
@@ -26,7 +26,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/resource"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -71,7 +71,7 @@ var _ = Describe("PyTorchJob controller", func() {
 			job.Spec.NprocPerNode = nil
 			job.Spec.PyTorchReplicaSpecs = map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 				kubeflowv1.PyTorchJobReplicaTypeMaster: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -91,7 +91,7 @@ var _ = Describe("PyTorchJob controller", func() {
 					},
 				},
 				kubeflowv1.PyTorchJobReplicaTypeWorker: {
-					Replicas: pointer.Int32(2),
+					Replicas: ptr.To[int32](2),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -198,8 +198,8 @@ var _ = Describe("PyTorchJob controller", func() {
 
 		It("Shouldn't create resources if PyTorchJob is suspended", func() {
 			By("By creating a new PyTorchJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
-			job.Spec.PyTorchReplicaSpecs[kubeflowv1.PyTorchJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
+			job.Spec.PyTorchReplicaSpecs[kubeflowv1.PyTorchJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.PyTorchJob{}
@@ -251,7 +251,7 @@ var _ = Describe("PyTorchJob controller", func() {
 
 		It("Should delete resources after PyTorchJob is suspended; Should resume PyTorchJob after PyTorchJob is unsuspended", func() {
 			By("By creating a new PyTorchJob")
-			job.Spec.PyTorchReplicaSpecs[kubeflowv1.PyTorchJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.PyTorchReplicaSpecs[kubeflowv1.PyTorchJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.PyTorchJob{}
@@ -320,7 +320,7 @@ var _ = Describe("PyTorchJob controller", func() {
 			By("Updating the PyTorchJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -381,7 +381,7 @@ var _ = Describe("PyTorchJob controller", func() {
 			By("Unsuspending the PyTorchJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
@@ -493,7 +493,7 @@ var _ = Describe("PyTorchJob controller", func() {
 			}
 			job.Spec.PyTorchReplicaSpecs = map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 				kubeflowv1.PyTorchJobReplicaTypeWorker: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -623,7 +623,7 @@ var _ = Describe("PyTorchJob controller", func() {
 			By("Suspending PyTorchJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
diff --git a/pkg/controller.v1/tensorflow/job_test.go b/pkg/controller.v1/tensorflow/job_test.go
index f3aa7ff19f..c7e5a43c45 100644
--- a/pkg/controller.v1/tensorflow/job_test.go
+++ b/pkg/controller.v1/tensorflow/job_test.go
@@ -29,7 +29,7 @@ import (
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/intstr"
 	"k8s.io/apimachinery/pkg/util/uuid"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -531,12 +531,12 @@ var _ = Describe("TFJob controller", func() {
 			testCases := []testCase{
 				{
 					description: "succeeded job with TTL 3s",
-					tfJob:       tftestutil.NewTFJobWithCleanupJobDelay(0, 1, 0, pointer.Int32(3)),
+					tfJob:       tftestutil.NewTFJobWithCleanupJobDelay(0, 1, 0, ptr.To[int32](3)),
 					phase:       corev1.PodSucceeded,
 				},
 				{
 					description: "failed job with TTL 3s",
-					tfJob:       tftestutil.NewTFJobWithCleanupJobDelay(0, 1, 0, pointer.Int32(3)),
+					tfJob:       tftestutil.NewTFJobWithCleanupJobDelay(0, 1, 0, ptr.To[int32](3)),
 					phase:       corev1.PodFailed,
 				},
 			}
@@ -664,9 +664,9 @@ var _ = Describe("Test for controller.v1/common", func() {
 			wantErr:            false,
 		}),
 		Entry("Error is occurred since completionTime is nil", &cleanUpCases{
-			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, pointer.Int32(10)),
+			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, ptr.To[int32](10)),
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(10),
+				TTLSecondsAfterFinished: ptr.To[int32](10),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				CompletionTime: nil,
@@ -675,9 +675,9 @@ var _ = Describe("Test for controller.v1/common", func() {
 			wantErr:            true,
 		}),
 		Entry("TFJob is removed since exceeded TTL (TTL is 180s)", &cleanUpCases{
-			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, pointer.Int32(180)),
+			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, ptr.To[int32](180)),
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(180),
+				TTLSecondsAfterFinished: ptr.To[int32](180),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				CompletionTime: &metav1.Time{
@@ -688,9 +688,9 @@ var _ = Describe("Test for controller.v1/common", func() {
 			wantErr:            false,
 		}),
 		Entry("TFJob is removed since (TTL is 0s)", &cleanUpCases{
-			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, pointer.Int32(0)),
+			tfJob: tftestutil.NewTFJobWithCleanupJobDelay(1, 2, 0, ptr.To[int32](0)),
 			runPolicy: &kubeflowv1.RunPolicy{
-				TTLSecondsAfterFinished: pointer.Int32(0),
+				TTLSecondsAfterFinished: ptr.To[int32](0),
 			},
 			jobStatus: kubeflowv1.JobStatus{
 				CompletionTime: &now,
diff --git a/pkg/controller.v1/tensorflow/tfjob_controller_test.go b/pkg/controller.v1/tensorflow/tfjob_controller_test.go
index 1d6f1490e5..1d08aba0c9 100644
--- a/pkg/controller.v1/tensorflow/tfjob_controller_test.go
+++ b/pkg/controller.v1/tensorflow/tfjob_controller_test.go
@@ -25,7 +25,7 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/util/uuid"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -363,7 +363,7 @@ var _ = Describe("TFJob controller", func() {
 
 		It("Shouldn't create resources if TFJob is suspended", func() {
 			By("By creating a new TFJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.TFJob{}
@@ -483,7 +483,7 @@ var _ = Describe("TFJob controller", func() {
 			By("Updating the TFJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -544,7 +544,7 @@ var _ = Describe("TFJob controller", func() {
 			By("Unsuspending the TFJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
diff --git a/pkg/controller.v1/xgboost/xgboostjob_controller_test.go b/pkg/controller.v1/xgboost/xgboostjob_controller_test.go
index e5894eb385..7bf1ef8c84 100644
--- a/pkg/controller.v1/xgboost/xgboostjob_controller_test.go
+++ b/pkg/controller.v1/xgboost/xgboostjob_controller_test.go
@@ -24,7 +24,7 @@ import (
 	"k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
@@ -67,7 +67,7 @@ var _ = Describe("XGBoost controller", func() {
 			}
 			job.Spec.XGBReplicaSpecs = map[kubeflowv1.ReplicaType]*kubeflowv1.ReplicaSpec{
 				kubeflowv1.XGBoostJobReplicaTypeMaster: {
-					Replicas: pointer.Int32(1),
+					Replicas: ptr.To[int32](1),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -87,7 +87,7 @@ var _ = Describe("XGBoost controller", func() {
 					},
 				},
 				kubeflowv1.XGBoostJobReplicaTypeWorker: {
-					Replicas: pointer.Int32(2),
+					Replicas: ptr.To[int32](2),
 					Template: corev1.PodTemplateSpec{
 						Spec: corev1.PodSpec{
 							Containers: []corev1.Container{
@@ -114,8 +114,8 @@ var _ = Describe("XGBoost controller", func() {
 		})
 		It("Shouldn't create resources if XGBoostJob is suspended", func() {
 			By("By creating a new XGBoostJob with suspend=true")
-			job.Spec.RunPolicy.Suspend = pointer.Bool(true)
-			job.Spec.XGBReplicaSpecs[kubeflowv1.XGBoostJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.RunPolicy.Suspend = ptr.To(true)
+			job.Spec.XGBReplicaSpecs[kubeflowv1.XGBoostJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.XGBoostJob{}
@@ -167,7 +167,7 @@ var _ = Describe("XGBoost controller", func() {
 
 		It("Should delete resources after XGBoostJob is suspended; Should resume XGBoostJob after XGBoostJob is unsuspended", func() {
 			By("By creating a new XGBoostJob")
-			job.Spec.XGBReplicaSpecs[kubeflowv1.XGBoostJobReplicaTypeWorker].Replicas = pointer.Int32(1)
+			job.Spec.XGBReplicaSpecs[kubeflowv1.XGBoostJobReplicaTypeWorker].Replicas = ptr.To[int32](1)
 			Expect(testK8sClient.Create(ctx, job)).Should(Succeed())
 
 			created := &kubeflowv1.XGBoostJob{}
@@ -236,7 +236,7 @@ var _ = Describe("XGBoost controller", func() {
 			By("Updating the XGBoostJob with suspend=true")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(true)
+				created.Spec.RunPolicy.Suspend = ptr.To(true)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 
@@ -297,7 +297,7 @@ var _ = Describe("XGBoost controller", func() {
 			By("Unsuspending the XGBoostJob")
 			Eventually(func() error {
 				Expect(testK8sClient.Get(ctx, jobKey, created)).Should(Succeed())
-				created.Spec.RunPolicy.Suspend = pointer.Bool(false)
+				created.Spec.RunPolicy.Suspend = ptr.To(false)
 				return testK8sClient.Update(ctx, created)
 			}, testutil.Timeout, testutil.Interval).Should(Succeed())
 			Eventually(func() *metav1.Time {
diff --git a/pkg/util/train/train_util_test.go b/pkg/util/train/train_util_test.go
index e6bd292ecf..9e6f3c8b27 100644
--- a/pkg/util/train/train_util_test.go
+++ b/pkg/util/train/train_util_test.go
@@ -17,7 +17,7 @@ package train
 import (
 	"testing"
 
-	"k8s.io/utils/pointer"
+	"k8s.io/utils/ptr"
 
 	kubeflowv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1"
 )
@@ -74,13 +74,13 @@ func TestIsJobSuspended(t *testing.T) {
 		},
 		"suspend is false": {
 			runPolicy: &kubeflowv1.RunPolicy{
-				Suspend: pointer.Bool(false),
+				Suspend: ptr.To(false),
 			},
 			want: false,
 		},
 		"suspend is true": {
 			runPolicy: &kubeflowv1.RunPolicy{
-				Suspend: pointer.Bool(true),
+				Suspend: ptr.To(true),
 			},
 			want: true,
 		},