代码编织梦想

kubectl 具备丰富的命令,其使用方法如下:
kubectl [flags] [options]
通过 "kubectl --help"来查找指定命令的更多信息;
通过 “kubectl options” 来查找所用命令行选项 (适用于所有命令).

此处根据 kubectl --help 将各类命令加以分类,后续将按照分类补充各命令的使用案例。

1 Basic Commands (Beginner)

  1. create
    Create a resource from a file or from stdin.
    create 直接创建一个资源,若资源已经存在,继续创建的时候会报错;
    apply -f resource.yaml 会创建并更新该资源,若该资源存在则更新对应资源;
    1) 通过dry-run 的方式创建一个deployment 基本信息
    kubectl create deployment my-web --image=nginx --dry-run=client -o yaml >my-web.yaml
    通过 apply -f 创建实际的deployment
    kubectl apply -f my-web.yaml 
    2)创建ns
    kubectl create namespace test-online2 --dry-run=client -o yaml
    等价于yaml: 
    cat << EOF >test-online2.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test-online2
    EOF
    kubectl apply -f test-online2.yaml
    3) 创建一个 pod
    $ cat pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: web-pod
      namespace: test-online
    spec: 
      containers:
      - image: nginx:latest
        name: web-pod
        ports:
        - name: web-port
          containerPort: 80
          protocol: TCP
     kubectl apply -f pod.yaml 
    
  2. expose
    使用 replication controller, service, deployment 或者 pod 并暴露它作为一个新的 Kubernetes Service
    $ kubectl expose deployment my-web --port=5000 --target-port=5000 --type=NodePort
    
    $ kubectl get svc
    NAME     TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
    my-web   NodePort   10.1.175.63   <none>        5000:32020/TCP   4m5s
    
    此时通过nodeIP:NodePort可以正常访问my-web 中的5000端口: 在这里插入图片描述
  3. run
    在集群中运行一个指定的镜像
    在当前命名空间中创建一个pod,容器端口为80
    kubectl run nginx2  --image=nginx:latest --port=80
    等价:
    apiVersion: v1
    kind: Pod
    metadata:
     creationTimestamp: null
     labels:
       run: nginx2
     name: nginx2
    spec:
     containers:
     - image: nginx:latest
       name: nginx2
       ports:
       - containerPort: 80
       resources: {}
     dnsPolicy: ClusterFirst
     restartPolicy: Always
    status: {}
    
  4. set
    为 objects 设置一个指定的特征
    1) 设置 my-web 中的容器nginx的镜像为nginx:latest
    kubectl set image deployment/my-web nginx=nginx:latest
    2) 设置 my-web 中的环境变量 env_dir为/local
    kubectl set env deployment/my-web env_dir=/local
    3) 查看所有pod的环境变量
    kubectl set env  pods --all --list
    

2 Basic Commands (Intermediate)

  1. explain
    查看资源的文档
    1)查看pod 的所有子字段的文档
    kubectl explain pods
    2)查看pod的spec.containers 的所有子字段文档
    kubectl explain pods.spec.containers
    
  2. get
    显示一个或更多 resource
     -o wide 可以查看扩展信息
    1) 获取 pod 信息
    $ kubectl get pods  -n=test-online 等价 kubectl get pods  --namespace=test-online
    NAME                  READY   STATUS    RESTARTS   AGE
    web-96d5df5c8-4q4vx   1/1     Running   0          62m
    $ kubectl get pods  --namespace=test-online  -o wide
    NAME                  READY   STATUS    RESTARTS   AGE   IP            NODE                              NOMINATED NODE   READINESS GATES
    web-96d5df5c8-4q4vx   1/1     Running   0          63m   10.244.1.15   test02.i.xxx.net   <none>           <none> 
    
    jsonpath 可以查看pod信息指定key的数据,若直接为"{}", 则返回一个未格式化的大json字符串
    $ kubectl get pod  web-96d5df5c8-4q4vx -o jsonpath="{.metadata.labels}"
    {"app":"web","pod-template-hash":"96d5df5c8"}
    
    2) 查看 configmap 信息
    $ kubectl get configmap  -n=kube-public
    NAME           DATA   AGE
    cluster-info   1      3d23h
    
    3)查看node信息,并显示label
    kubectl get node -A --show-labels
    4)查看ns信息
    kubectl get ns(或者 namespaces)
    
  3. edit
    在服务器上编辑一个资源
    1) 编辑 deployment my-web
    kubectl edit deployment/my-web
    2) 编辑 pod nginx2
    kubectl edit pod nginx2 [-o json 以json格式编辑]
    
  4. delete
    Delete resources by filenames, stdin, resources and names, or by resources and label selector
    1) 删除pod nginx2
    kubectl delete pod nginx2
    2) 删除ns test-online2
    kubectl delete namespace test-online2
    或者 
    kubectl delete -f test-online2.yaml(1.1 创建ns中的yaml)
    

3 Deploy Commands

  1. rollout
    Manage the rollout of a resource
    1) 回滚到前一个版本
    kubectl rollout undo deployment/my-web 
    2)查看回滚历史记录
    kubectl rollout history deployment/my-web
    
  2. scale
    Set a new size for a Deployment, ReplicaSet or Replication Controller
    kubectl scale --replicas=2 deployment/my-web
    
  3. autoscale
    自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量
    kubectl autoscale deployment my-web --min=2 --max=3
    此时可以通过hpa 查看pod数量,若再次scale为1,则过一会儿会自动伸缩为2
    $ kubectl get hpa
    NAME     REFERENCE           TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    my-web   Deployment/my-web   <unknown>/80%   2         3         2          111s
    若想取消自动伸缩,则直接delete hpa 即可 :
    kubectl delete hpa my-we
    
    使用autoscale后发现报错:failed to get cpu utilization: missing request for cpu,对应上述TARGETS中的unknown;
    错误原因:创建deployment时候没有设置cpu request信息;
    此时设置 spec.containers.resources 为如下内容即可:
          resources: 
            requests:
              cpu: "50m"
              memory: "50Mi"
    注意:cpu 带单位的时候必须带双引号,内存有单位必须带双引号;
    
    设置cpu 和 memory 后,再配置hpa: kubectl autoscale deployment my-web --cpu-percent=15 --min=2 --max=3
    $ kubectl  get hpa
    NAME     REFERENCE           TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    my-web   Deployment/my-web   1%/15%    2         3         2          88s
    此时在另外一个pod里面持续访问ubuntu-flask服务,就会发现cpu使用率在逐渐增加,当大于15%的时候就会开始扩容了;当请求访问完成后cpu降低了,过一段时间又缩容为2(约5min后缩容为2,cpu降低后不会立马缩容回来,主要为了防止流量又立刻突增)for i in {1..1000};do wget http://10.1.175.63:5000/hello ;sleep 0.1;done
    
    Kubernetes:HPA 详解-基于 CPU、内存和自定义指标自动扩缩容

4 Cluster Management Commands

  1. certificate
    修改 certificate 资源.
  2. cluster-info
    显示集群信息
    1) 查看集群基础信息,包括master 和kubedns
    $ kubectl cluster-info 
    Kubernetes master is running at https://10.120.75.102:6443
    KubeDNS is running at https://10.120.75.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    2) 诊断集群
    kubectl cluster-info dump
    输出很多集群诊断信息
    
  3. top
    Display Resource (CPU/Memory/Storage) usage.
    kubectl top node [node-name 查看指定node的cpu mem信息] # (不指定node-name)显示所有节点cpu 内存使用情况
    kubectl top pod -A # 显示所有pod 的cpu 和 内存使用情况
    
  4. cordon
    标记 node 为 unschedulable
    kubectl cordon node-name 
    标记不可调度后,get nodes 发现 status 变为 Ready,SchedulingDisabled 
    
  5. uncordon
    标记 node 为 schedulable
    kubectl uncordon node-name 
    
  6. drain
    Drain node in preparation for maintenance
    该操作为驱逐或者删除node上的pod,常见常见为磁盘爆了会出现pod被驱逐现象
    $ kubectl drain node-name
    
  7. taint
    更新一个或者多个 node 上的 taints
    1) 将node01 设置污点,使其不可调度(若已有disktype标签,则会更新value为ssd,没有则添加标签)
    kubectl taint node node01 disktype=ssd:NoSchedule
    默认情况下,kubeadm 中的master就被设置为 node-role.kubernetes.io/master:NoSchedule ,因此一般的实例 master 是无法被调度到master上的;
    若通过tant ndoe master-name node-role.kubernetes.io/master:NoSchedule- 去掉污点,则master也可以被调度
    2)去掉taints,恢复node01位可调度
    kubectl taint node node01 disktype:NoSchedule-
    

5 Troubleshooting and Debugging Commands

  1. describe
    显示一个指定 resource 或者 group 的 resources 详情

    1) 查看指定ns下的pod详细信息,当pod无法正常拉起的时候可以通过这种方式排错
    kubectl -n test-online describe po my-web-7d99c588c5-tp5z5
    2) 查看 node详细信息
    kubectl describe nodes node_name
    该命令会返回 Name,Roles,Labels,Annotations,Conditions,Capacity(cpu,内存,存储)、Events(可以用于排错)等重要信息;
    
  2. logs
    输出容器在 pod 中的日志

    1) 输出指定pod 的日志
    kubectl logs web-96d5df5c8-mj4r6
    2)输出指定pod的最后2行日志
    kubectl --tail=2 logs web-96d5df5c8-mj4r6
    3)输出最近10小时的日志
    kubectl --since=10h logs web-96d5df5c8-mj4r6
    
  3. attach
    Attach 到一个运行中的 container

  4. exec
    在一个 container 中执行一个命令;
    当前同时支持 pod cmd 和 pod -- cmd模式,后续会抛弃pod cmd 模式;

    1) 单个容器
    $ kubectl exec web-96d5df5c8-4q4vx  -- hostname
    web-96d5df5c8-4q4vx
    2)多个容器, 通过  -c container_name 来选择接入哪个容器
    kubectl -n test-online exec my-web-698c8ccc85-qxh9l  -c flask-app -- bash
    
  5. port-forward
    Forward one or more local ports to a pod

  6. proxy
    运行一个 proxy 到 Kubernetes API server

  7. cp
    复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.

    1) 拷贝文件a.txt 到指定ns的 pod web-96d5df5c8-mj4r6 中 
    $ kubectl cp a.txt -n test-online web-96d5df5c8-mj4r6:/
    $ kubectl exec -n test-online web-96d5df5c8-mj4r6 -- cat /a.txt
    This is a.txt
    2)从指定 ns 的 pod web-96d5df5c8-mj4r6 中拷贝文件到本地
    拷贝文件到本地 a.txt, 注意此处 :a.txt 不能写为 :/a.txt, 因为当前不支持绝对路径,后面本地不可以写为 具体路径,只需要写一个名称即可
    kubectl cp test-online/web-96d5df5c8-mj4r6:a.txt a.txt
    拷贝pod 中文件加 dir为本地文件夹dir:
    kubectl cp test-online/web-96d5df5c8-mj4r6:dir dir
    3) 通过-c指定pod中某个容器
    $ kubectl -n xxx-iserving cp videomocap-service-5f8864d648-rgpj6:output/logs logs -c videomocap-service
    将命令将该服务videomocap-service容器workdir的output/logs 拷贝到当前logs目录。
    

    注意
    k8s 中的cp 暂时不支持绝对路径(pod_name:/a.txt 会报错),默认路径为work dir的路径;
    若没有通过-c container_name 来指定容器,则默认将 文件拷贝到第一个容器中;

  8. auth
    Inspect authorization

6 Advanced Commands

  1. diff
    Diff live version against would-be applied version
  2. apply
    通过文件名或标准输入流(stdin)对资源进行配置
    1) 创建deployment|pod|service 等资源
     将资源配置详信息写到 yaml中,通过 -f 指定文件即可创建相关资源;
     kubectl apply -f dployment-my-web.yaml
    
  3. patch
    使用 strategic merge patch 更新一个资源的 field(s)
  4. replace
    通过 filename 或者 stdin替换一个资源
  5. wait
    Experimental: Wait for a specific condition on one or many
    resources.
  6. convert
    在不同的 API versions 转换配置文件
  7. kustomize
    Build a kustomization target from a directory or a remote url.

7 Settings Commands

  1. label
    更新在这个资源上的 labels
    默认情况下,master节点角色为master,其它节点角色为none,可以通过如下方式将其它节点标记为node1角色
    $ kubectl label nodes node_name node-role.kubernetes.io/node1=
    删除标(将最后的=改为-即可)
    $ kubectl label nodes node_name node-role.kubernetes.io/node1-
    
  2. annotate
    更新一个资源的注解
  3. completion
    Output shell completion code for the specified shell (bash or zsh)
    linux:
    source <(kubectl completion bash)
    mac:
    source <(kubectl completion zsh)
    

8 Other Commands

  1. alpha
    Commands for features in alpha
  2. api-resources
    Print the supported API resources on the server
  3. api-versions
    Print the supported API versions on the server, in the form of “group/version”
  4. config
    修改 kubeconfig 文件
    修改默认 ns 为test-online(k8s 默认的为default ns)
    kubectl config set-context $(kubectl config current-context) --namespace=test-online
    
  5. plugin
    Provides utilities for interacting with plugins.
  6. version
    输出 client 和 server 的版本信息
  7. 设置kubectl 自动补全
    apt-get install bash-completion
    source /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    注意:<( 之间不能有空格,否则会报错
    

9 说明

docs/reference/kubectl/overview/
kubectl/kubectl-commands

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/u011127242/article/details/111086728

Kubeedge 1.5 部署指南-爱代码爱编程

Kubeedge 1.5 部署指南 本文介绍了如何在一台ubuntu18.04和一台装有ubuntu20.04的树莓派4B上部署kubeedge1.5的过程。 其中ubuntu作为cloud节点,树莓派4B作为edge节点。 1. 系统配置 1.1 集群环境 主机名系统ip角色负载master-nodeubuntu18.0410.112.55.6

Kubernetes-污点和容忍-爱代码爱编程

污点和容忍 污点(Taints) 前面的调度方式都是站在Pod的角度上,通过在Pod上添加属性,来确定Pod是否要调度到指定的Node上,其实我们也可以站在Node的角度上,通过在Node上添加污点属性,来决定是否允许Pod调度过来。 Node被设置上污点之后就和Pod之间存在了一种相斥的关系,进而拒绝Pod调度进来,甚至可以将已经存在的Pod驱逐出去

部署 Kubernetes 的 Web 管理界面——基于 K8s 部署-爱代码爱编程

部署 Kubernetes 的 Web 管理界面 一、部署 Kubernetes Dashboard web 界面1.创建 dashboard-deployment.yaml 配置文件2.创建 dashboard-service.yaml 配置文件3.准备 Kubernetes 相关的镜像4.启动 dashboard 的 deployment 和

Flink1.12 native kubernetes 演进之路-爱代码爱编程

点击上方 "zhisheng"关注, 星标或置顶一起成长 Flink 从入门到精通 系列文章 Flink 1.10 Flink 1.10 开始支持将 native kubernetes 作为其资源管理器。在该版本中,你可以使用以下命令在你的 kubernetes 集群中创建一个flink session。 ./bin/kubernetes-s

Kubernetes曝出“先天性漏洞”,所有版本都中招-爱代码爱编程

点击上方“程序猿技术大咖”,关注加群讨论 Kubernetes(又名K8s)是Google开源的容器集群管理系统(谷歌内部:Borg),现在由Cloud Native Computing Foundation维护,旨在帮助提升Docker容器化工作负载、服务、应用程序的部署、扩展和管理的自动化程度和便捷性。 Kubernetes通过将应用程序

kubeadm升级K8s集群1.19.0到V1.20.0-爱代码爱编程

文章目录 一、注意事项二、升级管理节点:`2.1.查找最新版本号``2.2.升级kubeadm``2.3.驱逐node上的pod,且不可调度``2.4.检查集群是否可以升级,并获取可以升级的版本``2.5.执行升级``2.6.取消不可调度``2.7.升级kubelet和kubectl``2.8.重启kubelet`三、升级工作节点`3.1.升级ku

k8s常用命令kubectl备忘-爱代码爱编程

常用命令备忘: 1. kubectl get pod -n ingress-nginx 查看 pod : -n ingress-nginx: -n 后面加上namespace名字可以查看当前namespace下的pod 2. kubectl get pod -n ingress-nginx -o -w 查看 pod 及详细信息 : -n ingre

k8s,盘他!kubectl常规命令操作集锦-爱代码爱编程

文章目录 前言一:kubectl管理1.1:使用kubectl命令管理项目的生命周期1.1.1:创建1.1.2、发布1.1.3:更新1.1.4:回滚1.1.5:删除1.2:其他常规操作如有疑问可评论区交流! 前言 一:kubectl管理 kubectl是管理k8s的命令行工具,通过生成json格式传递给apiserver进行一些操作 更

k8s集群管理----kubectl命令-爱代码爱编程

k8s集群管理----kubectl命令 文章目录 k8s集群管理----kubectl命令1. kubectl2. kubectl命令格式 1. kubectl kubectl的命令kubectl annotate – 更新资源的注解。 kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本。 kub