Kubectl命令
# kubectl介绍
kubectl是master节点上的apiserver的客户端程序,也是我们整个K8S集群的管理入口。通过kubectl我们可以实现对k8s集群中各种资源对象进行管理,资源的增删改查等。
# kubectl创建资源
# kubectl create
用于创建指定资源,该命令可以通过两种方式创建资源。
# 1. 通过命令行创建资源
kubectl create [资源类别] [资源名称] <args>
# 命令行创建一个deployment控制器
kubectl create deployment [控制器名] <args>
- 参数:
--image=
- 指定使用的docker镜像与版本--port=
- 声明暴露的容器端口--replicas=
- 指定创建的pod副本数量 (默认1)--dry-run=[true/false]
- 是否开启干跑模式 (试运行),并不是真正执行- 用来测试命令是否正确,即并不会真的创建出资源实例,去掉该参数后即可真正执行命令。
- 例如:
kubectl create deployment nginx-deploy --image=nginx:latest --port=80 --replicas=1
# 命令行创建一个namespace名称空间
kubectl create namespace [名称空间名称]
# 命令行创建一个configMap配置资源
kubectl create configmap [配置名] <args>
- 参数:
--from-literal=[键名]=[值]
- 指定键值对创建--from-file=[键名]=[文件路径]
- 指定文件内容作为值创建--from-file=[文件路径]
- 不指定键名会将文件名当键名,文件内容当值
# 命令行创建一个secret资源
kubectl create secret [secret类型] [secret名] <args>
- 参数和configMap一样。
# 2. 通过配置清单文件创建资源
kubectl create -f [资源配置清单文件路径]
例如:kubectl create -f ./pod-demo.yml
# kubectl run
用于运行特定镜像到Pod中,run方式创建的pod不经pod管理器管理,所以没有自愈等功能。
# kubectl run [Pod名] <args>
参数:
--image=
- 指定使用的docker镜像与版本--port=
- 声明暴露的容器端口--env="变量名1=值1"
- 指定环境变量 (可指定多个环境变量参数)--labels="标签名1=值1,标签名2=值2"
- 指定Pod的标签集--dry-run=[true/false]
- 是否开启干跑模式 (试运行),并不是真正执行-it
- 同等于docker中的-it可进入pod-- [启动命令]
- 指定Pod中容器启动后执行的命令 (需要放在命令行最后)
# kubectl expose
用于创建一个Service规则,并暴露指定资源,将service_ip:port映射到指定的source_ip:port。
Service实际就是通过iptables进行NAT转发,通过 iptables -vnL -t nat
命令可查看规则。
# kubectl expose [资源类别] [资源名称] <args>
参数:
--name=
- 指定service的名称,创建后可通过Service名称:端口
来访问目标资源。- 例如:nginx-svc
--port=
- 指定Service暴露的端口--target-port=
- 指定映射的目标资源的端口- 如果Service端口和目标资源端口一致,则可以只指定其中一个参数,所达到的效果一样。
- 例如:--port=80 同等于 --port=80 --target-port=80
--protocol=
- 指定端口的协议 (默认TCP),UDP、TCP、SCTP--external-ip=
- 额外添加的指定外部IP,可绑定外网网卡IP--type=
- 指定service类型 (默认ClusterIP)- ClusterIP:只能被集群内部的各Pod客户端访问,只服务于集群内部,不能被外部访问
- NodePort:会在节点网络上动态生成一个节点端口,用来映射指定暴露的Service端口
- 使我们可以从集群外部,通过
节点IP:动态端口
来访问该Service
- 使我们可以从集群外部,通过
例如:
kubectl expose deployment nginx-deploy --name=nginx-svc --port=80 --target-port=80 --protocol=TCP
# kubectl删除资源
# kubectl delete
用于删除指定资源对象,该命令可以通过两种方式删除资源。
# 1. 通过命令行删除资源
kubectl delete [资源类别] <args>
- 参数:
<资源名称>
- 仅删除指定资源名称的资源-l [标签名]=[值]
- 删除含指定标签的资源-n [名称空间]
- 指定名称空间
# 2. 通过配置清单文件删除资源
kubectl delete -f [资源配置清单文件路径]
- 删除使用指定配置清单文件定义的资源对象。
例如:
kubectl delete -f ./pod-demo.yml
# kubectl修改资源
# kubectl edit
修改指定资源配置。
kubectl edit [资源类别] <args>
- 参数:
<资源名称>
- 仅编辑指定资源名称的资源配置,不指定则编辑界面会展示全部匹配的类别资源。-l [标签名]=[值]
- 匹配含指定标签的资源-n [名称空间]
- 指定名称空间
# kubectl apply
通过文件创建或修改指定资源,对于没有的资源会创建,而对于已有的资源,会读取配置对资源进行配置更新。
kubectl apply -f [yaml资源配置清单文件路径]
# kubectl exec
使指定Pod的容器运行指定命令,类似于Docker的exec命令。
kubectl exec [POD名称] <args> -- [指定命令]
- 参数:
-it
- 以交互模式执行命令,并且为容器重新分配一个伪输入终端 (和Docker一样)
# kubeclt label
添加/修改指定资源的标签,对于不存在的标签会进行添加。
kubectl label [资源类别] [资源名称] [标签名]=[标签值] <args>
参数:
<资源名称>
- 也可以不指定资源名称,而是使用标签选择器匹配资源进行修改或创建的标签--overwrite
- 修改原有标签- 对于已有标签,需要使用--overwrite参数,才能对其进行修改
例子:
- 资源添加标签:
kubectl label pod test name=test
- 资源修改标签:
kubectl label pod test name=io --overwrite
- 使用标签选择器来修改标签:
kubectl label pod -l hello=world hello=on --overwrite
- 资源添加标签:
# kubectl scale
修改控制器的副本集规模,修改指定管理器资源的副本集规模,可以扩容、也可以缩容,但通过edit也可以修改。
kubectl scale --replicas=副本数 [资源类别] [资源名称]
# kubectl set image
根据滚动更新策略,滚动更新控制器Pod副本的镜像。
kubectl set image [资源类别] [资源名称] [容器名]=[目标镜像]
- 可使用的资源对象:
- pod (po)
- replicationcontroller (rc)
- deployment (deploy)
- daemonset (ds)
- job
- replicaset (rs)
# kubectl rollout
管理滚动更新。
暂停滚动更新
kubectl rollout pause [资源类别] [资源名称] <args>
恢复暂停的滚动更新
- ``kubectl rollout resume [资源类别] [资源名称]
`
- ``kubectl rollout resume [资源类别] [资源名称]
滚动回滚副本的镜像
kubectl rollout undo [资源类别] [资源名称] <args>
- 参数:
--to-revision=
- 指定回滚的版本,不指定默认是回滚到上一个版本
# kubectl patch
给指定资源打补丁,通过命令行加json串对指定资源进行配置修改,在做定时扩缩容时可以通过该命令行方式修改副本数。
kubectl patch [资源类别] [资源名称] -p '{JSON}'
- 例如:
kubectl patch pod nginx -p '{"metadata": {"labels": {"app":"nginx"}}}'
# kubectl查询资源
# kubectl get
获取集群资源的总体信息。
kubectl get [资源类别] <args>
资源类别:
kubectl get pod
- 获取名称空间中的podskubectl get svc
- 获得名称空间中的servicekubectl get cs
- 获得集群组件状态kubectl get node
- 获得节点状态kubectl get ns
- 获取所有名称空间- defaults - 集群资源默认的名称空间
- kube-system - 系统级的pods所在的名称空间
- 剩下的资源类别以此类推即可,例如ingress、secret等
参数:
<资源名称>
- 仅获取指定名称的资源信息--show-labels
- 额外打印标签信息-n [名称空间]
- 获取指定名称空间的资源信息,不指定则默认是default名称空间-L [标签名]
- 额外输出指定"标签名"的值信息-o [指定输出方式]
- wide - 额外打印更多信息
- yaml - 输出yaml格式配置
-l [标签名]<=[值]>
- 筛选出含指定"标签名"或"标签名=值"的资源,多个标签条件可用","隔开例如:
# 筛选出含app标签的资源 -l app # 筛选出含app、version标签的资源 -l app, version # 筛选出含app标签且该标签值为myapp的资源 -l app=myapp # 筛选出有app标签值,且其值属于该集合的资源 -l "app in (nginx,redis)"
1
2
3
4
5
6
7
8
# kubectl describe
获取集群资源的详细信息。
kubectl describe [资源类别] <args>
- 参数:
<资源名称>
- 指定名称的资源详细信息-n [名称空间]
- 获取指定名称空间的资源信息-l [标签名]<=[值]>
- 筛选出含指定"标签名"或"标签名=值"的资源
# kubectl rollout
查看资源滚动更新的信息。
- 查看滚动更新状态
kubectl rollout status [资源类别] [资源名称]
- 查看滚动更新历史
kubectl rollout history [资源类别] [资源名称]
# kubectl api-versions
查看所有资源类别的版本。
kubectl api-versions
# kubectl explain
查看资源清单定义方式。
kubectl explain [资源类别]
- 查看指定资源类别如何定义,字段所需的值需要是object类型时,则表示是嵌套字段。
- 二级以上的字段名如果是复数s,除了时间之类的字段外,一般都是object类型。
kubectl explain [资源类别].<字段>.<字段>...
- 查看多级字段的详细信息。
# kubectl logs
查看Pod中容器的日志信息。
kubectl logs [资源类别] [资源名称] <args>
- 参数:
--tail=
- 只展示日志最后N行,如果不指定则默认打印全部-f
- 追踪打印日志-l [标签名]=[值]
- 匹配含指定标签的资源-n [名称空间]
- 指定名称空间