Skip to content

Instantly share code, notes, and snippets.

@superseb
Last active September 10, 2021 21:35
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save superseb/9b6694903e8532dcd6431100f31b829d to your computer and use it in GitHub Desktop.
Save superseb/9b6694903e8532dcd6431100f31b829d to your computer and use it in GitHub Desktop.
kubectl cluster diagnostic
#!/usr/bin/env bash
if [ $# -eq 0 ]; then
# Check if run on controlplane node, we can use that kubeconfig
if [ -f /opt/rke/etc/kubernetes/ssl/kube-controller-manager.pem ]; then
KUBECTLCERT=/opt/rke/etc/kubernetes/ssl/kube-controller-manager.pem
elif [ -f /etc/kubernetes/ssl/kube-controller-manager.pem ]; then
KUBECTLCERT=/etc/kubernetes/ssl/kube-controller-manager.pem
fi
if [ -f /opt/rke/etc/kubernetes/ssl/kube-controller-manager-key.pem ]; then
KUBECTLKEY=/opt/rke/etc/kubernetes/ssl/kube-controller-manager-key.pem
elif [ -f /etc/kubernetes/ssl/kube-controller-manager-key.pem ]; then
KUBECTLKEY=/etc/kubernetes/ssl/kube-controller-manager-key.pem
fi
if [ -f /opt/rke/etc/kubernetes/ssl/kube-ca.pem ]; then
KUBECTLCA=/opt/rke/etc/kubernetes/ssl/kube-ca.pem
elif [ -f /etc/kubernetes/ssl/kube-ca.pem ]; then
KUBECTLCA=/etc/kubernetes/ssl/kube-ca.pem
fi
KUBECONFIGPARAMS="--server=https://127.0.0.1:6443 --certificate-authority=${KUBECTLCA} --client-certificate=$KUBECTLCERT --client-key=$KUBECTLKEY"
fi
# Testing kubectl
RETVAL=`kubectl $KUBECONFIGPARAMS version > /dev/null 2>&1;echo $?`
if [ ${RETVAL} -ne 0 ]; then
echo "kubectl version does not exit with exit code 0"
kubectl $KUBECONFIGPARAMS version 2>&1
exit 1
fi
NAMESPACES=$(kubectl $KUBECONFIGPARAMS get ns -o custom-columns=NAME:.metadata.name --no-headers)
RESOURCES="crd nodes"
NSRESOURCES="deployment job daemonset secret configmap pod service"
# Version
kubectl $KUBECONFIGPARAMS version
# Get node status
kubectl $KUBECONFIGPARAMS get nodes -o custom-columns=NAME:.metadata.name,OS:.status.nodeInfo.osImage,KERNEL:.status.nodeInfo.kernelVersion,RUNTIME:.status.nodeInfo.containerRuntimeVersion,KUBELET:.status.nodeInfo.kubeletVersion,KUBEPROXY:.status.nodeInfo.kubeProxyVersion
kubectl $KUBECONFIGPARAMS get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
kubectl $KUBECONFIGPARAMS get nodes --show-labels
kubectl $KUBECONFIGPARAMS get nodes -o go-template='{{range .items}}{{$node := .}}{{range .status.conditions}}{{if ne .type "Ready"}}{{if eq .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{":"}}{{.status}}{{"\n"}}{{end}}{{else}}{{if ne .status "True"}}{{$node.metadata.name}}{{": "}}{{.type}}{{": "}}{{.status}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'
for RESOURCE in $RESOURCES; do
COUNT=$(kubectl $KUBECONFIGPARAMS get $RESOURCE --no-headers 2>/dev/null| wc -l)
echo "global:$RESOURCE:$COUNT"
done
for NSRESOURCE in $NSRESOURCES; do
COUNT=$(kubectl $KUBECONFIGPARAMS get $NSRESOURCE --all-namespaces --no-headers 2>/dev/null| wc -l)
echo "all-namespaces:$NSRESOURCE:$COUNT"
done
for NAMESPACE in $NAMESPACES; do
for NSRESOURCE in $NSRESOURCES; do
COUNT=$(kubectl $KUBECONFIGPARAMS -n $NAMESPACE get $NSRESOURCE --no-headers 2>/dev/null| wc -l)
echo "$NAMESPACE:$NSRESOURCE:$COUNT"
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment