Last active
September 10, 2021 21:35
-
-
Save superseb/9b6694903e8532dcd6431100f31b829d to your computer and use it in GitHub Desktop.
kubectl cluster diagnostic
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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