kubectl 常用命令

查看

  • 查看所有kubelet节点
    kubectl get nodes
    kubectl get nodes -o wide --show-labels //可以看到所有节点的label

  • 查看所有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

namespace相关

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

节点的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-

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 -

对容器执行命令

  • 对单容器的pod执行命令,注意--后面必须有空格
    kubectl exec -it pod_name -n namespace -- ovs-vsctl show

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

  • 文件拷贝
    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

常见问题

    • 计算节点状态为 Ready,SchedulingDisabled, 执行 kubectl uncordon node-name即可。

    • 根据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

posted on 2019-12-17 11:55  ExplorerMan  阅读(528)  评论(0编辑  收藏  举报

导航