Skip to content

jossware/kubectl-node-provider-id

Repository files navigation

build

kubectl-node-provider-id

Sometimes you just need to know the instance ID of a node in your managed Kubernetes cluster. Maybe you need it to correlate some observability data or to use in another command or just for troubleshooting something. This plugin just makes it slightly easier to get that information when you need it.

Most cloud providers populate the spec.providerID field on Kubernetes Node resources in the format: <ProviderName>://<ProviderSpecificNodeID>. It is not visible in the default kubectl get nodes output, even with -o wide. You can get it with kubectl get nodes -o jsonpath='{.items[*].spec.providerID}' (or -o json | jq equivalent), but that's a bit unwieldy. Even if you do that, you may want to process it even further. For example, a providerID for a node in AWS might look like aws://us-west-2a/i-0a1b2c3d4e5f6g7h8. You might just care about the instance ID.

This plugin can display the provider ID in your desired format.

By default, it will display the entire provider ID.

$ kubectl node-provider-id
NODE                      PROVIDER ID
node-prov-control-plane   kind://podman/node-prov/node-prov-control-plane
node-prov-worker          kind://podman/node-prov/node-prov-worker
node-prov-worker2         kind://podman/node-prov/node-prov-worker2

Note

Use the --context (or -c) flag to target a different cluster.

You can use the --template (or -t) flag to format the output.

$ kubectl node-provider-id -t "{:last}"
NODE                      PROVIDER ID
node-prov-control-plane   node-prov-control-plane
node-prov-worker          node-prov-worker
node-prov-worker2         node-prov-worker2

In the above example, the {:last} template displays the last segment of the provider ID. See Templates for more information on how to use them.

You can use the --format (or -f) flag to format the output. It supports table (default), plain, JSON, and YAML output formats.

# plain
kubectl node-provider-id -oplain
kind://podman/node-prov/node-prov-control-plane
kind://podman/node-prov/node-prov-worker
kind://podman/node-prov/node-prov-worker

# json
$ kubectl node-provider-id -t "{:last}" -ojson
[{"name":"node-prov-control-plane","provider_id":"node-prov-control-plane"},{"name":"node-prov-worker","provider_id":"node-prov-worker"},{"name":"node-prov-w orker2","provider_id":"node-prov-worker2"}]

# yaml
$ kubectl node-provider-id -oyaml
- name: node-prov-control-plane
  provider_id: kind://podman/node-prov/node-prov-control-plane
- name: node-prov-worker
  provider_id: kind://podman/node-prov/node-prov-worker
- name: node-prov-worker2
  provider_id: kind://podman/node-prov/node-prov-worker2

Templates

You can use a template to define how you want information extracted from .spec.providerID. The plugin will parse the providerID value and make the discovered information available via tokens you can use in your templates. It splits the value of the ID (the part after the provider "protocol") by "/" and it is possible to access individual parts by index or by named helpers.

Example with an AWS Provider ID: "aws://us-west-2/i-0abcdef1234567890".

Token Value
{:provider} aws
{:last} i-0abcdef1234567890
{:first} us-west-2
{:all} us-west-2/i-0abcdef1234567890
{:url} aws://us-west-2/i-0abcdef1234567890
{0} us-west-2
{1} i-0abcdef1234567890
{:node} ip-192-168-1-123.ec2.internal

You can use other characters in your template, of course. For example, you could output a CSV of nodes and their instance IDs:

$ kubectl node-provider-id -t "{:node},{:last}" -oplain
ip-192-168-1-123.ec2.internal,i-0abcdef1234567890
ip-192-168-1-124.ec2.internal,i-00987654321fedcba
ip-192-168-1-125.ec2.internal,i-0a34567dcb2890ef1

Configuration

You can define the default template and output format in a yaml configuration file. For example:

cat << EOF > ~/.config/kubectl-node-provider-id.yaml
template: "{:last}"
format: plain
EOF

Now, the plugin will use the plain output format with the above template by default.

% kubectl node-provider-id
node-prov-control-plane
node-prov-worker
node-prov-worker2

More fun with .spec.providerID

If you want to propagate data from the provider ID into Node labels or annotations, check out node-provider-labeler.

About

kubectl plugin to view Node provider IDs

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors