1、kubectl介绍

        在命令行下对集群、节点、pod进行管理,kubernetes官方提供了一个管理命令:kubectl

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。

1.1、kubectl命令行的语法

格式:kubectl  [command]  [TYPE]  [NAME]  [flags]

  • command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等
  • TYPE:资源对象的类型,区分大小写,能以单数、复数或简写形式表示。
  • NAME:资源对象的名称,区分大小写,如果不指定名称,系统将返回所有Pod的列表
  • flags:kubectl子命令的可选参数,比如可以使用 “-o wide“ 来显示更多的信息

 1.2、帮助

在使用命令过程中出现问题,可以通过使用 --help来获取 kubectl 命令的使用说明:

  • 获取 kubectl 的使用说明: kubectl --help

  • 获取 kubectl 子命令的使用说明:kubectl get --help / kubectl delete --help

  • 获取资源控制器说明: kubectl explain pod / rs / deployment / ·····

2、kubectl子命令使用分类

(1)基础命令

命令作          用
create通过文件名或标准输入创建资源
expose将一个资源公开为一个新的service
run在集群中运行一个特定的镜像
set在对象上设置特定的功能
get在显示一个或多个资源
explain文档参考资料
edit使用默认的编辑器编辑一个资源
delete

通过文件名、标准输入、资源名称或标签选择器来删除资源

 (2)部署命令

命令作          用
rollout管理资源的发布
rolling-update对给定的复制控制器滚动更新
scale扩容或缩容pod数量,Deployment、ReplicaSet、RC或Job
autoscale创建一个自动选择扩容或缩容并设置pod数量

(3)集群管理命令

命令作          用
certificate修改证书资源
cluster-info显示集群信息
top显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon标记节点不可调度
uncordon标记节点可调度
drain驱逐节点上的应用,准备下线维护
taint修改节点taint标记

(4)故障和调度命令

命令作          用
describe显示特定资源或资源组的详细信息
logs在一个pod中打印一个容器日志。如果pod只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器

port-forward

转发一个或多个本地端口到一个pod
proxy运行一个proxy到kubernetes API server
cp拷贝文件或目录到容器中
auth检查授权

(5)高级命令

命令作          用
apply通过文件名或标准输入对资源应用配置
patch使用补丁修改、更新资源的字段
replace通过文件名或标准输入替换一个资源
convert不同的API版本之间转换配置文件

(6)设置命令

命令作          用
label更新资源上的标签
annotate更新资源上的注释
completion用于实现kubectl工具自动补全

(7)其他命令

命令作          用
api-version打印受支持的API版本
config修改kubeconfig文件(用于访问API,比如配置认证信息)
help所有命令的帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

(8)容器管理命令对比

命令dockerctr(containerd)crictl(kubernetes)
查看运行的容器docker psctr task ls/ctr container lscrictl ps
查看镜像docker imagesctr image lscrictl images
查看容器日志docker logscrictl logs
查看容器数据信息docker inspectctr container infocrictl inspect
查看容器资源docker statscrictl stats
启动/关闭已有的容器docker start/stopctr task start/killcrictl start/stop
运行一个新的容器docker runctr run无(最小单位为pod)
修改镜像标签docker tagctr image tag
创建一个新的容器docker createctr container createcrictl create
导入镜像docker loadctr image import
导出镜像docker savectr image export
删除容器docker rmctr container rmcrictl rm
删除镜像docker rmictr image rmcrictl rmi
拉取镜像docker pullctr image pullcrictl pull
推送镜像docker pushctr image push
在容器内部执行命令ddocker execcrictl exec

3、kubectl常用命令

3.1、查看资源

  • k8s api-resources 查看资源 | apiVersion选择

3.2、新建资源

  • kubectl create -f pod.yaml
[root@master ~]# kubectl create -f pod.yaml 
pod/annotation-second-scheduler created

3.3、删除资源

  • kubectl delete -f pod.yaml 【根据yaml文件】
[root@master ~]# kubectl delete -f pod.yaml 
pod "annotation-second-scheduler" deleted
  •  kubectl delete pod nginx 【根据pod名字】
[root@master ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          24s
[root@master ~]# kubectl delete pod nginx 
pod "nginx" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.
  •  kubectl delete pod --all 【删除所有pod】
[root@master ~]# kubectl get pods -o wide 
NAME                    READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
myweb-f64b97bf5-25c99   1/1     Running   0          4m28s   10.254.4.18   node02   <none>           <none>
myweb-f64b97bf5-dp962   1/1     Running   0          4m28s   10.254.4.16   node02   <none>           <none>
myweb-f64b97bf5-vk9m7   1/1     Running   0          4m28s   10.254.4.19   node02   <none>           <none>
myweb-f64b97bf5-zfsn7   1/1     Running   0          4m28s   10.254.4.17   node02   <none>           <none>
[root@master ~]# kubectl delete pod --all
pod "myweb-f64b97bf5-25c99" deleted
pod "myweb-f64b97bf5-dp962" deleted
pod "myweb-f64b97bf5-vk9m7" deleted
pod "myweb-f64b97bf5-zfsn7" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.
  • 强制删除: kubectl delete pod xxx -n xxx --force --grace-period=0
  • 设置finalizers为空:kubectl patch pod xxx -n xxx -p '{"metadata":{"finalizers":null}}'

3.4、查看node信息

  • kubectl get nodes
[root@master ~]# kubectl get nodes 
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   7h42m   v1.23.0
node01   Ready    <none>                 6h4m    v1.23.0
node02   Ready    <none>                 7h7m    v1.23.0
node03   Ready    <none>                 7h41m   v1.23.0

3.5、 查看pod信息

  • kubectl get pod -o wide/yaml
[root@master ~]# kubectl get pod -o wide 
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          13s   10.254.5.13   node01   <none>           <none>
[root@master ~]# kubectl get pod -o yaml 
apiVersion: v1
items:
- apiVersion: v1
  kind: Pod
  metadata:
……………………

 3.6、查看所有资源信息

  • kubectl get [资源] --all-namespaces

[root@master ~]# kubectl get svc --all-namespaces 
NAMESPACE       NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
default         kubernetes                           ClusterIP   10.1.0.1       <none>        443/TCP                      9d
ingress-nginx   ingress-nginx-controller             NodePort    10.1.113.34    <none>        80:32113/TCP,443:31254/TCP   9d
ingress-nginx   ingress-nginx-controller-admission   ClusterIP   10.1.129.218   <none>        443/TCP                      9d
kube-system     kube-dns                             ClusterIP   10.1.0.10      <none>        53/UDP,53/TCP,9153/TCP       9d
p-4yjeaye       general-government                   NodePort    10.1.201.117   <none>        8001:32221/TCP               24h
p-zo6d1vn       minioarmcs                           ClusterIP   10.1.165.152   <none>        9000/TCP                     6d3h
paas-system     adminapp-szc-admin                   ClusterIP   10.1.214.178   <none>        80/TCP                       9d
paas-system     apollo                               ClusterIP   10.1.200.166   <none>        8080/TCP,8070/TCP,8090/TCP   9d
paas-system     base-smt-fileserver-saas             ClusterIP   10.1.186.253   <none>        9433/TCP                     9d

3.7、查看pod详细信息

  • kubectl describe pod nginx
[root@master ~]# kubectl describe pod nginx 
Name:         nginx
Namespace:    default
Priority:     0
Node:         node01/192.168.4.21
Start Time:   Fri, 02 Sep 2022 16:49:25 +0800
Labels:       env=test
Annotations:  <none>
Status:       Running
IP:           10.254.5.13
IPs:
  IP:  10.254.5.13
Containers:
  nginx:
    Container ID:   docker://203ebc2c6371a2f1f9bffb522b07e3dc3686a2d7ca8292140b5459a667667d25
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:b95a99feebf7797479e0c5eb5ec0bdfa5d9f504bc94da550c2f58e839ea6914f
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 02 Sep 2022 16:49:26 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-x2gv6 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-x2gv6:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              disktype=ssd
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m32s  default-scheduler  Successfully assigned default/nginx to node01
  Normal  Pulled     2m31s  kubelet            Container image "nginx" already present on machine
  Normal  Created    2m31s  kubelet            Created container nginx
  Normal  Started    2m31s  kubelet            Started container nginx

3.8、查看kube-system空间内的pod

  • kubectl get pod -n kube-system 
[root@master ~]# kubectl get pod -n kube-system 
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-q89s6          1/1     Running   0          7h46m
coredns-6d8c4cb4d-xtdxr          1/1     Running   0          7h46m
etcd-master                      1/1     Running   0          7h46m
kube-apiserver-master            1/1     Running   0          7h46m
kube-controller-manager-master   1/1     Running   0          7h46m
kube-proxy-lttsx                 1/1     Running   0          7h46m
kube-proxy-mg9ng                 1/1     Running   0          6h9m
kube-proxy-shjxm                 1/1     Running   0          7h11m
kube-proxy-zzgzn                 1/1     Running   0          7h46m
kube-scheduler-master            1/1     Running   0          7h46m

3.9、快速编写yaml文件的方法

  • 使用kubectl create 命令生成yaml文件
[root@master ~]# kubectl create deployment web --image=nginx -o yaml --dry-run=client > myweb.yaml
[root@master ~]# ls myweb.yaml 
myweb.yaml
  •  使用kubectl get 命令导出yaml文件
[root@master ~]# kubectl get deployments.apps nginx -o=yaml > myweb2.yaml
[root@master ~]# ls myweb*
myweb2.yaml  myweb.yaml

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐