使用 kwok
管理节点和 Pod #
本文档将指导您如何使用 kwok
管理节点和 Pod。
节点管理 #
适用于所有节点 #
使用 --manage-all-nodes=true
参数,kwok
将负责集群中的所有节点,并维护它们与 API 服务器的心跳。通过这种方式,所有节点将表现得像真实节点一样,并保持在 Ready
状态。
适用于具有注释的特定节点 #
使用 --manage-nodes-with-annotation-selector=kwok.x-k8s.io/node=fake
参数,kwok
仅管理具有注释 kwok.x-k8s.io/node=fake
的节点。如果注释不存在,kwok
将不会管理该节点。
适用于具有标签的特定节点 #
使用 --manage-nodes-with-label-selector=kwok.x-k8s.io/node=fake
参数,kwok
仅管理具有标签 kwok.x-k8s.io/node=fake
的节点。如果标签不存在,kwok
将不会管理该节点。
适用于单个节点 #
使用 --manage-single-node=fake-node
参数,kwok
仅管理名为 fake-node
的节点。
创建节点 #
使用 kwok
,您可以通过简单地创建 v1.Node
对象来加入任意节点
状态可以是任何值。
kubectl apply -f - <<EOF
apiVersion: v1
kind: Node
metadata:
annotations:
node.alpha.kubernetes.io/ttl: "0"
kwok.x-k8s.io/node: fake
labels:
beta.kubernetes.io/arch: amd64
beta.kubernetes.io/os: linux
kubernetes.io/arch: amd64
kubernetes.io/hostname: kwok-node-0
kubernetes.io/os: linux
kubernetes.io/role: agent
node-role.kubernetes.io/agent: ""
type: kwok
name: kwok-node-0
spec:
taints: # Avoid scheduling actual running pods to fake Node
- effect: NoSchedule
key: kwok.x-k8s.io/node
value: fake
status:
allocatable:
cpu: 32
memory: 256Gi
pods: 110
capacity:
cpu: 32
memory: 256Gi
pods: 110
nodeInfo:
architecture: amd64
bootID: ""
containerRuntimeVersion: ""
kernelVersion: ""
kubeProxyVersion: fake
kubeletVersion: fake
machineID: ""
operatingSystem: linux
osImage: ""
systemUUID: ""
phase: Running
EOF
在创建节点后,kwok
将维护其心跳并将其保持在 ready
状态。
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kwok-node-0 Ready agent 5s fake 196.168.0.1 <none> <unknown> <unknown> <unknown>
创建 Pod #
现在,我们创建一些 Pod 以验证它们是否可以降落在之前创建的节点上
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: fake-pod
namespace: default
spec:
replicas: 10
selector:
matchLabels:
app: fake-pod
template:
metadata:
labels:
app: fake-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- kwok
# A taints was added to an automatically created Node.
# You can remove taints of Node or add this tolerations.
tolerations:
- key: "kwok.x-k8s.io/node"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: fake-container
image: fake-image
EOF
在创建 Pod 后,我们可以看到所有 Pod 都降落在该节点上并处于 Running
状态。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
fake-pod-59bb47845f-4vl9f 1/1 Running 0 5s 10.0.0.5 kwok-node-0 <none> <none>
fake-pod-59bb47845f-bc49m 1/1 Running 0 5s 10.0.0.4 kwok-node-0 <none> <none>
fake-pod-59bb47845f-cnjsv 1/1 Running 0 5s 10.0.0.7 kwok-node-0 <none> <none>
fake-pod-59bb47845f-g29wz 1/1 Running 0 5s 10.0.0.2 kwok-node-0 <none> <none>
fake-pod-59bb47845f-gxq88 1/1 Running 0 5s 10.0.0.10 kwok-node-0 <none> <none>
fake-pod-59bb47845f-pnzmn 1/1 Running 0 5s 10.0.0.9 kwok-node-0 <none> <none>
fake-pod-59bb47845f-sfkk4 1/1 Running 0 5s 10.0.0.3 kwok-node-0 <none> <none>
fake-pod-59bb47845f-vl2z5 1/1 Running 0 5s 10.0.0.8 kwok-node-0 <none> <none>
fake-pod-59bb47845f-vpfhv 1/1 Running 0 5s 10.0.0.6 kwok-node-0 <none> <none>
fake-pod-59bb47845f-wxn4b 1/1 Running 0 5s 10.0.0.1 kwok-node-0 <none> <none>
更新节点或 Pod 的规范 #
在 kwok
上下文中,节点和 Pod 只是纯 API 对象,因此可以随意更改其 API 规范以执行任何您想要的模拟或测试。