美文网首页
kubectl命令速查

kubectl命令速查

作者: 一瓶多先生 | 来源:发表于2021-05-03 13:38 被阅读0次

    1. 基本命令

    1.1 运行pod

    kubectl run

    如何运行一个 nginx Deployment 并将其暴露出来? 查看 kubectl run

    # start the pod running nginx
    $ kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"
    deployment "nginx-app" created
    

    1.2 查看服务

    kubectl get

    如何列出哪些正在运行?查看 kubectl get

    $ kubectl get po
    NAME              READY     STATUS    RESTARTS   AGE
    nginx-app-5jyvm   1/1       Running   0          1h
    

    如何连接到已经运行在容器中的进程?查看 kubectl attach

    使用 kubectl 命令:

    $ kubectl get pods
    NAME              READY     STATUS    RESTARTS   AGE
    nginx-app-5jyvm   1/1       Running   0          10m
    $ kubectl attach -it nginx-app-5jyvm
    ...
    

    kubectl get 定义输出格式

    $ kubectl get pods traefik-ingress-public-hsgkl   -n kube-system  -o yaml
    
    查看node
    kubectl get nodes
    
    查看所有namespace的pod
    kubectl get pods --all-namespaces
    

    查看ingress

    kubectl get ing 
    

    查看dev命名空间下dev-java-xxl-job-admin-public的ingress规则, 输出yaml格式

    kubectl get ing dev-java-xxl-job-admin-public -n dev -o yaml
    

    1.3 获取指定pod的信息

    kubectl describe pod <pod_name>
    

    2. 高级命令

    2.1 与容器交互

    kubectl exec

    $ kubectl get po
    NAME              READY     STATUS    RESTARTS   AGE
    nginx-app-5jyvm   1/1       Running   0          10m
    $ kubectl exec nginx-app-5jyvm -- cat /etc/hostname
    nginx-app-5jyvm
    

    执行交互式命令怎么办?

    $ kubectl exec -ti nginx-app-5jyvm -- /bin/sh      
    # exit
    

    更多信息请查看 获取运行中容器的 Shell 环境

    2.2 查看日志

    如何查看运行中进程的 stdout/stderr?查看 kubectl logs

    kubectl logs

    $ kubectl logs -f nginx-app-zibvs
    10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
    10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
    

    现在是时候提一下 pod 和容器之间的细微差别了;默认情况下如果 pod 中的进程退出 pod 也不会终止,相反它将会重启该进程。这类似于 docker run 时的 --restart=always 选项, 这是主要差别。在 docker 中,进程的每个调用的输出都是被连接起来的,但是对于 kubernetes,每个调用都是分开的。要查看以前在 kubernetes 中执行的输出,请执行以下操作:

    $ kubectl logs --previous nginx-app-zibvs
    10.240.63.110 - - [14/Jul/2015:01:09:01 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
    10.240.63.110 - - [14/Jul/2015:01:09:02 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.26.0" "-"
    

    查看 记录和监控集群活动 获取更多信息。

    2.3 删除pod

    如何停止和删除运行中的进程?查看 kubectl delete

    kubectl delete

    $ kubectl get deployment nginx-app
    NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-app   1         1         1            1           2m
    $ kubectl get po -l run=nginx-app
    NAME                         READY     STATUS    RESTARTS   AGE
    nginx-app-2883164633-aklf7   1/1       Running   0          2m
    $ kubectl delete deployment nginx-app
    deployment "nginx-app" deleted
    $ kubectl get po -l run=nginx-app
    # Return nothing
    

    请注意,我们不直接删除 pod。使用 kubectl 命令,我们要删除拥有该 pod 的 Deployment。如果我们直接删除pod,Deployment 将会重新创建该 pod。

    2.4 强制删除pod

    kubectl delete pod $POD_ID --grace-period=0 --force
    

    将Pod的优雅终止时间设置为0,并强制删除。

    2.5 切换namespace

    默认在default namespace下

    kubectl config set-context --current --namespace=devops
    

    3. 如果一个pod启动有问题如何排查?

    • 首先查看pods状态, 可以使用命令kubectl get pods
    (base) ➜  kubectl get pods  -n dev
    NAME                                                        READY   STATUS             RESTARTS   AGE
    dev-java-resource-back-question-provider-6bf66cd85f-zrtjt   0/1     CrashLoopBackOff   5761       20d
    
    • 如果查看是错误的状态, 可以使用kubectl describe pod [name]继续调试

    • 如果没有发现问题可以使用kubectl logs [pod-name] -n [namespace]查看日志输出

    • 如果当前pod的日志没有发现问题可以查看以前pod的输出kubectl logs --previous [pod-name] -n [namespace]

    • 如果还是不能解决问题重新启动pod, 先执行kubectl scale deployment [name] --replicas=0关闭所有pod, 再执行kubectl scale deployment [name] --replicas=1启动pod,也可以直接执行删除pod操作

    4. 资源类型

    下表列出的是 kubernetes 中所有支持的类型和缩写的别名。

    资源类型 缩写别名
    clusters
    componentstatuses cs
    configmaps cm
    daemonsets ds
    deployments deploy
    endpoints ep
    event ev
    horizontalpodautoscalers hpa
    ingresses ing
    jobs
    limitranges limits
    namespaces ns
    networkpolicies
    nodes no
    statefulsets
    persistentvolumeclaims pvc
    persistentvolumes pv
    pods po
    podsecuritypolicies psp
    podtemplates
    replicasets rs
    replicationcontrollers rc
    resourcequotas quota
    cronjob
    secrets
    serviceaccount sa
    services svc
    storageclasses
    thirdpartyresources

    4.1 格式化输出

    要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。

    输出格式 描述
    -o=custom-columns=<spec> 使用逗号分隔的自定义列列表打印表格
    -o=custom-columns-file=<filename> 使用 文件中的自定义列模板打印表格
    -o=json 输出 JSON 格式的 API 对象
    -o=jsonpath=<template> 打印 jsonpath 表达式中定义的字段
    -o=jsonpath-file=<filename> 打印由 文件中的 jsonpath 表达式定义的字段
    -o=name 仅打印资源名称
    -o=wide 以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称
    -o=yaml 输出 YAML 格式的 API 对象

    相关文章

      网友评论

          本文标题:kubectl命令速查

          本文链接:https://www.haomeiwen.com/subject/jkisrltx.html