本文主要介绍kubernetes排查问题时经常用到的命令。这里主要借助kubectl命令来实现。以下列出常用命令,后面会对每个命令进行详细解释,并举例:

kubectl核心命令

get  获取列出一个或多个资源的信息。(资源分为pod、instance、service等很多种)
describe  输出指定的一个/多个资源的详细信息。(一般describe状态有问题节点,如Pending等)
logs  输出pod中一个容器的日志。(如果pod只包含一个容器则可以省略容器名)
apply  指定Yaml或Json,创建资源。(通过文件或者控制台输入)
edit
编辑服务器上定义的资源。(文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。)

rolling-update  执行指定ReplicationController的滚动更新。(不中断业务的更新方式)
delete  删除一个资源(可以是pod、instance等)
exec  在容器内部执行命令

一、get

获取所有namespace:

kubectl get ns

在指定的namespace下获取资源:

kubectl -n {$nameSpace} get pods

以yaml格式输出资源:

kubectl -n {$nameSpace} -o yaml

通用格式:

kubectl get {$sourceType} --all-namespaces

常用的资源类型({$resourceType})有:

  • po(pod)
  • ns(命名空间namespace)
  • instance(实例)
  • svc(service服务):定义了一个 Pod 的逻辑分组,一种可以访问它们的策略(微服务)。
  • cm(configMap):存储全局配置变量的,将分布式系统中不同模块的环境变量统一到一个对象中管理。
  • ds(deamonSet):在每台计算节点上运行一个守护进程(如日志采集等),有时pod处于pending可能是因为某个deamonSet没起来。
  • deploy(deployment):用于启动(上线/部署)一个Pod或者ReplicaSet。这个如果有问题,那么其他依赖它来部署的资源就肯定不会正常了。

-o支持的格式有

  • custom-columns=<spec>             根据自定义列名进行输出,逗号分隔
  • custom-columns-file=<filename>       从文件中获取自定义列名进行输出
  • json                         以JSON格式显示结果
  • jsonpath=<template>               输出jasonpath表达式定义的字段信息
  • jasonpath-file=<filename>           输出jsonpath表达式定义的字段信息,来源于文件
  • name                         仅输出资源对象的名称
  • wide                         输出更多信息,比如会输出node名
  • yaml                         以yaml格式输出

二、describe

描述一个资源:

kubectl -n {$nameSpace} describe {$resourceType} {$resourceName}

三、logs

查看日志,--tail指定只看最后1000行:

kubectl -n {$nameSpace} logs --tail= {$podName} | less

五、apply

通过配置文件名创建一个集群资源对象。

kubectl apply -f {$yamlorJsonFilePath}

六、edit

编辑一个资源文件,这里以编辑configMap资源对象为例(yaml格式):

kubectl -n {$nameSpace} edit {$resourceType} {$resourceName} -o yaml

七、rolling-update

执行指定ReplicationController的滚动更新。该命令会创建一个新的RC,等新pod完全起来后删除一个旧的pod,之后重复操作,直到替换掉所有的pod。

kubectl rolling-update {$resourceName} -f {$yamlFile} 

八、delete

指定资源类型和名字删除一个资源:

kubectl -n {$nameSpace} delete {$resourceType} {$resourceName}

批量删除资源:

kubectl -n {$nameSpace} delete {$resourceType} -l {$label}={$labelValue}

九、exec

exec主要作用是在容器内部执行命令(一般为查看容器内部日志),这里以一个小例子说明kubectl exec命令的作用。

场景描述:当我们用命令行,以root用户身份登录机器,要修改HDFS某个目录权限。

此情况一般是不允许的,因为在HDFS中,最高权限并不是root用户,而是hdfs用户,这个时候如果更改,会提示权限不足。如下我们以root用户登录机器,想修改HDFS的/tmp/jbw目录权限为777,发现此目录并不属于root组,没权限修改。

查看/tmp/jbw目录,发现其属于hdfs组的hadoop用户。

尝试着用hdfs用户去执行命令,发现本机上并没有hdfs用户,因为真正的hdfs用户只存在于真实部署HDFS的容器内部。

但我们如果非要想改其权限应该怎么办呢?那就用kubectl的exec命令,进入HDFS的任意一个namenode容器内部去更改就好(前提是以容器化方式部署HDFS)。

1、获取namenode的pod

kubectl get pods | grep namenode

结果如图所示:

2、任选一个pod进入(利用kubectl exec命令)

kubectl exec -it hadoop-hdfs-namenode-hdfs1--21mft bash

如下已经进入所选pod:

若看到~,表示进入成功(因为当前目录有所变化,若是在不放心df -h看一下文件系统是否有变化也可)。

如果进入部署HDFS的容器pod内部(这里是进入了部署namenode的一个pod,理论上datenode也可以),这些pod里当然就有hdfs用户了,接下来以hdfs用户执行相应修改目录权限命令即可。

sudo -u hdfs hadoop fs -chmod  /tmp/jbw

下图即执行修改目录权限命令结果:

exit退出当前pod,再查看一下HDFS上的/tmp/jbw目录,就会发现,权限已修改!如下图所示:

常用的kubectl命令的更多相关文章

  1. Kubernetes集群管理工具kubectl命令技巧大全

    一. kubectl概述 Kubectl是用于控制Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署. kubectl命令的语法如下 ...

  2. 前端常用的WindowsCMD命令

    前面的话   在网上找了一些关于命令提示符CMD的资料,但是很多资料都是把所有的功能罗列出来,大部分都不会用到.所以,自己把常用的CMD命令总结如下,方便查阅 操作类 help 列出所有支持的指令及说 ...

  3. Android之什么是Activity和常用的ADB命令以及Android项目结构的认识

    总结一下之前学习Android的一些内容 一:  Android常用的ADB命令(adb android调试桥)      1.adb devices   查看模拟器设备并重新连接. 2.adb ki ...

  4. linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

    linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-- 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置 ...

  5. Linux 视频设备驱动V4L2最常用的控制命令

    http://blog.csdn.net/shaolyh/article/details/6583226 Linux 视频设备驱动V4L2最常用的控制命令使用说明(1.02) 命令 功能 VIDIOC ...

  6. FPGA综合工具--Synplify Pro的常用选项及命令

    最近要用到Synplify,但以前没使用过,无基础,找到一篇帖子,隧保存下来. 本文转自:http://blog.sina.com.cn/s/blog_65fe490d0100v8ax.html Sy ...

  7. 每天一个linux命令(61):vi命令 /企业常用的linux命令清单

    vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是一般模式.编辑模式与指令列命令模式. 这三种模式的作用分别是: 一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默认的模式) ...

  8. 几个最常用的git命令

    之前在Windows下一直用可视化的tortoise git,在Linux下最好是用命令行,以下是常用的git命令: git status:显示当前已修改的文件,新增的文件 git checkout  ...

  9. 工作中常用的Linux命令:mkdir命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...

随机推荐

  1. javascript 回到顶部效果的实现

    demo.js window.onload=function() { var timer=null; var obtn=document.getElementById('btn'); var isTo ...

  2. 第三节 基本数据写入 --------增加&查询

    启动mongodb服务 net start mongodb 链接mongodb  进入bin目录 mongo 127.0.0.1:12345 启动连接 show dbs   显示所有的数据库 use ...

  3. substr()、substring()、slice()

    substr(start,length) start(必选)开始位置的下标 可为负数-1即为倒数第一个字符以此类推 0为第一个字母下标 length长度(可选)如果省略该参数则默认到最后一位 var ...

  4. BLUEHOST香港主机FTP连接不上解决办法

    昨天购买了BLUEHOST的香港主机后,以为一切顺风顺水,结果FTP却连接不上,用了多种FTP工具都不行,​​​按官方博客要求开启了TSL仍然不行​.​经过一晚上的测试后终于成功,现分享出来. 方法一 ...

  5. spring-boot整合Mybatis案例(注解方式)

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  6. 【LeetCode 76】最小覆盖子串

    题目链接 [题解] 尺取法. 用l和r代表一个合法的覆盖子串. 我们不断地扩大右指针. 直到l..r包含T中的所有字母为止(重复的就要两次以上.) 然后我们可以尝试的让l++. 看看新的l..r是不是 ...

  7. BZOJ 1369: [Baltic2003]Gem(树形dp)

    传送门 解题思路 直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证. 代码 #include<iostream> #includ ...

  8. vector代替数组

    vector代替数组 1.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除). 2.用vector ...

  9. 分布式架构下的会话追踪实践【基于Cookie和Redis实现】

    分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat ...

  10. 【转】 Linux 命令解释(Linux基础二)

    前言 对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务.开放更多的端口,这对服务器的稳定性和安全性都有负面影响.其实,服务器是一个连显示器都没有的家伙,要图形界面干十么? 说到这里,有 ...