Generating Reference Documentation for kubectl Commands

    Note: This topic shows how to generate reference documentation for kubectl commands like and kubectl taint. This topic does not show how to generate the options reference page. For instructions on how to generate the kubectl options reference page, see Generating Reference Pages for Kubernetes Components and Tools.

    • You need a machine that is running Linux or macOS.

    • You need to have these tools installed:

    • Your PATH environment variable must include the required build tools, such as the Go binary and python.

    • You need to know how to create a pull request to a GitHub repository. This involves creating your own fork of the repository. For more information, see Work from a local clone.

    Setting up the local repositories

    Create a local workspace and set your GOPATH.

    Get a local clone of the following repositories:

    1. go get -u github.com/spf13/pflag
    2. go get -u github.com/spf13/cobra
    3. go get -u gopkg.in/yaml.v2
    4. go get -u github.com/kubernetes-sigs/reference-docs

    If you don’t already have the kubernetes/website repository, get it now:

    1. git clone https://github.com/<your-username>/website $GOPATH/src/github.com/<your-username>/website

    Get a clone of the kubernetes/kubernetes repository as k8s.io/kubernetes:

    1. git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes

    Remove the spf13 package from $GOPATH/src/k8s.io/kubernetes/vendor/github.com.

    1. rm -rf $GOPATH/src/k8s.io/kubernetes/vendor/github.com/spf13

    The kubernetes/kubernetes repository provides the kubectl and kustomize source code.

    • Determine the base directory of your clone of the kubernetes/kubernetes repository. For example, if you followed the preceding step to get the repository, your base directory is $GOPATH/src/k8s.io/kubernetes. The remaining steps refer to your base directory as <k8s-base>.

    • Determine the base directory of your clone of the repository. For example, if you followed the preceding step to get the repository, your base directory is $GOPATH/src/github.com/kubernetes-sigs/reference-docs. The remaining steps refer to your base directory as <rdocs-base>.

    In your local k8s.io/kubernetes repository, check out the branch of interest, and make sure it is up to date. For example, if you want to generate docs for Kubernetes 1.25.0, you could use these commands:

    If you do not need to edit the kubectl source code, follow the instructions for Setting build variables.

    Editing the kubectl source code

    The kubectl command reference documentation is automatically generated from the kubectl source code. If you want to change the reference documentation, the first step is to change one or more comments in the kubectl source code. Make the change in your local kubernetes/kubernetes repository, and then submit a pull request to the master branch of github.com/kubernetes/kubernetes.

    is an example of a pull request that fixes a typo in the kubectl source code.

    Monitor your pull request, and respond to reviewer comments. Continue to monitor your pull request until it is merged into the target branch of the kubernetes/kubernetes repository.

    Cherry picking your change into a release branch

    Your change is now in the master branch, which is used for development of the next Kubernetes release. If you want your change to appear in the docs for a Kubernetes version that has already been released, you need to propose that your change be cherry picked into the release branch.

    For example, suppose the master branch is being used to develop Kubernetes 1.26 and you want to backport your change to the release-1.25 branch. For instructions on how to do this, see .

    Monitor your cherry-pick pull request until it is merged into the release branch.

    Note: Proposing a cherry pick requires that you have permission to set a label and a milestone in your pull request. If you don’t have those permissions, you will need to work with someone who can set the label and milestone for you.

    Go to . On you command line, set the following environment variables.

    • Set K8S_ROOT to <k8s-base>.
    • Set K8S_WEBROOT to <web-base>.
    • Set K8S_RELEASE to the version of the docs you want to build. For example, if you want to build docs for Kubernetes 1.25, set K8S_RELEASE to 1.25.

    For example:

    1. export K8S_WEBROOT=$GOPATH/src/github.com/<your-username>/website
    2. export K8S_ROOT=$GOPATH/src/k8s.io/kubernetes
    3. export K8S_RELEASE=1.25

    Creating a versioned directory

    In the <rdocs-base> directory, run the following build target:

    1. cd <rdocs-base>
    2. make createversiondirs

    Checking out a release tag in k8s.io/kubernetes

    In your local <k8s-base> repository, checkout the branch that has the version of Kubernetes that you want to document. For example, if you want to generate docs for Kubernetes 1.25.0, check out the v1.25 tag. Make sure you local branch is up to date.

    1. git checkout v1.25.0
    2. git pull https://github.com/kubernetes/kubernetes v1.25.0

    Running the doc generation code

    In your local <rdocs-base>, run the copycli build target. The command runs as root:

    1. make copycli

    The copycli command cleans the temporary build directory, generates the kubectl command files, and copies the collated kubectl command reference HTML page and assets to <web-base>.

    Verify that these two files have been generated:

    Locate the copied files

    Verify that all generated files have been copied to your <web-base>:

    1. cd <web-base>
    2. git status

    The output should include the modified files:

    1. static/docs/reference/generated/kubectl/kubectl-commands.html
    2. static/docs/reference/generated/kubectl/navData.js

    The output may also include:

    1. static/docs/reference/generated/kubectl/scroll.js
    2. static/docs/reference/generated/kubectl/stylesheet.css
    3. static/docs/reference/generated/kubectl/tabvisibility.js
    4. static/docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css
    5. static/docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css
    6. static/docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js
    7. static/docs/reference/generated/kubectl/node_modules/jquery/dist/jquery.min.js
    8. static/docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css

    Locally test the documentation

    Build the Kubernetes documentation in your local <web-base>.

    1. cd <web-base>
    2. git submodule update --init --recursive --depth 1 # if not already done
    3. make container-serve

    View the .

    Adding and committing changes in kubernetes/website

    Run git add and git commit to commit the files.

    Create a pull request to the repository. Monitor your pull request, and respond to review comments as needed. Continue to monitor your pull request until it is merged.

    What’s next