K8s命令篇-Kubernetes工作实用命令集结号

高楼Zee 2020-11-17 21:04:03
工作 Kubernetes k8s 实用 命令


1.kubectl命令概述

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集 群进行操作。在实际工作中熟练的使用这些命令去定位K8s集群问题时是我们爱不释手的好伴侣,来和我们相互认识下吧。

2.kubectl用法概述

2.1.kubectl命令行语法

kubectl [command] [Type] [NAME] [flas]
  1. command:子命令,用于操作Kubernetes集群资源对象的命 令,例如create、delete、describe、get、apply等。
  2. TYPE:资源对象的类型,区分大小写,能以单数、复数或者 简写形式表示。
  3. NAME:资源对象的名称,区分大小写。如果不指定名称, 系统则将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返 回所有Pod的列表。
  4. flags:kubectl子命令的可选参数,例如使用“-s”指定API Server的URL地址而不用默认值。

2.2.kubectl 可操作资源对象及其缩写

资源对象类型

缩写

clusters

componentstatuses

cs

configmaps

cm

daemonsets

ds

deployments

deploy

endpoints

ep

events

ev

horizontalpodautoscalers

hpa

ingresses

ing

Jobs

limitranges

limits

nodes

no

namespaces

ns

networkpolicies

statefulsets

persistentvolumeclaims

pvc

persistenvolumes

pv

pods

po

podsecuritypolicies

psp

podtemplates

replicasets

rs

replicationcontrollers

rc

resourcequotas

quota

cronjob

secrets

serviceaccounts

services

svc

storageclasses

sc

thirdpartyresources

kubectl在一条命令中操作多个对象示例

#获取多个Pod的信息
kubectl get pods pod1 pod2
#获取多种对象类型信息
kubectl get pod/pod1 rc/rc1
#同时应用多个YAML文件,以多个-f file参数表示
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f pod2.yaml

2.3.kubectl子命令详解

kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作, 包括资源对象的创建、删除、查看、修改、配置、运行等

子命令

语法

说明

api-versions

kubectl api-versions [flags]

列出当前系统支持的API版本列表,格式为group/version

apply

kubectl apply -f FileName [flags]

从配置文件或stdin中对资源对象进行配置更新

attach

kubectl attach POD -c container [flags]

进入到一个正在运行的容器上

auth

kubectl auth [flags] [options]

检测RBAC权限设置

autoscale

kubectl autoscale (-f FileName|TYPE NAME)[--min=minPods]--max=maxPods [--cpu-percent=CPU][flags]

对Deployment、RelicaSet或ReplicationController进行水平自动扩容或缩容设置

cluster-info

kubectl cluster-info [flags]

显示集群Master和内置服务的信息

completion

kubectl completion SHELL[flags]

输出shell命令的执行结果码

config

kubectl config SubCommand[flags]

修改kubeconfig文件

convert

kubectl convert -f FileName[flags]

转换配置文件为不同的API版本

cordon

kubectl cordon Node[flags]

将Node标记为unschedulable,即隔离出集群调度范围。

create

kubectl create -f FileName[flags]

从配置文件中创建资源对象

delete

kubectl delete (-f FileName|TYPE NAME|-l label|--all)[flags]

根据配置文件、资源对象名称或label selector删除资源对象

diff

kubectl diff -f FileName[options]

查看配置文件与当前系统中正在运行的资源对象的差异

drain

kubectl drain Node[flags]

首先将Node设置为unschedulabel,然后删除在该node上运行的所有Pod,但不会删除不由APIServer管理的Pod

edit

kubectl edit (-f FileName|TYPE NAME)[flags]

编辑资源对象的属性,在线更新

exec

kubectl exec Pod [-c container] [-i][-t][flags][--COMMAND][args...]

执行一个容器中的命令

explain

kubectl explain [--include-extended-apis=true][--recursive=flags][flags]

对资源对象属性的详细说明

expose

kubectl expose(-f FileName|TYPE NAME)[--port=port][--protocol=TCP|UDP][--target-port=number-or-name][--name=name] [----extemal-ip=extemal-ip-of-service] [--type=type] [flags]

将已经存在的一个 RC、Service、Deployment或Pod暴露为一个新的Service

get

kubectl get (-f FileName|TYPE NAME|-l label)[--watch] [--sort-by=FIELD][[-o|--output]=OUTPUT_FORMAT] [flags]

显示一个或多个资源对象的概要信息

label

kubectl label (-f FileName|TYPE NAME)Key_1=Val_1 [--overwrite] [--all][resource-version=version][flags]

设置或更新资源对象的labels

logs

kubectl logs Pod[-c container] [--follow] [flags]

在屏幕上打印一个容器的日志

patch

kubectl patch (-f FileName|TYPE NAME)--patch PATCH [flags]

以merge形式对资源对象的部分字段的值进行修改

plugin

kubectl plugin [flags][options]

在kubectl 命令行使用用户自定义的插件

port-forward

kubectl port-forward Pod [LOCAL_PORT:]REMOTE_PORT

将本机的某个端口映射到Pod的端口,通常用于测试

replace

kubectl replace -f FileName [flags]

从配置文件替换资源对象

rolling-update

kubectl rolling-update Old_controller_name ([new_controller_name]--image=new_contrainer_image|-f new_controller_spec)[flags]

对RC进行滚动升级

rollout

kubectl rollout SUBCOMMAND [flags]

对Deployment进行管理,可用操作包括:history、pause、resume、undo、status

run

kubectl run name --image=image[-env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags]

基于一个镜像在Kubernetes集群上启动一个Deployment

scale

kubectl scale (-f FileNale|TYPE NAME) --replicas=count [resource-version=version] [--current-replicas=count] [flags]

扩容、缩容一个Deployment、ReplicaSet、RC或Job中Pod的数量

set

kubectl set SUBCOMMAND [flags]

设置资源对象的某个特定信息,目前仅支持修改容器的镜像

taint

kubectl taint NodeName key_1=val_1:taint_effect_1 [flags]

设置Node的taint信息,用于将特定的Pod调度到特定的Node的操作。

top

kubectl top node |kubectl top pod

查看Node或Pod的资源使用情况,需要在集群中运行Metrics Service

uncordon

kubectl uncordon Node [flags]

将Node设置为sechedulable

version

kubectl version [--client] [flags]

打印系统版本信息

2.4.kubectl参数列表

kubectl命令行的公共启动参数如下表格整理

参数名和取值示例

说明

- -alsologtostderr=false

设置为true表示将日志输出到文件的同时输出到stderr

-- as=

设置本次操作的用户名

--certificate-authority=

用于CA授权的cert文件路径

--client-certificate=

用于TLS的客户端证书文件路径

--client-key=

用于TLS的客户端key文件路径

--cluster=

设置要使用的kubeconfig中的cluster名

--context=

设置使用的kubeconfig中的context的名

--insecure-skip-tls-verify=false

设置为true表示跳过TLS安全验证模式,将使得HTTPS链接不安全

--kubeconfig=

kubeconfig配置文件路径,在配置文件中包括Master的地址信息及必要的认证信息

--log-backtrace-at=:0

记录日志没到file:行号 时打印一次stack trace

--log-dir=

日志文件路径

--log-flush-frequency=5s

设置flush日志文件的时间间隔

--logtostderr=true

设置true表示将日志输出到stderr,不输出到日志文件

--match-server-version=false

设置为true表示客户端版本号需要与服务端一致

--namespace=

设置本次操作所在的Namespace

--password=

设置APIServer的basic authentication的密码

-s,--server=

设置API Server的URL地址,默认值为localhost:8080

--token=

设置访问APIServer的安全token

--user=

指定用户名(应在kubeconfig配置文件中设置过)

--username=

设置APIServer的basic authentication 的用户名

--v=0

glog日志级别

--vmodule=

glog基于模块的详细日志级别

2.5.kubectl输出格式

kubectl命令可以用多种格式对结果进行显示,输出的格式通过-o参 数指定:

kubectl [command] [type] [name] -o=<output_format>

输出格式

说明

-o=custom-columns=

根据自定义列名进行输出,以逗号分隔

-o=custom-file=

从文件中获取自定义列名进行输出

-o=json

以json格式显示结果

-o=name

仅输出资源对象名称

-o=wide

输出额外信息,对于pod、将输出所在Node名称

-o=yaml

以YAML格式显示结果

  • 常用输出格式示例
#显示Pod的更多信息
kubectl get pod <pod-name> -o wide
#以YAML格式显示Pod的详细信息
kubectl get pod <pod-name> -o yaml
#以自定义列名显示Pod的信息
kubectl get pod <pod-name> -o =custom-columns=name:.metadata.name,RSRC:.metadata.resourceVersion
#基于文件的自定义列名输出
kubectl get pods <pod-name> -o=custom-file=template.txt
#将输出结果按某个字段排序
kubectl get pods --sort-by=.metadata.name

3.kubectl操作示例

3.1.创建资源对象

# 根据YAML配置文件一次性创建Service和RC
kubectl create -f my-service.yaml -f my-rc.yaml

3.2.查看资源对象

#查看所有Pod列表
kubectl get pods
#查看RC和Service列表
kubectl get rc,service

3.3.描述资源对象

#显示Node的详细信息
kubectl describe nodes <node-name>
#显示Pod的详细信息
kubectl get describe pods <pod-name>
#显示由RC管理的Pod的信息
kubectl describe pods <rc-name>

3.4.删除资源对象

#基于pod.yaml定义的名称删除Pod
kubectl delete -f pod.yaml
#删除所有包含某个Label的Pod和Service
kubectl delete pods,services -l name=<label-name>
#删除所有Pod
kubectl delete pods --all

3.5.执行容器的命令

#执行Pod的date命令,默认使用Pod中的第1个容器执行
kubectl exec <pod=name> data
#指定Pod中的某个容器执行date命令
kubectl exec <pod-name> -c <container-name> data
#通过bash获得Pod中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> /bin/bash

3.6.查看容器的日志

#查看容器输出到stdout的日志
kubectl logs <pod-name>
#跟踪查看容器的日志,相当于tail -f命令的结果
kubectl logs -f <pod-name> -c <container-name>

3.7.创建或更新资源对象

#用法和kubectl create类似,逻辑稍有差异:如果目标资源对象不存 在,则进行创建;否则进行更新
kubectl apply -f app.yaml

3.8.在线编辑运行中的资源对象

在命令执行之后,会通过YAML格式展示该对象的定义和状态,用户可以对代码进行编辑和保存,从而完成对在线资源的直接修改。

#可以使用kubectl edit命令编辑运行中的资源对象,例如使用下面的 命令编辑运行中的一个Deployment
kubectl edit deploy nginx

3.9.将Pod的开放端口映射到本地

#将集群上Pod的80端口映射到本地的8888端口,在浏览器 http://127.0.0.1:8888中就能够访问到容器提供的服务了
kubectl port-forward --address 0.0.0.0. pod/nginx-6ddbbc47-sfdcv 8888:80

3.10.在Pod和本地之间复制文件

#把Pod上的/etc/fstab复制到本地的/tmp目录
kubectl cp nginx-6ddbbc47-sfdcv:/etc/fstab /tmp

3.11.资源对象的标签设置

#为default namespace设置testing=true标签
kubectl label namespaces default testing=true

3.12.检查可用的API资源类型列表

#该命令经常用于检查特定类型的资源是否已经定义,列出所有资源 对象类型
kubectl api-resources

3.13.使用命令行插件

用户自定义插件的可执行文件名需要以“kubectl-”开头,复制到 $PATH中的某个目录(如/usr/local/bin),然后就可以通过kubectl运行自定义插件了。例如,实现一个名为hello的插件,其 功能为在屏幕上输出字符串“hello world”

新建名为kubectl-hello的可执行脚本文件,其内容为

echo "hello world"

复制kubectl-hello文件到/usr/local/bin/目录下,就完成了安装插件的 工作。然后在kubectl命令后带上插件名称就能使用这个插件了:

kubectl hello
hello world

使用kubectl plugin list命令可以查看当前系统中已安装的插件列 表:

kubectl plugin list

更完整的插件开发示例可以从https://github.com/kubernetes/sample- cli-plugin找到。

本文分享自微信公众号 - 7DGroup(Zee_7DGroup) ,作者:Bruce

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间: 2020-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[高楼Zee]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1748660

  1. K8s command chapter - kubernetes working practical command collection number
  2. HTTP series - detailed explanation of message structure
  3. MySQL 存储引擎 MyISAM 与 InnoDB 区别
  4. The difference between MySQL storage engine MyISAM and InnoDB
  5. 《算法竞赛入门经典——训练指南》实用数据结构
  6. Practical data structure of "Introduction to algorithm competition classic training guide"
  7. Hive的数据压缩介绍及使用
  8. Introduction and use of hive's data compression
  9. Please put away this database interview summary for spring recruitment
  10. Redis:23---info命令总结
  11. Redis:23---info Command summary
  12. Quick start kubernetes (k8s) - resource list
  13. Http Header中到底有些啥?
  14. What's in HTTP header?
  15. Linux commands 4-find, locate
  16. Brief description of Tencent cloud redis console parameters
  17. 再见,MySQL!性能被 MariaDB 吊打 ?
  18. 不要再乱下载JDK了:Elasticsearch在国产化ARM环境下的首个大坑
  19. Linux text processing
  20. Goodbye, MySQL! Performance is being beaten by MariaDB?
  21. Don't download JDK any more: elasticsearch's first big hole in the domestic arm environment
  22. Getting started with spring boot 2. X: getting started with spring MVC request mapping (@ requestmapping)
  23. Linux foundation day02
  24. Chinese user guide of parallel SSH under Linux
  25. Top of BPF: insight into Linux system and application performance
  26. JQuery level selector (descendant, descendant selector)
  27. Interesting JavaScript - precision loss and implicit type conversion
  28. Database: built in functions of MySQL