nodegroup
NodeGroup operation Skill for the edgewize nodegroup project. Use this whenever the user wants to query, create, update, delete, bind, unbind, or tr…
它会碰到什么
逐条看命中(5 条严重或高危)
- 高
scripts/nodegroup_api.py:92cred-envreadtoken = args.token or os.environ.get("KUBESPHERE_TOKEN") - 高
scripts/nodegroup_api.py:245cred-envreadparser.add_argument("--host", default=os.environ.get("KUBESPHERE_HOST", DEFAULT_HOST), help="KubeSphere host URL") - 高
scripts/nodegroup_api.py:246cred-envreadparser.add_argument("--token", default=os.environ.get("KUBESPHERE_TOKEN"), help="Bearer token") - 高
scripts/nodegroup_api.py:252cred-envreadlogin.add_argument("--username", default=os.environ.get("KUBESPHERE_USERNAME", "admin")) - 高
scripts/nodegroup_api.py:253cred-envreadlogin.add_argument("--password", default=os.environ.get("KUBESPHERE_PASSWORD"))
这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。
技能内容
NodeGroup Operations
Purpose
Use this skill to perform real nodegroup-related operations in the edgewize-io/nodegroup environment.
This skill should help with:
- listing and inspecting
NodeGroup - creating, updating, patching, and deleting
NodeGroup - binding and unbinding nodes
- binding and unbinding namespaces
- binding and unbinding workspaces
- troubleshooting failed or incomplete nodegroup sync
- checking deployment config under
config/nodegroup
Prefer using the bundled script scripts/nodegroup_api.py for authenticated KAPI operations. Use kubectl only as a verification or fallback tool when the API path is unavailable.
Prerequisites
Use the bundled script:
scripts/nodegroup_api.py
Authentication model:
- logs in against
/oauth/token - stores token in
~/.kubesphere_token - uses
KUBESPHERE_HOST,KUBESPHERE_USERNAME,KUBESPHERE_PASSWORD, andKUBESPHERE_TOKEN
Setup:
cd scripts
pip install requests
export KUBESPHERE_HOST="http://<kubesphere-host>"
python nodegroup_api.py login --username admin --password <password>
Token helpers:
python nodegroup_api.py clear-cache
python nodegroup_api.py request GET /kapis/infra.kubesphere.io/v1alpha1/nodegroups
Source of Truth
When you need to confirm how an operation works, read these files first from the nodegroup source repository root:
pkg/kapis/infra/v1alpha1/register.gopkg/kapis/infra/v1alpha1/handler.gopkg/kapis/infra/v1alpha1/workspace_handler.gopkg/controller/nodegroup/nodegroup_controller.gopkg/constants/constants.go
Do not invent unsupported operations. Base the workflow on the source repository.
Main Resources
NodeGroup
Cluster-scoped resource.
Important fields:
spec.aliasspec.descriptionspec.managerstatus.state
Safe Operating Rules
- Read-only requests: prefer
python nodegroup_api.py ...query commands. - Write requests: perform only the exact requested change.
- Do not delete resources unless the user explicitly asks for deletion.
- For destructive or potentially disruptive actions such as node unbind or delete, confirm impact in your response if the request is ambiguous.
- When changing bindings, verify the current state first, then apply the change, then verify the result.
Preferred Operation Flow
For any write operation, follow this order:
- Inspect the current resource.
- Apply the minimal required change.
- Verify the resulting resource and any affected node, namespace, or workspace.
- If sync looks wrong, inspect labels, annotations, and controller behavior.
Core Commands
1. Query NodeGroups
python nodegroup_api.py nodegroup list
python nodegroup_api.py nodegroup get <name>
2. Create a NodeGroup
python nodegroup_api.py nodegroup create \
--name <nodegroup-name> \
--alias "<alias>" \
--description "<description>" \
--manager "<manager>"
python nodegroup_api.py nodegroup get <nodegroup-name>
3. Update or Patch a NodeGroup
Prefer patching for small changes.
python nodegroup_api.py nodegroup patch <name> \
--alias "<new-alias>" \
--description "<new-description>" \
--manager "<manager>"
python nodegroup_api.py nodegroup get <name>
For unsupported fields or ad hoc testing, use raw request mode.
For PATCH, send a JSON Patch array:
python nodegroup_api.py request PATCH /kapis/infra.kubesphere.io/v1alpha1/nodegroups/<name> '[{"op":"add","path":"/spec/alias","value":"<new-alias>"}]'
4. Delete a NodeGroup
Only do this when explicitly requested.
python nodegroup_api.py nodegroup delete <name>
If delete hangs, inspect finalizers:
python nodegroup_api.py nodegroup get <name>
Relevant finalizer:
finalizers.nodegroups.kubesphere.io
5. Bind or Unbind a Node
Node binding is implemented through nodegroup APIs and reflected with label:
apps.edgewize.io/nodegroup=<nodegroup-name>
Read current state:
kubectl get node <node-name> --show-labels
kubectl get nodes -l apps.edgewize.io/nodegroup=<nodegroup-name>
Operate through the bundled script:
python nodegroup_api.py bind node --nodegroup <nodegroup-name> --node <node-name>
python nodegroup_api.py unbind node --nodegroup <nodegroup-name> --node <node-name>
# Verify
kubectl get nodes -l apps.edgewize.io/nodegroup=<nodegroup-name>
kubectl get node <node-name> -o yaml
6. Bind or Unbind a Namespace
Read current state:
kubectl get ns <namespace> --show-labels
Operate through the bundled script:
python nodegroup_api.py bind namespace --nodegroup <nodegroup-name> --namespace <namespace>
python nodegroup_api.py unbind namespace --nodegroup <nodegroup-name> --namespace <namespace>
# Verify
python nodegroup_api.py nodegroup get <nodegroup-name>
kubectl get ns <namespace> -o yaml
7. Bind or Unbind a Workspace
python nodegroup_api.py bind workspace --nodegroup <nodegroup-name> --workspace <workspace>
python nodegroup_api.py unbind workspace --nodegroup <nodegroup-name> --workspace <workspace>
Troubleshooting Checklist
When an operation appears to succeed but state is wrong, check these in order:
- Does the resource exist?
- Does it still have a finalizer?
- Are node labels correct?
- Are namespace or workspace labels/annotations correct?
- Did IPPool annotations or labels fail to sync?
- Is the feature enabled in nodegroup config?
Useful checks:
python nodegroup_api.py nodegroup get <name>
kubectl get node <node-name> -o yaml
kubectl get ns <namespace> -o yaml
kubectl get cm nodegroup-config -n kubesphere-system -o yaml
kubectl get pods -n kubesphere-system | grep nodegroup
Important constants:
apps.edgewize.io/nodegroupapps.edgewize.io/namespace-nodegroup.infra.kubesphere.io/parentinfra.kubesphere.io/ippool-
Deployment and Config
If the user asks how nodegroup is deployed or configured, inspect these files from the nodegroup source repository root:
config/nodegroup/templates/nodegroup-apiserver.ymlconfig/nodegroup/templates/nodegroup-controller-manager.yamlconfig/nodegroup/templates/nodegroup-config.yamlconfig/nodegroup/values.yaml
ConfigMap key:
nodegroup.yaml
Notable config sections:
schedulingpolicyrbacippool
API-First Rule
If the user asks for an operation that already has a dedicated nodegroup API, prefer the bundled script and the dedicated nodegroup API semantics over manual label hacking.
Examples:
- node bind/unbind: use
python nodegroup_api.py bind node ... - namespace bind/unbind: use
python nodegroup_api.py bind namespace ... - workspace bind/unbind: use
python nodegroup_api.py bind workspace ... - ad hoc API call: use
python nodegroup_api.py request ...
Only fall back to direct manifest edits or label repair when the request is explicitly about low-level repair.
Response Style For This Skill
When using this skill:
- tell the user what operation you are performing
- verify before and after state
- mention any side effects or risks
- if blocked by missing cluster credentials or missing API access, say exactly what is missing
- if the operation is supported in code but cannot be executed in the current environment, provide the exact
nodegroup_api.pycommand or API path to run next
想直接用这个技能?
本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。