• kubectl 常用命令


    查看

    • 查看所有kubelet节点
      kubectl get nodes
      kubectl get nodes -o wide --show-labels //可以看到所有节点的label
      kubectl describe node node-name //查看节点的详细信息,包括资源配置等

    • 查看所有pod
      kubectl get pods --all-namespaces
      kubectl get pods -o wide
      kubectl get pods -o wide -w //可以看到实时状态变化

    • 查看pod详情
      kubectl describe pod podname -n namespace
      kubectl get -o json pod podname -n namespace
      kubectl get pods/podname -n namespace
      kubectl get pods/podname -n namespace -o json

    • 查看所有daemonset
      kubectl get daemonset --all-namespaces

    • kubectl get rc,services

    • List one or more resources by their type and names.
      kubectl get rc/web service/frontend pods/web-pod-13je7

    • kubectl get cs
      查看集群基本组件状态

    • kubectl get csr
      查看未授权的 CSR 请求

    • kubectl certificate approve csr-name
      csr请求

    • kubectl get crd
      查看资源

    namespace相关

    • 要使用新的namespace,必须先创建,然后才能写在yaml的metadata的字段里
      kubectl create namespace newname

    节点相关

    • kubectl describe node node-name 查看节点所有信息

    设置节点不可调度/可调度

    • 计算节点状态为 Ready, 执行 kubectl cordon node-name可致此节点为不可调度
    • 计算节点状态为 Ready,SchedulingDisabled, 执行 kubectl uncordon node-name即可使之成为可调度的节点

    节点的label

    • 查看节点的所有label
      kubectl get node --show-labels
    • 给节点添加一个新label
      kubectl label nodes kube-node node=kube-node
    • 修改节点的label
      kubectl label nodes --overwrite k8s-slave node-network-driver=ovs
    • 删除节点的某个label
      kubectl label nodes kube-node node-
    • 根据node的label筛选节点
      kubectl label nodes kube-node node=kube-node
      kubectl label nodes --overwrite k8s-slave node-network-driver=sriov //修改节点k8s-slave的标签node-network-driver的值为sriov
      kubectl get node -a -l "node=kube-node"
      pod或者rc的配置项中添加如下配置,位置跟cotainer平行:
      nodeSelector:
      node: kube-node4

    节点taint 和 容器tolerations

    • 查看某节点的污点可以使用命令 kubectl describe node foo
    • kubectl taint nodes foo dedicated=special-user:NoSchedule 添加或更新节点'foo'的taint,key为'dedicated',value为'special-user',effect为NoSchedule'.
    • kubectl taint nodes foo dedicated:NoSchedule- 删除节点foo的taint,key为dedicated,effect为NoSchedule

      kubectl taint nodes foo dedicated- 删除节点foo的所有key为dedicated的污点
    • 一个污点包含一个key, value, and effect. 示例为 key=value:effect.
    • effect 只能是 NoSchedule, PreferNoSchedule or NoExecute
      有污点的节点,一般pod不会调度上去,但是如果pod能够容忍这个污点就会调度上去,这就是pod的tolerations(taint是节点的属性,tolerations是pod的属性).
      如下在PodSpec中定义了toleration,该tolerations完全匹配taint那么该pod就可以被调度到此节点:
    tolerations:
    - key: "key"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"
    
    tolerations:
    - key: "key"
      operator: "Exists"
      effect: "NoSchedule"
    

    官方指导https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

    yaml文件、配置相关

    • 查看资源的yaml
      kubectl get deploy/my-nginx --export -o yaml
      kubectl get deploy/my-nginx --export -o yaml > example.yaml

    • 生成yaml文件
      由于yaml文件格式不好记住,可以先通过kubectl命令生成yaml,再更改yaml。 –dry-run表示尝试,不真实执行。
      kubectl run --image=nginx my-nginx -o yaml --dry-run >> xxx.yaml

    • 修改API 资源的属性
      kubectl edit pod/testnew2-prd-123 -n testnew2

      //Update a container's image; spec.containers[*].name is required because it's a merge key.
      kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

      //Update a single-container pod's image version (tag) to v4
      kubectl get pod mypod -o yaml | sed 's/(image: myimage):.*$/1:v4/' | kubectl replace -f -

    • 解释资源详细信息,命令可能会显示旧的group/version,我们可以通过--api-version参数显示设置
      不知道该如何编写YAML文件的时候,就可以使用改命令来帮助我们获得更多提示信息。
      kubectl explain replicaset --api-version apps/v1

    对容器执行命令

    • 对单容器的pod执行命令,注意--后面必须有空格(以在容器内执行命令ip a为例)
      kubectl exec -it pod_name -n namespace -- ip a

      有的时候一个pod中有多个容器,只有针对整个pod的命令才有效,此时需要指定container,这里指定的是container-name(可以用kubectl describe pod查看所有的容器名称)
      kubectl exec -it podname -n namespace -c containername -- ip a

    • 强制删除pod
      kubectl delete pod podname -n namespace --force --grace-period=0

    • 文件拷贝, 如下格式把容器中指定目录的文件拷贝到本地磁盘指定目录
      kubectl cp pod-name:/path/to/file /tmp/localpath/file

    • 修改容器的镜像,如下是修改daemonset contiv-netplugin-ovs contiv-netplugin的镜像为新镜像,首先要先docker pull新镜像

      • kubectl set image ds/contiv-netplugin-ovs contiv-netplugin=new-image -n kube-system
        然后需要删除需要更新的daemonset中的pod,然后会重建pod,这个pod使用的就是新镜像. 这里的标签是container-name=new-image-name
    • 动态调整副本数

      • kubectl scale deployment.v1.apps/apitest-deployment --replicas=10 -n namespace
    • 查看pod的log

      • kubectl log -n namespace pod-name
      • 如果pod里有多个容器,需要制定容器名来查看log: kubectl log -n namespace pod-name container-1-name
      • 如果容器panic后重启,想查看panic日志,需要查看上一个容器的log: kubectl logs --previous podname -n namespace
  • 相关阅读:
    leetcode-9-basic-binary search
    selection problem-divide and conquer
    leetcode-8-pointer
    leetcode-7-hashTable
    前端学习之——js解析json数组
    Google浏览器如何加载本地文件
    JAVA全栈工程师应具备怎样的知识体系?
    Java全栈工程师知识体系介绍
    数据可视化工具
    使用js的FileReader对象
  • 原文地址:https://www.cnblogs.com/janeysj/p/11192795.html
Copyright © 2020-2023  润新知