kubectl命令常用操作示例
获取集群相关信息
1 | # 显示的是当前使用的客户端及服务端程序版本信息 |
##
查看 api 信息
⚠️ 注:以下为约 k8s 1.20 集群的
api-resources/api-versions快照,其中大量*beta*版本已在新版中被移除或转正,常见对应关系:batch/v1beta1(CronJob)→batch/v1(1.25 移除 beta);rbac.authorization.k8s.io/v1beta1→rbac.authorization.k8s.io/v1(1.22 移除);extensions/v1beta1、networking.k8s.io/v1beta1(Ingress)→networking.k8s.io/v1(1.22 移除);policy/v1beta1→policy/v1,其中 PodSecurityPolicy 已于 1.25 整体移除;autoscaling/v2beta1、autoscaling/v2beta2→autoscaling/v2;discovery.k8s.io/v1beta1→discovery.k8s.io/v1。
1 | [root@k8s01 ~]# kubectl api-resources |
创建资源对象
kubectl run
kubectl expose
kubectl create
kubectl apply
1 | # 创建名为nginx-deploy的Deployment控制器资源对象 |
查看资源对象
kubectl get : 可分类列出资源对象及其相关的状态信息
1 | # 列出系统上所有的Namespace资源对象 |
1 | # k8s集群上任一节点 均可访问 |
打印资源对象的详细信息
每个资源对象都包含着用户期望的状态(Spec)和现有的实际状态 (Status)两种状态息,kubectl get -o{yaml|josn} 或 kubectl describe 命令都能够打印出指定资源对象的详细描述信息。
1 | # 查看kube-system名称空间中拥有标签component=kube-apiserver的Pod对象的资源配置清单(期望的状态)及当前的状态信息,并输出为yaml格式 |
打印容器中的日志信息
通常一个容器中仅会运行一个进程(及其子进程),此进程作为PID为1的进程接收并处理管理信息,同时将日志直接输出至终端中,而无须再像传统的多进程系统环境那样将日志保存于文件中,因此容器日志信息的获取一般要到其控制上进行。
kubectl logs 命令可打印Pod对象内指定容器的日志信息,命令格式为 kubectl logs[-f][-p](POD|TYPE/NAME)[-c CONTAINER][options]”kubectl logs -f kubectl logs –tail=100 -f `
输出最后 100 行日志到文件
1 | kubectl logs --tail=100 -n rook-ceph rook-ceph-operator-6f7f6b96d-vqx5c > /tmp/rook-ceph-operator.log |
1 | # 查看名称空间kube-system中仅有一个容器的Pod对象kube-apiserver-master.ilinux.io的日志 |
在容器中执行命令
kubectl exec 命令便是用于在指定的容器内运行其他应用程序的命令.
1 | # ,在kube-system名称空间中的Pod对象kube-apiserver-master.ilinux.io上的唯一容器中运行ps命令 |
若 Pod 对象中存在多个容器,则需要以 -c 选项指定容器后再运行。
删除资源对象
kubectl delete
对于受控于控制器的对象来说,删除之后其控制器可能会重建出类似的对象
1 | # 删除默认名称空间中名为nginx-svc的Service资源对象 |
有些资源类型(如 Pod ),支持优雅删除的机制,它们有着默认的删除宽限期,不过,用户可以在命令中使用 --grace-period 选项或 --now 选项来覆盖默认的宽限期。
1 | kubectl get deployments |
1 | [root@k8s01 storage]# kubectl run myapp --image=nginx:1.7.9 --port=80 --dry-run=client # 并未真正执行 |
查看资源占用资源情况
需要安装 metrics-server1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[root@test-173 ~]# kubectl top pod -n kube-system
NAME CPU(cores) MEMORY(bytes)
calico-kube-controllers-d8d4d9587-cbsn6 7m 17Mi
calico-node-dt2bh 46m 35Mi
calico-node-fgwkj 43m 23Mi
calico-node-fj8gp 58m 22Mi
calico-node-tth8k 30m 22Mi
coredns-59c8bd8884-pcnbt 9m 16Mi
coredns-59c8bd8884-xqnnj 10m 14Mi
heapster-7d7fc6648b-kkd9q 1m 17Mi
kubernetes-dashboard-96f697bc5-w942c 0m 8Mi
metrics-server-67cb878c78-8q7jq 3m 20Mi
nginx-ingress-controller-kfht8 14m 77Mi
nginx-ingress-controller-rr7tn 9m 80Mi
nginx-ingress-controller-wfnmx 10m 77Mi
nginx-ingress-controller-whcqg 6m 84Mi
nginx-ingress-default-backend-58c5c69f7c-mhr2m 0m 3Mi
tiller-deploy-7bb9858659-w84j9 0m 19Mi
[root@test-173 ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
172.20.40.107 513m 3% 5713Mi 40%
172.20.40.173 915m 2% 13955Mi 46%
172.20.40.196 571m 3% 4313Mi 30%
172.20.40.249 282m 1% 5512Mi 38%
pod 排序
按时间排序1
2kubectl get pod --sort-by=.status.startTime
kubectl get pod --sort-by=.metadata.creationTimestamp