如何在kubernetes中获取pod /绑定实例并修改pod数据



我有一个修改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可以实现"绑定的子资源"的信息。

现在,关于POD的数据修改首先,您需要记住,我们不应该编辑现有POD的规格,而不是以下这些。
*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/

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新