作为k8s玩家,kubectl是几乎每天都敲十几遍的搭档.但是你对你的搭档熟悉吗?
1. 去掉头部
kubectl通过get命令,可以获得很多信息:命名空间,服务,pod,节点等.
比如获取命名空间
kubectl get ns
NAME STATUS AGE
default Active 21d
docker Active 21d
kube-node-lease Active 21d
kube-public Active 21d
kube-system Active 21d
kubernetes-dashboard Active 21d
我们需要获取第一列,但是第一行并不需要,初级一些的做法直接grep排除掉
kubectl get ns|grep -v NAME|awk '{print $1}'
default
docker
kube-node-lease
kube-public
kube-system
kubernetes-dashboard
awk老手可能就直接跳过第一行了
kubectl get ns|awk 'NR>1{print $1}'
default
docker
kube-node-lease
kube-public
kube-system
kubernetes-dashboard
其实不需要,第一行,直接不显示好了
kubectl get ns --no-headers
default Active 21d
docker Active 21d
kube-node-lease Active 21d
kube-public Active 21d
kube-system Active 21d
kubernetes-dashboard Active 21d
见过太多脚本跟第一行较劲了,其实只要加个参数就好了。
2. 获取指定节点的所有pod
我们知道get时,加了-o wide参数,会多显示两列,分别是pod ip和node ip.
既然想取指定节点的所有pod,那就把所有pod列出来,然后再grep节点就好了。
kubectl get pod -o wide|grep docker-desktop
nginx-7bddbf796b-lvc4c 1/1 Running 0 20d 10.1.0.41 docker-desktop <none> <none>
redis-5bbcdf5c5c-sfdck 1/1 Running 0 20d 10.1.0.42 docker-desktop <none> <none>
优雅点怎么搞呢?
kubectl get pod -o wide --field-selector spec.nodeName=docker-desktop
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-7bddbf796b-lvc4c 1/1 Running 0 20d 10.1.0.41 docker-desktop <none> <none>
redis-5bbcdf5c5c-sfdck 1/1 Running 0 20d 10.1.0.42 docker-desktop <none> <none>
3. 获取指定label的节点
前面提到资源池了,同样资源池的节点的label是一样的,那么问题来了:怎么列出同一个资源池的节点?
这还不简单吗?直接--show-labels然后grep啊。非也非也
比如 有个节点的label是:role=front
正确的命令是:
kubectl get no -l role=front
k8s是用上了,你的玩法够k8ser吗?
最后留个作业:
用deployment部署了一组nginx,怎样列出所有的nginx pod?
nginx-7bddbf796b-lvc4c 1/1 Running 0 20d
kubectl get pod/svc/deploy -l app=nginx
网友评论