一、常见命令

kubectl 详细命令用法可以参考官网:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

kubectl 常用的命令总结
只显示默认命名空间的pods
kubectl get pods

显示所有空间的pod
kubectl get pods --all-namespaces

显示指定空间的pod
kubectl get pods -o wide --namespace apm

其中–namespace 与-n 作用等同,后面接命名空间参数
kubectl get deployment -n apm
kubectl get pods,svc,rc -n apm svc和services是一样的
这些命令都可以通过 kubectl get --help 来查看帮助

删除
只能删除默认命名空间的deployment
kubectl delete deployment nginx

删除指定空间的deployment/其他资源等
kubectl  delete TYPE RESOURCE -n NAMESPACE
具体如下:
kubectl  delete deployment shop-app -n test-shop  
kubectl  delete TYPE --all -n NAMESPACE
kubectl  delete all -n NAMESPACE
kubectl  delete all --all

使用yaml文件创建pod
kubectl apply -f apptrace-receiver-deployment.yaml
apply 和 create 命令都可以后跟yaml,创建所需资源,初次创建pod时可以互相替换使用;如果已有pod只是用于更新的话,又可以和replace相互替换使用;本着化繁就简的原则,create和replace都使用apply; 而且apply属于申明式语法,这个更加灵活,多次执行不会报错,只会更新改变的部分;像Jenkinsfile也已经从脚本语法向申明式转变。

使用kubectl命令把pod、卷、各种资源导出为yaml格式:
kubectl  get pods podA -n NAMEAPSCE-A -o yaml --export> padA.yaml
pod 可以换成其他申明式资源如卷、services等;如果不带上--export  生成文件会有很多无用的内容

现在很多产品如rancher openshift,等;UI界面 直接可视化操作导出各种资源,掌握命令很多时候,可以事半功倍。-o更详细用法 下面有单独说明。

查看命名空间apm的collector服务详情
--namespace 和-n  作用相同

查看pod日志
kubectl logs podname --namespace apm (可以带上 -f 参数)

为节点机apm-docker001打标签 zookeeper-node=apm-docker001,查看标签等;
为节点机打标签和查看
kubectl label nodes apm-docker001 zookeeper-node=apm-docker001
kubectl get nodes --show-labels
为命名空间打标签和查看
kubectl label namespace $your-namesapce istio-injection=enabled
kubectl  get namespaces  --show-labels

给名为foo的Pod添加label unhealthy=true
kubectl label pods foo unhealthy=true

查看某种类型字段下有哪些参数;
kubectl explain pods
kubectl explain Deployment
kubectl explain Deployment.spec
kubectl explain Deployment.spec.spec
kubectl explain Deployment.spec.template
kubectl explain Deployment.spec.template.spec

如查看Deployment.spec.template 可以有哪些参数
[root@k8s-master ~]# kubectl explain Deployment.spec.template
KIND:     Deployment
VERSION:  extensions/v1beta1

RESOURCE: template <Object>

DESCRIPTION:
     Template describes the pods that will be created.

PodTemplateSpec describes the data a pod should have when created from a
     template

FIELDS:
   metadata     <Object>
     Standard object's metadata. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

spec <Object>
     Specification of the desired behavior of the pod. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

在pod内部,执行shell命令
kubectl exec podname printenv | ps aux | cat、ls 某个文件(如果pod不在默认空间,用-n 指定相应空间)
如:kubectl  exec   app-demo-68b4bd9759-sfpcf -n test-shop printenv

或者在kubectl exec podname -- 再跟shell命令 如:
kubectl exec -it spark-master-xksl -c spark-master -n spark  -- mkdir -p /usr/local/spark  
shell命令前,要加-- 号,不然shell命令中的参数,不能识别

kubectl  exec  后面只能是pod,目前还不支持deployment daemonnset等

巧用kubectl 帮助文件
如你只记得部分命令 get ,可以用
kubectl get --help
同理
kubectl create rolebinding
不知道后面接什么 也可以–help一下,记得关键字越多 带上后再使用help,如果只记得部分 就先help

kubectl create --help
这样create 所有类型的应用怎么创建 都有了
同样也可以直接 kubectl --help
这样kubectl 有哪些用法就显示出来,
我们要一级级的利用帮助 可能刚开始记住前面一个关键字,写完关键字 help一下 又有很多详细的用法

二、常见错误排除

Kubernetes 部署失败的 10 个最普遍原因
详细说明链接:http://dockone.io/article/2247;注意一定勤看日志

** kubectl  describe  pod  kube-state-metrics-xntdx-978bb474d-8x7pg  -n efk-jpvgs**
** 查看event部分:**

Events:
  Type     Reason     Age               From                   Message
  ----     ------     ----              ----                   -------
  Normal   Scheduled  3m                default-scheduler      Successfully assigned efk-jpvgs/kube-state-metrics-xntdx-978bb474d-8x7pg to szly-manager
  Normal   Pulling    1m (x4 over 3m)   kubelet, szly-manager  pulling image "k8s.gcr.io/kube-state-metrics:v1.5.0"
  Warning  Failed     1m (x4 over 3m)   kubelet, szly-manager  Failed to pull image "k8s.gcr.io/kube-state-metrics:v1.5.0": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     1m (x4 over 3m)   kubelet, szly-manager  Error: ErrImagePull
  Warning  Failed     1m (x6 over 3m)   kubelet, szly-manager  Error: ImagePullBackOff
  Normal   BackOff    52s (x7 over 3m)  kubelet, szly-manager  Back-off pulling image "k8s.gcr.io/kube-state-metrics:v1.5.0"

这个就说明了问题 镜像拉取失败 ,记住遇到问题 一定要先看日志,要不然像无头苍蝇,瞎修改

如果已经启动成了的 容器(pod) 可以通过命令:

kubectl  logs   efk-jpvgs-elasticsearch-0  -n efk-jpvgs

来查看,或者直接在rancher里面选择pod后view logs ,查看 events 区域的提示内容
查看etcd 健康状态

kubectl get componentstatuses 或者kubectl get cs
NAME                 STATUS      MESSAGE                                                                                         ERROR
controller-manager   Healthy     ok                                                                                              
etcd-1               Unhealthy   Get https://172.16.31.16:2379/health: dial tcp 172.16.31.16:2379: connect: connection refused   
scheduler            Healthy     ok                                                                                              
etcd-2               Healthy     {"health": "true"}                                                                              
etcd-0               Healthy     {"health": "true"}

更详细的排错方案见:
https://kubernetes.feisky.xyz/pai-cuo-zhi-nan/pod

kubectl 与 Docker 命令关系 可以参考:
http://docs.kubernetes.org.cn/70.html

特别说明 docker run redis --requirepass,RedisP@ssw0rd
像这种 run 镜像后面的参数,则可以在docker-compose或者k8s的cmd或者入口处定义,无需二次制作镜像

也参考官网镜像的dockerfile,如dockerfile最后的一句话是CMD [“redis-server”],我们
部署时,在rancher UI命令(CMD)
redis-server --requirepass 自己的密码
填写完成后启动redis,并测试密码是否生效;
如果没有找到镜像的dockerfile,当run镜像后,指定了工作路径,路径里面一般会有个可执行的二进制文件,一般可以在入口命令中,设置执行二进制文件,后面跟参数 ;./xx -args args_value 但这个需要灵活应变;

kubectl 命令规律总结
先看一组命令

kubectl  delete  sa  metricbeat  -n  efk
kubectl  get  sa  --all-namespaces
kubectl  delete  daemon-set  metricbeat  -n  efk

1.会发现,kubectl 不管get 、delete describe等操作 后面跟资源类型 如果sa(serviceaccout) deployment pod,然后是资源名称,如果没有资源名称,则删除、获取此类型所有的资源;最后限定某个命名空间,或者全部命名空间;这个限定命名空间 可以放在kubectl 后面,也可以放在所有参数后面
-o 是指定输出格式
输出格式 说明
-o=custom-columns= 根据自定义列名进行输出,以逗号分隔
-o=custom-colimns-file= 从文件中获取自定义列名进行输出
-o=json 以JSON格式显示结果
-o=jsonpath= 输出jsonpath表达式定义的字段信息
-o=jsonpath-file= 输出jsonpath表达式定义的字段信息,来源于文件
-o=name 仅输出资源对象的名称
-o=wide 输出额外信息。对于Pod,将输出Pod所在的Node名
-o=yaml 以yaml格式显示结果
如下:

kubectl  get  sa   -n  efk  -o  yaml 
kubectl  get  sa  efk-elaticsearch -n  efk  -o  yaml  >xxx.yaml 
kubectl  get pod efk-elaticsearch-0 -n  efk  -o  wide

更多用法可以参照官网或者国内翻译的博客
https://blog.csdn.net/xingwangc2014/article/details/51204224

因为k8s 采用的是REST API接口,所有命令都最终会转换成curl -X PUT POS等形式,为什么不直接使用curl命令,因为需要一堆相关授权,rancher UI里面 在deploy或其他资源中,选择api查看 就可以查到,也可以点击右侧的edit编辑后 通过curl命令提交
API Request
cURL command line: 
curl -u "${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}" \
-X PUT \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"annotations":{"cattle.io/timestamp":"", "cni.projectcalico.org/podIP":"10.42.1.44/32"}, "containers":[{"allowPrivilegeEscalation":false, "exitCode":null, "image":"172.16.35.31:1180/apm-images/gettoken:1.0", "imagePullPolicy":"IfNotPresent", "initContainer":false, "name":"genttoken", "ports":[{"containerPort":8001, "dnsName":"genttoken-nodeport", "kind":"NodePort", "name":"8001tcp301001", "protocol":"TCP", "sourcePort":30100, "type":"/v3/project/schemas/containerPort"}], "privileged":false, "procMount":"Default", "readOnly":false, "resources":{"type":"/v3/project/schemas/resourceRequirements"}, "restartCount":0, "runAsNonRoot":false, "state":"running", "stdin":true, "stdinOnce":false, "terminationMessagePath":"/dev/termination-log", "terminationMessagePolicy":"  等等

kubectl常见命令及错误排除相关推荐

  1. Python开发环境配置常见命令与错误处理

    一.命令 1.pip版本更新 python37.exe -m pip install --upgrade pip python -m ensurepip #安装pip 2. 禁用Chrome自动更新 ...

  2. 容器编排技术 -- Kubernetes kubectl edit 命令详解

    容器编排技术 -- Kubernetes kubectl edit 命令详解 1 kubectl edit 2 语法 3 示例 4 Flags kubectl edit 使用默认编辑器 编辑服务器上定 ...

  3. kubectl常用命令大全详解

    文章目录 说明 基础命令详解:create.delete.get.run.expose.set.explain.edit create 命令:根据文件或者输入来创建资源 创建Deployment和Se ...

  4. 常见的 Git 错误解决方法

    常见的 Git 错误解决方法 从索引中取消暂存文件/目录 编辑上次提交的邮件 忘记了上次提交中的一些更改 放弃本地更改 已将个人数据提交到本地存储库 password files 将最新的提交替换为新 ...

  5. ansys 常见命令集合

    原文地址为: ansys 常见命令集合 APDL换行与续行- APDL规定每行72个字符 如果要写表达式A=C1+C2 (C1与C2都为表达式 可以用 B=C1 A=B+C2 将一行拆成两行来做但是如 ...

  6. kubectl全部命令用法示例

    文章目录 1 kubectl命令总结 2 kubectl命令用法测试 create expose run set explain get edit delete rollout scale autos ...

  7. Kubectl 常用命令大全(*)

    前言 Kubectl是一个用于操作kubernetes(k8s)集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具. Kubectl 常用 ...

  8. Linux常见命令(五)——rmdir

      前  言 JRedu 今天我们来介绍第五个命令:rmdir . 命令英文原意:remove empty directories 命令用途: rmdir:删除空目录,非空的目录不能删除 本章内容将详 ...

  9. 6种常见的Git错误以及解决的办法

    我们都会犯错误,尤其是在使用像Git这样复杂的东西时.如果你是Git的新手,可以学习如何在命令行上开始使用Git.下面介绍如何解决六个最常见的Git错误. Photo by Pawel Janiak  ...

最新文章

  1. Saiku_学习_01_saiku安装与运行
  2. 堆晶结构_内蒙古苏尼特左旗地区堆晶角闪辉长岩的发现及地质意义
  3. Python绘制PDF文件~超简单的小程序
  4. Drools的HelloWord例子
  5. 通过一段汇编,加深对寄存器ESP和EBP的理解
  6. devops与itsm集成_如何解决DevOps与ITSM文化冲突
  7. ARM MMU工作原理剖析
  8. gedit 可以实现的更多功能插件
  9. 正确的特征点匹配对_了解如何正确选择特征
  10. Excel技能培训之十五 函数使用rank,Frequency,subtotal超级表,切片器,iferor,常用错误代码
  11. 用计算机用两个珠子能拨出那些数字,人教版一年级数学上册第三单元教案
  12. 已知圆柱半径求周长c语言,求圆柱体积和周长的c语言编写程序
  13. 1214-赚钱的单子绝不能亏钱出,止损也不能设的太大。
  14. Excel 按照某一列不同内容插入分页符号
  15. IDEA去掉Performing Code Analysis,Check TODO
  16. Vue FSC在线编译代码实时预览@vue/repl
  17. 阿姨,我真不是修电脑的!
  18. Echarts中国地图的china.js下载
  19. 19:C语言之C循环-寻找完数
  20. 基于Java web的客户关系(crm)管理系统

热门文章

  1. Python计算一个人BMI(身体质量指数)指数
  2. 人工智能之父、Lisp语言发明者John McCarthy
  3. Android Qcom Display学习(十)
  4. 瞄准物业采购痛难点,SRM供应商采购管理系统助力企业打造全数字化供应网络
  5. Python爬取小说(3)整本爬取
  6. 12 Easyx扫雷游戏
  7. 小工具:屏幕按键实时演示
  8. 微信小程序之城市切换
  9. Guitar Pro8手机电脑免费版吉他软件下载
  10. 攀爬机器人 蝎子_几款异常奇妙的国外机器人