我有一个修改pod的项目,修改取决于podnodeName field
。我用下面的webhook
来拦截pod,但是它不能拦截kube-scheduler allocates the node
之后的update operation
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
...
...
rules:
- operations: ["UPDATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
然后我尝试使用拦截pods/binding
,但当我试图解析pod绑定时,我发现Binding
类型已被弃用
rules:
- operations: ["UPDATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods/binding"]
k8s.io/api/core/v1/types.go
// Binding ties one object to another; for example, a pod is bound to a node by a scheduler.
// Deprecated in 1.7, please use the bindings subresource of pods instead.
type Binding struct {
但是我没有找到the bindings subresource of pods
。这个资源在哪里以及如何解析它以获得相应的pod实例?
我非常感谢你的帮助。
我们在这里讨论的API结构如下所示:
APIResponsiveness: Top latency metric: {Resource:pods Subresource:binding Verb:POST …
"bindings subresource of pods"
引用子资源,如"podAffinity"
、"nodeAffinity"
、"nodeSelector"
等。查看这些url,了解更多关于绑定[core/v1]和哪个api可以实现"绑定的子资源"的信息。
*spec.containers[*].image
spec.initContainers[*].image
spec.activeDeadlineSeconds
spec.tolerations*
因此,要修改POD的属性,有两种方法:
1。执行kubectl edit pod <pod name>
命令。你将通过编辑器获得pod规范。继续编辑所需的属性。当保存它时,您将被拒绝,因为您正在尝试编辑POD上不可编辑的字段,但是将在临时位置创建包含您所做更改的文件副本,作为YAML文件。然后使用命令:kubectl delete pod <pod name>
删除已有的POD。最后,使用临时文件kubectl create -f <newly created yaml file with changes>
创建一个包含更改的新POD。
2。使用kubectl get pod <pod name> -o yaml > my-new-pod.yaml
将POD的定义提取到一个YAML文件使用编辑器(vi编辑器)修改导出的文件,以"vi my-new-pod.yaml
"保存删除当前PODkubectl delete pod <pod-name>
最后用编辑过的文件kubectl create -f my-new-pod.yaml
创建一个新的pod使用下面的URL作为指南。
警告:我们不能将正在运行的进程从一个系统移动到另一个系统,因此无法将已经创建的pod(其中的节点已经由调度器分配和调度)从一个节点移动到另一个节点。
下面是我要遵循的步骤:步骤1:使用端口
运行代理到本地主机节点kubectl proxy --port=8080 &
参考链接:https://linuxhint.com/execute-curl-with-kubectl/
步骤2:然后你可以curl到localhost:8080/api/v1进行测试
curl http://localhost:8080/api/v1/namespaces/default/pods
你可以引用API链接:https://kubernetes.io/docs/reference/using-api/api-concepts/
步骤3:可以修改pods的API子资源pods/$PODNAME/binding。您需要在http://$SERVER/api/v1/namespaces/dafault/pods/$PODNAME/binding上执行POST请求例如,在手动调度处于Pending Status的pod的情况下,我使用下面的
curl --header "Content-Type: application/json" --request POST --data '{"apiVersion": "v1", "kind": "Binding", "metadata": { "name": "nginx" }, "target": { "apiVersion": "v1", "kind": "Node", "name": "worker01" }}' http://localhost:8080/api/v1/namespaces/default/pods/nginx/binding
参考链接:https://www.waytoeasylearn.com/learn/kubernetes-manual-scheduling/
希望对你有帮助。