k8s常用命令速查
kubectl
设置当前 context 的默认 namespace
export CONTEXT=production
export NS=production
kubectl config set-context $CONTEXT --namespace=$NS
kubeconfig重命名
说明
kubeconfig重命名需要修改 clusters
、users
、contexts
3个指标
注意
macOS 的 sed -i
需要一个参数指定备份后缀(可以是空字符串,但空字符串后面不能直接跟文件名,必须写成 -i ''
),格式是 sed -i '' "s/old/new/g" 文件名
sed -i '' "s/name: $OLD_USERS/name: $NEW_USERS/g" $KUBE_CONFIG
sed -i '' "s/user: $OLD_USERS/user: $NEW_USERS/g" $KUBE_CONFIG
sed -i '' "s/name: $OLD_CLUSTERS/name: $NEW_CLUSTERS/g" $KUBE_CONFIG
sed -i '' "s/cluster: $OLD_CLUSTERS/cluster: $NEW_CLUSTERS/g" $KUBE_CONFIG
# 设置环境变量
export OLD_USERS=kubernetes-admin
export OLD_CLUSTERS=kubernetes
export OLD_CONTEXTS=kubernetes-admin@kubernetes
export NEW_USERS=rocky9
export NEW_CLUSTERS=rocky9
export NEW_CONTEXTS=rocky9
export KUBE_CONFIG=~/.kube/config
# 修改 contexts 名
kubectl config rename-context $OLD_CONTEXTS $NEW_CONTEXTS
# 修改 users 名
sed -i "s/name: $OLD_USERS/name: $NEW_USERS/g" $KUBE_CONFIG
sed -i "s/user: $OLD_USERS/user: $NEW_USERS/g" $KUBE_CONFIG
# 修改 cluster 名
sed -i "s/name: $OLD_CLUSTERS/name: $NEW_CLUSTERS/g" ~/.kube/config
sed -i "s/cluster: $OLD_CLUSTERS/cluster: $NEW_CLUSTERS/g" ~/.kube/config
修改完成后查看
$ kubecm ls
+------------+----------------------+----------------------+----------------------+-----------------------------------+---------------+
| CURRENT | NAME | CLUSTER | USER | SERVER | Namespace |
+============+======================+======================+======================+===================================+===============+
| * | rocky9 | rocky9 | rocky9 | https://10.0.0.10:6443 | monitor |
+------------+----------------------+----------------------+----------------------+-----------------------------------+---------------+
pod
强制删除pod
kubectl delete pod <pod-name> --grace-period=0 --force
查看pod包含的容器
说明
一般情况下,一个pod可能包含多个容器
通过自定义列
$ export POD_NAME='xxx'
$ kubectl get pod ${POD_NAME} -o 'custom-columns=NAME:.metadata.name,CONTAINERS:.spec.containers[*].name'
NAME CONTAINERS
prometheus-prometheus-server-75c956b9cc-w8l4p prometheus-prometheus-server-configmap-reload,prometheus-prometheus-server
通过 jq
命令
$ export POD_NAME='xxx'
$ kubectl get pod ${POD_NAME} -o json | jq '.spec.containers[].name'
"prometheus-prometheus-server-configmap-reload"
"prometheus-prometheus-server"
node
查看node节点拥有的镜像
kubectl get nodes -o json | jq -r '.items[] | "\(.metadata.name): \(.status.images[].names[])"'
查看node节点上调度的pod
export NODE_NAME=''
kubectl get pods --field-selector spec.nodeName=$NODE_NAME
查看某个node节点上被 oom kill
的pod
export NODE_NAME=''
(
echo -e "NODE_NAME\tPOD_NAME\tCONTAINER_NAME\tREASON\tFINISHED_AT"
kubectl get pods --field-selector spec.nodeName=$NODE_NAME -o json | \
jq -r '.items[] |
.metadata.name as $pod_name |
.spec.nodeName as $node_name |
.status.containerStatuses[]? |
select(.lastState.terminated.reason == "OOMKilled") |
"\($node_name)\t\($pod_name)\t\(.name)\tOOMKilled\t\(.lastState.terminated.finishedAt)"'
) | column -t