kubernetes集群管理常用命令一
我们把集群管理命令分为两个部分,第一部分介绍一些简单的,但是可能是非常常用的命令以及一些平时可能没有碰到的技巧.第二部分将综合前面介绍的工具通过示例来讲解一些更为复杂的命令.
列出集群中所有pod
使用kubectl get pods获取的一般是默认名称空间的信息(可以在配置文件中指定默认全称空间,如果没有指定则默认为default).如果想要获取获取非默认名称空间的pod,则需要指定-n(或者--namespace)参数.但是有些时候我们想要查看整个集群中所有名称空间的pod,则可以通过kubectl get pods --all-namespaces
有的童鞋可能会好奇,可不可能不选择全部,但是选择多个名称空间下的pod,其实也是可以的.以下示例同时选择了default和kube-system名称空间下的所有pod
[centos@k8s-master ~]$ kubectl get po --namespace={default,kube-system}
NAME READY STATUS RESTARTS AGE
coredns-78d4cf999f-8lpm6 1/1 Running 4 64d
coredns-78d4cf999f-hd7nn 1/1 Running 4 64d
etcd-k8s-master 1/1 Running 6 64d
jxing-nginx-ingress-controller-7d9d4fc99d-bksl2 1/1 Running 0 2d1h
jxing-nginx-ingress-default-backend-7875d67576-cmwz5 0/1 ImagePullBackOff 0 2d1h
kube-apiserver-k8s-master 1/1 Running 0 23d
kube-controller-manager-k8s-master 1/1 Running 7 64d
kube-flannel-ds-amd64-5w2d6 1/1 Running 1 2d2h
kube-flannel-ds-amd64-69vhm 1/1 Running 1 31h
kube-flannel-ds-amd64-bh5hw 1/1 Running 1 2d7h
kube-flannel-ds-amd64-csnqm 1/1 Running 0 47h
kube-flannel-ds-amd64-fpdx5 1/1 Running 6 64d
kube-flannel-ds-amd64-j6v7h 1/1 Running 4 3h50m
kube-flannel-ds-amd64-qsrxw 1/1 Running 1 46h
kube-proxy-7xcb7 1/1 Running 6 64d
kube-proxy-d4jxx 1/1 Running 2 2d7h
kube-proxy-ftjsk 1/1 Running 2 46h
kube-proxy-jrfxs 1/1 Running 5 3h50m
kube-proxy-kw4fw 1/1 Running 1 31h
kube-proxy-thzdp 1/1 Running 1 2d2h
kube-proxy-wrbmm 1/1 Running 0 47h
kube-scheduler-k8s-master 1/1 Running 9 64d
kubernetes-dashboard-6b8667558-dtn6r 1/1 Running 0 2d1h
tiller-deploy-6df646875f-tp26r 1/1 Running 0 2d1h
只列出资源的名称
在测试环境中,有时候我们可能想要把所有类型的资源全部删除.比如删除所有deployment.我们可以通过kubectl get deployment来列出所有的deployment,然后逐个删除.如果是全部删除的话,这样显然是低效的,并且往往因为名称拼写错误导致操作失败.在docker里们,我们想要删除全部运行的容器,可以通过docker ps -q来获取所有pod的id,然后通过循环来删除.其实在kubernetes里,可以通过kubectl get deployment -o=name仅仅输出名称,然后使用循环逐个删除.
列出包含特定标签的pod
有经验的童鞋都知道,受某个Deployment控制的一组pod的名称往往跟这个Deployment的名称有关系,往往是Deployment的名称加上一串hash.但是如果如果两个deployment名称很类似,我就不就太容易找出某个deployment所控制的pod.最为无助的是service和它选择的pod之间往往从表面上看不出关系的,如何知道一个service所控制.其实我们可以通过service里的labelselector选择的lable来过滤此service所控制的pod.
比如我有一个名为helloworld的service,我们使用kubectl describe service helloworld来查看它的信息
[centos@k8s-master ~]$ kubectl describe service helloworld
Name: helloworld
Namespace: default
Labels: run=helloworld
Annotations: field.cattle.io/publicEndpoints:
[{"addresses":["192.168.9.40"],"port":32001,"protocol":"TCP","serviceName":"default:helloworld","allNodes":true}]
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"run":"helloworld"},"name":"helloworld","namespace":"default"},...
Selector: app=helloworld
Type: NodePort
IP: 10.108.25.188
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32001/TCP
Endpoints: 10.244.2.30:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
它的labelSelector的值为app=helloworld.我们可以通过这个label来过滤pod
[centos@k8s-master ~]$ kubectl get pod -l=app=helloworld
NAME READY STATUS RESTARTS AGE
helloworld-6d6bdb66dd-ncwk5 1/1 Running 0 3h4m
其实,除了service以外,deployment,ReplicationController,ReplicaSet也可以通过类似方式选择,这样选择出的结果更为准确.
选择指定节点上的pod
有一定经验的童鞋可能会知道,使用kubectl get pods'时是不显示节点信息的,通过指定参数-o wide就可以展示出来pod所在的节点信息,然后便可以通过grep命令来过滤结果.比如我们想要查找k8s-node2`节点上的运行了哪些pod(节点名称可以自定义的,大家的不必是k8s-nodexxx这种形式)
[centos@k8s-master easymock]$ kubectl get po --all-namespaces -o wide|grep k8s-node2
cattle-system cattle-node-agent-djg2h 1/1 Running 2 2d8h 192.168.122.74 k8s-node2 <none> <none>
default consul-0 1/1 Running 0 2d2h 10.244.2.27 k8s-node2 <none> <none>
default consul-2 1/1 Running 0 2d2h 10.244.2.28 k8s-node2 <none> <none>
default helloworld-6d6bdb66dd-ncwk5 1/1 Running 0 3h48m 10.244.2.30 k8s-node2 <none> <none>
default stodagent-6f47976ccb-8fzmv 1/1 Running 0 2d2h 10.244.2.23 k8s-node2 <none> <none>
default stodagent-6f47976ccb-vf7kx 1/1 Running 0 2d2h 10.244.2.22 k8s-node2 <none> <none>
default trackingapi-gateway-dep-79bb86bb57-x9xzp 1/1 Running 0 2d2h 10.244.2.24 k8s-node2 <none> <none>
ingress-nginx nginx-ingress-controller-c7dcb4d44-rhp22 1/1 Running 0 2d2h 10.244.2.25 k8s-node2 <none> <none>
kube-system kube-flannel-ds-amd64-bh5hw 1/1 Running 1 2d8h 192.168.122.74 k8s-node2 <none> <none>
kube-system kube-proxy-d4jxx 1/1 Running 2 2d8h 192.168.122.74 k8s-node2 <none> <none>
kube-system tiller-deploy-6df646875f-tp26r 1/1 Running 0 2d2h 10.244.2.26 k8s-node2 <none> <none>
tekton-pipelines tekton-pipelines-webhook-79d8658cdc-2tp84 1/1 Running 0 2d2h 10.244.2.19 k8s-node2 <none> <none>
这是通过linux的grep命令来实现的,其实,kubectl也有着非常强大的过滤功能,我们可以对它字段选择过滤器feild selector,通过pod描述文件里的spec.nodeName来过滤指定节点上的pod.命令示例如下:
[centos@k8s-master easymock]$ kubectl get po --all-namespaces -o wide --field-selector=spec.nodeName=k8s-node2
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cattle-system cattle-node-agent-djg2h 1/1 Running 2 2d8h 192.168.122.74 k8s-node2 <none> <none>
default consul-0 1/1 Running 0 2d2h 10.244.2.27 k8s-node2 <none> <none>
default consul-2 1/1 Running 0 2d2h 10.244.2.28 k8s-node2 <none> <none>
default helloworld-6d6bdb66dd-ncwk5 1/1 Running 0 3h52m 10.244.2.30 k8s-node2 <none> <none>
default stodagent-6f47976ccb-8fzmv 1/1 Running 0 2d2h 10.244.2.23 k8s-node2 <none> <none>
default stodagent-6f47976ccb-vf7kx 1/1 Running 0 2d2h 10.244.2.22 k8s-node2 <none> <none>
default trackingapi-gateway-dep-79bb86bb57-x9xzp 1/1 Running 0 2d2h 10.244.2.24 k8s-node2 <none> <none>
ingress-nginx nginx-ingress-controller-c7dcb4d44-rhp22 1/1 Running 0 2d2h 10.244.2.25 k8s-node2 <none> <none>
kube-system kube-flannel-ds-amd64-bh5hw 1/1 Running 1 2d8h 192.168.122.74 k8s-node2 <none> <none>
kube-system kube-proxy-d4jxx 1/1 Running 2 2d8h 192.168.122.74 k8s-node2 <none> <none>
kube-system tiller-deploy-6df646875f-tp26r 1/1 Running 0 2d2h 10.244.2.26 k8s-node2 <none> <none>
tekton-pipelines tekton-pipelines-webhook-79d8658cdc-2tp84 1/1 Running 0 2d2h 10.244.2.19 k8s-node2 <none> <none>
列出所有状态不是运行中的Pod
有时候我们需要列出所有未在运行的pod,以便决定下一步要做什么行动.未运行的原因有很多,比如镜像未能正常拉取,pod无法被正常调度等,我们首先要把所有未运行的pod过滤出来.
[root@k8s-master helloworld]# kubectl get pod --field-selector=status.phase!=Running
NAME READY STATUS RESTARTS AGE
redis-cache-f87d8488c-4d9dl 0/1 ErrImagePull 0 4d4h
redis-cache-f87d8488c-gjxqj 0/1 ImagePullBackOff 0 20h
redis-cache-f87d8488c-v4zjx 0/1 ImagePullBackOff 0 4d4h
这里不同的是,前面我们使用的是等号来判断相等关系,其实也可以像这里使用(!=)来表示否定.
还有一点需要特别注意
phase=Running的pod并不全是正常运行的pod,要确认一个pod是正常运行的,必须.status.conditions里的Initialized,Ready,ContainersReady和PodScheduled几种类型的值必须全部是"true",也可以通过展示字段STATUS的值为Running
列出所有节点
我们通常都是和pod,service这些资源打交道,但是有些时候,我们也需要和节点打交道.可以使用kubectl get nodes来查看集群中的所有节点信息
查看node信息是通过
kubectl get命令,kubectl get的参数在这里同样适用.
node也是k8s的资源,我们可以通过kubectl describe+节点名称查看节点内存,cpu核数,以及该节点的压力等信息.
kubernetes集群管理常用命令一的更多相关文章
- 【Kubernetes】容器集群管理常用命令笔记
一.集群部署-查询集群状态 ①查询k8s master各组件健康状态: kubectl get componentstatus ②查询k8s node健康状态: kubectl get node 二. ...
- MongoDB集群管理常用命令
1.以admin身份登录yqtrack_gather01库: mongo 127.0.0.1:27017/yqtrack_gather01 -u username -p password --auth ...
- 美团点评Kubernetes集群管理实践
背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的”高峰“和”低谷“特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这对集群中心的资源弹性和可用性有非常高的要 ...
- ES集群检查常用命令
一.集群检查常用命令 查询集群状态命令: curl -XGET "http://ip:port/_cluster/health?pretty" 查询Es全局状态: curl -XG ...
- 使用kubectl管理Kubernetes(k8s)集群:常用命令,查看负载,命名空间namespace管理
目录 一.系统环境 二.前言 三.kubectl 3.1 kubectl语法 3.2 kubectl格式化输出 四.kubectl常用命令 五.查看kubernetes集群node节点和pod负载 5 ...
- Kubernetes集群管理工具kubectl命令技巧大全
一. kubectl概述 Kubectl是用于控制Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署. kubectl命令的语法如下 ...
- 052.Kubernetes集群管理-故障排错指南
一 故障指南 1.1 常见问题排障 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,常用如下查错方法: 查看Kubernetes对象的当前运行时信息,特别是与对象关联的Event事 ...
- kubernetes集群管理之通过jq来截取属性
系列目录 首先要声明,这里的jq并不是批前端框架里的jquery,而是一个处理json的命令行工具. jq工具相比yq,它更加成熟,功能也更加强大,主要表现在以下几个方面 支持递归查找(我点对我们平时 ...
- 基于Python+Django的Kubernetes集群管理平台
➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...
随机推荐
- 【bzoj2521】[Shoi2010]最小生成树 网络流最小割
题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...
- JS实现并集,交集和差集
var set1 = new Set([1,2,3]);var set2 = new Set([2,3,4]); 并集let union = new Set([...set1, ...set2]); ...
- docker基础——自定义镜像、创建私有仓库、查看 docker 运行状态
一.自定义镜像 1,案例1 要求:请自定义一个 docker 镜像,基于 hub.c.163.com/library/centos,要求创建出来的镜像在生成容器的时候,可以直接使用 ifconfig ...
- C语言实验报告二
实验一:第11次实验作业报告 题目:方阵循环右移 实验要求:将给定n×n方阵中的每个元素循环向右移m个位置,即将第0.1.⋯.n−1列变换为第n−m.n−m+1.⋯.n−1.0.1.⋯.n−m−1列. ...
- 长度rem的使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- PXC部署,配置,操作原理
参考:https://www.cnblogs.com/kevingrace/p/5685371.html?utm_source=itdadao&utm_medium=referra ...
- MAMP 10.10下启动报错解决方案
cd /Applications/MAMP/Library/binmv envvars _envvars
- 数据结构自己实现——queue
SeqQueue.h #define QueueSize 100 typedef char DataType; class SeqQueue { public: DataType data[Queue ...
- Codeforces Gym101572 B.Best Relay Team (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))
2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) 今日份的训练,题目难度4颗星,心态被打崩了,会的算法太少了,知 ...
- SSH命令总结
目录 一.ssh命令 二.端口转发 三.scp 命令 四.rsync命令 五.sz和rz命令 六. ssh-agent 七.ssh执行命令不退出问题 参考文章 一.ssh命令 登录类型 密码登录: 服 ...