k8s从入门到精通(五):一文搞定 kubectl 常用命令

之前的文章分别介绍了k8s里面常用对象和架构,这篇文章主要从实战的角度,详细说一下kubectl 常用命令。kubectl 是资源管理的命令行工具,所有能力都是通过HTTP调用kube-apiserver 实现。

k8s从入门到精通(五):一文搞定 kubectl 常用命令

下面介绍一些工作中经常使用的kubectl 命令。

create

create是创建资源,主要是通过 yaml 文件(也支持json文件)创建Kubernetes资源。如下命令:

# kubectl create -f 指定yaml文件

如果资源名称出现冲突将会产生错误。create 也支持快速创建,比如直接创建一个deployment。

# kubectl create deployment nginx --image=nginx

get

get命令是获取资源状态,如获取dev命名空间内所有Pod列表

# kubectl get pods -n dev -owide

其中-owide会显示Pod IP以及所在宿主机等详细信息。除此之外还可以get 其他资源比如:service、pv、secret ,第三篇文章里面所有的资源都可以被get。

describe

get命令是获取资源的概览信息,如果想要了解资源的详细情况,可以通过describe命令。如获取一个Pod详细情况

# kubectl describe pod eded-1553526000-g29kx -ndev

从describe结果可以清楚地了解到当前Pod配置详情以及当前所处状态,在故障排查中非常重要。

delete

delete是删除资源,如删除某一个Pod

# kubectl delete pods eded-1553526000-7v8lr -n dev --grace-period=0 --force=true

其中grace-period指定优雅关闭时间,force表示是否强制删除。如果非强制删除,kubectl会一直同步等待Pod被删除后才结束,如果希望异步删除可以添加--wait=false参数。

我们还可以删除namespace下指定的所有资源,比如删除dev空间下所有pod。

 # kubectl delete pod -ndev --all

exec

exec和docker的exec非常相似,都是进入容器内部执行命令。

# kubectl exec -it  eded-1553526000-g29kx sh -ndev

这里sh是进入容器后执行的命令,此时必须保证容器内安装了shell,否则将抛出容器内没有对应命令的错误。

cp

cp是拷贝指令,可以将本地文件拷贝到容器里面,也可以支持反向拷贝。如果希望将本地文件a拷贝到Pod的tmp目录下,可以执行

# kubectl cp a.txt eded-1553526000-g29kx:/tmp/ -n dev

cp方法的本质是通过exec执行tar命令,所以容器必须内置tar,否则将无法完成拷贝,如果是从容器内拷贝文件到本地,首先在容器内执行”tar cf - 文件“,将文件归档后直接通过标准输出发送到本地,相反的,如果是上传文件到容器则是在容器内执行”tar -xf - -C 文件“解压归档文件。

log

如果希望查看容器的标准输出,和docker logs命令相似,可以通过kubectl logs查看,具体命令如下:

# kubectl logs -f --tail=200  eded-1553526000-g29kx  -ndev

其中-f是指通过流的方式持续获取日志,tail则是显示最后多少行日志。

edit

edit命令可以修改资源的yaml文件,如果想对一个deployment的yaml进行修改可以执行,会进入一个vi的编辑页面

# kubectl edit  deploy testdeploy  -ndev

编辑完执行:wq保存并退出后,deployment将会立刻生效。

除了edit命令以外还可以通过patch、replace、apply等方式修改资源配置文件,其中patch是以打补丁的方式修改(提供一个yaml或者json的补丁文件),并且支持merge操作;replace命令相对于patch命令提供的补丁文件,replace则需要提供全量的更新文件;apply则更加灵活,如果生命的资源不存在则创建,如果已存在则更新资源。

scale 和 autoscale

上面的edit 命令可以编辑 spec 里面定义的各种属性,当然也包括副本数 replicas。除此之外,我们还可以通过scale 单独指定副本数。甚至可以通过autoscale 自动弹性伸缩,关于自动伸缩后续文章详细介绍。

kubectl scale deployment mysql --replicas=3 
# kubectl autoscale deployment foo --min=2 --max=10 --cpu-percent=80  

cordon和uncordon

cordon和uncordon是一对互逆操作,分别将节点置为”非调度“和”允许调度“状态。当我们在维护主机时,通常需要将节点设置为”非调度“状态,避免新的Pod分配到该主机上。如果需要立刻驱逐本节点上的Pod可以通过drain将主机标记为维护状态,那么这个上面的运行的Pod将会被驱逐到其他节点重新创建。

label 和 annotation

可以为指定的资源添加标签和注解。比如下面的命令为pod 添加标签和注解

# kubectl label pods my-pod new-label=awesome                      # 添加标签
# kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 添加注解

我们还可以通过label 为特殊用途的Node 添加标签。

展开阅读全文

页面更新:2024-04-27

标签:注解   副本   节点   伸缩   容器   补丁   入门   命令   状态   错误   编辑   主机   标签   方式   文件   常用命令   资源   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top