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集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...
随机推荐
- Node.js 文件输入
最近在尝试用 JavaScript (Node.js) 写题.为此,特地看了 ECMAScript 2017 Language Specification(大雾).写题一般是从文件输入,确切地说是,将 ...
- axis2生成webservice服务端返回String[]和String[][]一维数组和二维数组解析
环境:用axis2生成服务端,用aixs做客户端 1:直接返回String[]: public String[] testArr(String name) { String[] ret=new Str ...
- Java防止SQL注入的途径介绍
为了防止SQL注入,最简洁的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只 ...
- Django模板遍历字典的方法
使用Python + Django做Web开发时,有时需要在view中传递一个字典给模板(template),如何在模板中遍历字典呢? 下面介绍两种方法: views.py代码如下: dicts = ...
- 'Add Solution': A timeout has occurred while invoking commands in SharePoint host process.
一.问题描述: 在部署SharePoint solution的时候,出现Time out 的问题,错误提示: Error occurred in deployment step 'Add Soluti ...
- [LeetCode] Rotate Image n-by-n矩阵顺时针旋转
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- 转 C++ 面向对象程序设计的基本特点
传送门 Miss it C++ 面向对象程序设计的基本特点 First: 抽象 面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象公共性质并加以描述的过程. 抽象的过程,也是对问题 ...
- 12深入理解C指针之---指针多层间接引用
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 一.指针多层引用 1.定义:指针可以用不同的间接引用层级,通常使用多重指针或字符数组来 ...
- 在 Ubuntu 下使用 com port, serial port
1. Install putty 2. Insert serial-to-usb converter cable converter to NB or PC 3. check converter un ...
- SPOJ GSS系列(数据结构维护技巧入门)
题目链接 GSS $GSS1$ 对于每个询问$l$, $r$,查询$a_{l}$, $a_{l+1}$, $a_{l+2}$, ..., $a_{r}$这个序列的最大字段和. 建立线段树,每个节点维护 ...