kubernetes集群管理常用命令一

系列目录

我们把集群管理命令分为两个部分,第一部分介绍一些简单的,但是可能是非常常用的命令以及一些平时可能没有碰到的技巧.第二部分将综合前面介绍的工具通过示例来讲解一些更为复杂的命令.

列出集群中所有pod

使用kubectl get pods获取的一般是默认名称空间的信息(可以在配置文件中指定默认全称空间,如果没有指定则默认为default).如果想要获取获取非默认名称空间的pod,则需要指定-n(或者--namespace)参数.但是有些时候我们想要查看整个集群中所有名称空间的pod,则可以通过kubectl get pods --all-namespaces

有的童鞋可能会好奇,可不可能不选择全部,但是选择多个名称空间下的pod,其实也是可以的.以下示例同时选择了default和kube-system名称空间下的所有pod

[[email protected] ~]$ 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来查看它的信息

[[email protected] ~]$ 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

[[email protected] ~]$ 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这种形式)

[[email protected] 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.命令示例如下:

[[email protected] 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过滤出来.

[[email protected] 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核数,以及该节点的压力等信息.

原文地址:https://www.cnblogs.com/tylerzhou/p/11056440.html

时间: 2024-10-12 19:03:08

kubernetes集群管理常用命令一的相关文章

Nginx Redis redis分片 redis哨兵 redis集群 等 常用命令

Nginx  Redis  redis分片  redis哨兵  redis集群 等 常用命令 1.1.1 Nginx命令 前提:nginx的命令执行,必须在nginx的根目录中完成 命令: 1.启动nginx     start nginx 2.重启nginx     nginx -s reload 3.关闭nginx     nginx -s stop Linux命令 1.1.2 cd命令集 ifconfig  检查IP地址 cd命令是linux中最基本的命令语句,必须熟练掌握 cd / 返回

052.Kubernetes集群管理-故障排错指南

一 故障指南 1.1 常见问题排障 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,常用如下查错方法: 查看Kubernetes对象的当前运行时信息,特别是与对象关联的Event事件.这些事件记录了相关主题.发生时间.最近发生时间.发生次数及事件原因等,对排查故障非常有价值.此外,通过查看对象的运行时数据,还可以发现参数错误.关联错误.状态异常等明显问题.由于在Kubernetes中多种对象相互关联,因此这一步可能会涉及多个相关对象的排查问题. 对于服务.容器方面的问题,可能

基于Python+Django的Kubernetes集群管理平台

原文出自[听云技术博客]:http://blog.tingyun.com/web/article/detail/1345 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调度管理等方面都有其难以言喻的优势,但是随着业务的不断增长,以及服务的多元化,容器的体量与管理的难度也随之增长. 浅述Kubernetes集群日常管理维护中的一些痛点: 1.较为庞大的集群规模及容器数量维护管理

Hadoop学习之路(七)Hadoop集群shell常用命令

Hadoop常用命令 启动HDFS集群 [[email protected] ~]$ start-dfs.sh Starting namenodes on [hadoop1] hadoop1: starting namenode, logging to /home/hadoop/apps/hadoop-2.7.5/logs/hadoop-hadoop-namenode-hadoop1.out hadoop2: starting datanode, logging to /home/hadoop/

oracle集群管理入门级命令

1.crs的开启和关闭关闭crs/etc/init.d/init.crs stop打开crs/etc/init.d/init.crs start 2.启动和关闭所有的集群服务关闭crs_stop -all启动crs_start -all 3.手工启动集群服务的顺序节点应用[nodeapps]–>ASM实例–>生产实例–>服务srvctl start nodeapps -n node1srvctl start nodeapps -n node2srvctl start asm -n nod

Linux集群监控常用命令-备忘

1.load average top uptime 2.CPU利用率 top 1多核CPU查看 Shift+H  用线程查看 -p 指定查看的进程 top | grep Cpu 3.磁盘剩余空间 df -h 按单位格式输出 du -h 按单位格式输出 4.网络traffic sar -n DEV 1 1 -n 汇报网络状况 DEV 查看各个网卡网络流量 n 间隔秒数 n 总共取几次 5.磁盘I/O iostat -d -k 6.内存使用 free -m 以MB为单位 -g 以GB为单位 vmst

Redis集群管理

原文链接:http://blog.csdn.net/xyang81/article/details/51895011 在上一篇<Redis3.2集群担建与验证>文章中分享了集群的详细担建过程,本篇主要分享集群管理的常见操作,如:添加节点.删除节点.slot分配.如果你还没有担建集群环境,建议先看上篇<Redis3.2集群担建与验证>过程,再来阅读本文比较好理解. 1.集群管理常用命令 // 集群(cluster) CLUSTER INFO 打印集群的状态信息 CLUSTER NOD

rancher搭建kubernetes集群

实验环境: 利用rancher搭建kubernetes集群,及搭建和关联harbor私有镜像库. rancher:http://10.10.10.10:8888 kubernetes:10.10.10.10 harbor:10.10.10.100 images:10.10.10.100/test_nginx:latest app:nginx 实验目的: 一.实践docker:search pull.run.tag.build.push功能.了解参数含义 #docker search *image

Docker集群管理工具-Kubernetes部署记录

Kubernetes介绍 Kubernetes是Google开源的容器集群管理系统,是基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动态扩缩容等功能套件. Kubernetes提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下: 1) 使用Docker对应用程序包装(package).实例化(instantiate).运行(run). 2) 将多台Docker主机抽象为一个资源,以集群的方式运行.管理跨机器