服务器之家:专注于服务器技术及软件下载分享
分类导航

服务器资讯|IT/互联网|云计算|区块链|软件资讯|操作系统|手机数码|百科知识|免费资源|头条新闻|

服务器之家 - 新闻资讯 - 云计算 - 运维必知必会的 Kubectl 命令总结

运维必知必会的 Kubectl 命令总结

2023-09-05 12:00未知服务器之家 云计算

kubectl 常用命令指南 Kubectl 命令是操作 kubernetes 集群的最直接的方式,特别是运维人员,需要对这些命令有一个详细的掌握 Kubectl 自动补全 #setupautocompleteinbash,bash-completionpackageshouldbeinstalledfirst.$source(kubectlcompletionbash)#setupautocomplet

kubectl 常用命令指南

Kubectl 命令是操作 kubernetes 集群的最直接的方式,特别是运维人员,需要对这些命令有一个详细的掌握

Kubectl 自动补全

#setupautocompleteinbash,bash-completionpackageshouldbeinstalledfirst.$source<(kubectlcompletionbash)#setupautocompleteinzsh$source<(kubectlcompletionzsh)

Kubectl 上下文和配置

设置 kubectl 命令交互的 kubernetes 集群并修改配置信息。参阅 使用 kubeconfig 文件进行跨集群验证 获取关于配置文件的详细信息。

#显示合并后的kubeconfig配置$kubectlconfigview#同时使用多个kubeconfig文件并查看合并后的配置$KUBECONFIG=~/.kube/config:~/.kube/kubconfig2kubectlconfigview#获取e2e用户的密码$kubectlconfigview-ojsonpath='{.users[?(@.name=="e2e")].user.password}'#显示当前的上下文$kubectlconfigcurrent-context#设置默认上下文为my-cluster-name$kubectlconfiguse-contextmy-cluster-name#向kubeconf中增加支持基本认证的新集群$kubectlconfigset-credentialskubeuser/foo.kubernetes.com--username=kubeuser--password=kubepassword#使用指定的用户名和namespace设置上下文$kubectlconfigset-contextgce--user=cluster-admin--namespace=foo\&&kubectlconfiguse-contextgce

创建对象

Kubernetes 的清单文件可以使用 json 或 yaml 格式定义。可以以 .yaml .yml 、或者 .json 为扩展名。

#创建资源$kubectlcreate-f./my-manifest.yaml#使用多个文件创建资源$kubectlcreate-f./my1.yaml-f./my2.yaml#使用目录下的所有清单文件来创建资源$kubectlcreate-f./dir#使用url来创建资源$kubectlcreate-f启动一个nginx实例$kubectlrunnginx--image=nginx#获取pod和svc的文档$kubectlexplainpods,svc#从stdin输入中创建多个YAML对象$cat<<EOF|kubectlcreate-f-apiVersion:v1kind:Podmetadata:name:busybox-sleepspec:containers:-name:busyboximage:busyboxargs:-sleep-"1000000"---apiVersion:v1kind:Podmetadata:name:busybox-sleep-lessspec:containers:-name:busyboximage:busyboxargs:-sleep-"1000"EOF#创建包含几个key的Secret$cat<<EOF|kubectlcreate-f-apiVersion:v1kind:Secretmetadata:name:mysecrettype:Opaquedata:password:$(echo"s33msi4"|base64)username:$(echo"jane"|base64)EOF

显示和查找资源

    
    # Get commands with basic output
    
    # 列出所有 namespace 中的所有 service
    
    $ kubectl get services      
    
    
    
    # 列出所有 namespace 中的所有 pod $ kubectl get pods --all-namespaces
    # 列出所有 pod 并显示详细信息 $ kubectl get pods -o wide
    # 列出指定 deployment $ kubectl get deployment my-dep
    # 列出该 namespace 中的所有 pod 包括未初始化的 $ kubectl get pods --include-uninitialized
    # 使用详细输出来描述命令 $ kubectl describe nodes my-node $ kubectl describe pods my-pod
    # List Services Sorted by Name $ kubectl get services --sort-by=.metadata.name
    # 根据重启次数排序列出 pod $ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
    # 获取所有具有 app=cassandra 的 pod 中的 version 标签 $ kubectl get pods --selector=app=cassandra rc -o \ jsonpath='{.items[*].metadata.labels.version}'
    # 获取所有节点的 ExternalIP $ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
    # 列出属于某个 PC 的 Pod 的名字 # “jq”命令用于转换复杂的 jsonpath,参考 $ sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?} $ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
    # 查看哪些节点已就绪 $ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \ && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
    # 列出当前 Pod 中使用的 Secret $ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

    更新资源

    $kubectlrolling-updatefrontend-v1-ffrontend-v2.json#滚动更新podfrontend-v1$kubectlrolling-updatefrontend-v1frontend-v2--image=image:v2#更新资源名称并更新镜像$kubectlrolling-updatefrontend--image=image:v2#更新frontendpod中的镜像$kubectlrolling-updatefrontend-v1frontend-v2--rollback#退出已存在的进行中的滚动更新$catpod.json|kubectlreplace-f-#基于stdin输入的JSON替换pod#强制替换,删除后重新创建资源。会导致服务中断。$kubectlreplace--force-f./pod.json#为nginxRC创建服务,启用本地80端口连接到容器上的8000端口$kubectlexposercnginx--port=80--target-port=8000#更新单容器pod的镜像版本(tag)到v4$kubectlgetpodmypod-oyaml|sed's/\(image:myimage\):.*$/\1:v4/'|kubectlreplace-f-#添加标签$kubectllabelpodsmy-podnew-label=awesome#添加注解$kubectlannotatepodsmy-podicon-url=自动扩展deployment“foo”$kubectlautoscaledeploymentfoo--min=2--max=10

    修补资源

    使用策略合并补丁并修补资源。

    #部分更新节点kubectlpatchnodek8s-node-1-p'{"spec":{"unschedulable":true}}'#更新容器镜像;spec.containers[*].name是必须的,因为这是合并的关键字$kubectlpatchpodvalid-pod-p'{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"newimage"}]}}'#使用具有位置数组的json补丁更新容器镜像$kubectlpatchpodvalid-pod--type='json'-p='[{"op":"replace","path":"/spec/containers/0/image","value":"newimage"}]'#使用具有位置数组的json补丁禁用deployment的livenessProbe$kubectlpatchdeploymentvalid-deployment--typejson-p='[{"op":"remove","path":"/spec/template/spec/containers/0/livenessProbe"}]'

    编辑资源

    在编辑器中编辑任何 API 资源。

    #编辑名为docker-registry的service$kubectleditsvc/docker-registry#使用其它编辑器$KUBE_EDITOR="nano"kubectleditsvc/docker-registry

    Scale 资源

    #Scaleareplicasetnamed'foo'to3$kubectlscale--replicas=3rs/foo#Scalearesourcespecifiedin"foo.yaml"to3$kubectlscale--replicas=3-ffoo.yaml#Ifthedeploymentnamedmysql'scurrentsizeis2,scalemysqlto3$kubectlscale--current-replicas=2--replicas=3deployment/mysql#Scalemultiplereplicationcontrollers$kubectlscale--replicas=5rc/foorc/barrc/baz

    删除资源

    #删除pod.json文件中定义的类型和名称的pod$kubectldelete-f./pod.json#删除名为“baz”的pod和名为“foo”的service$kubectldeletepod,servicebazfoo#删除具有name=myLabel标签的pod和serivce$kubectldeletepods,services-lname=myLabel#删除具有name=myLabel标签的pod和service,包括尚未初始化的$kubectldeletepods,services-lname=myLabel--include-uninitialized#删除my-nsnamespace下的所有pod和serivce包$kubectl-nmy-nsdeletepo,svc--all

    与运行中的 Pod 交互

    #dump输出pod的日志(stdout)$kubectllogsmy-pod#dump输出pod中容器的日志(stdout,pod中有多个容器的情况下使用)$kubectllogsmy-pod-cmy-container#流式输出pod的日志(stdout)$kubectllogs-fmy-pod#流式输出pod中容器的日志(stdout,pod中有多个容器的情况下使用)$kubectllogs-fmy-pod-cmy-container#交互式shell的方式运行pod$kubectlrun-i--ttybusybox--image=busybox--sh#连接到运行中的容器$kubectlattachmy-pod-i#转发pod中的6000端口到本地的5000端口$kubectlport-forwardmy-pod5000:6000#在已存在的容器中执行命令(只有一个容器的情况下)$kubectlexecmy-pod--ls/#在已存在的容器中执行命令(pod中有多个容器的情况下)$kubectlexecmy-pod-cmy-container--ls/#显示指定pod和容器的指标度量$kubectltoppodPOD_NAME--containers

    与节点和集群 的交互

    #标记my-node不可调度$kubectlcordonmy-node#清空my-node以待维护$kubectldrainmy-node#标记my-node可调度$kubectluncordonmy-node#显示my-node的指标度量$kubectltopnodemy-node$kubectlcluster-info#将当前集群状态输出到stdout$kubectlcluster-infodump#将当前集群状态输出到/path/to/cluster-state$kubectlcluster-infodump--output-directory=/path/to/cluster-state#如果该键和影响的污点(taint)已存在,则使用指定的值替换$kubectltaintnodesfoodedicated=special-user:NoSchedule

    set 命令

    配置应用的一些特定资源,也可以修改应用已有的资源
    使用 kubectl set --help 查看,它的子命令, env image resources selector serviceaccount subject
    语法:resources (-f FILENAME | TYPE NAME) ([—limits=LIMITS & —requests=REQUESTS]

    kubectl set resources 命令

    这个命令用于设置资源的一些范围限制。
    资源对象中的Pod可以指定计算资源需求(CPU-单位m、内存-单位Mi),即使用的最小资源请求(Requests),限制(Limits)的最大资源需求,Pod将保证使用在设置的资源数量范围。
    对于每个Pod资源,如果指定了Limits(限制)值,并省略了Requests(请求),则Requests默认为Limits的值。

    可用资源对象包括(支持大小写):replicationcontroller、deployment、daemonset、job、replicaset。

    例如:

    #将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”$kubectlsetresourcesdeploymentnginx-c=nginx--limits=cpu=200m,memory=512Mi#设置所有nginx容器中Requests和Limits$kubectlsetresourcesdeploymentnginx--limits=cpu=200m,memory=512Mi--requests=cpu=100m,memory=256Mi#删除nginx中容器的计算资源值$kubectlsetresourcesdeploymentnginx--limits=cpu=0,memory=0--requests=cpu=0,memory=0

    kubectl set selector 命令

    设置资源的 selector (选择器)。如果在调用”set selector”命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。
    selector 必须以字母或数字开头,最多包含63个字符,可使用:字母、数字、连字符” - “ 、点”.”和下划线” _ “。如果指定了—resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
    注意:目前selector命令只能用于Service对象。

    语法:selector (-f FILENAME | TYPE NAME) EXPRESSIONS [—resource-version=version]

    kubectl set image 命令

    用于更新现有资源的容器镜像。

    可用资源对象包括: pod (po) replicationcontroller (rc) deployment (deploy) daemonset (ds) job replicaset (rs)

    语法:image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 … CONTAINER_NAME_N=CONTAINER_IMAGE_N
    #将deployment中的nginx容器镜像设置为“nginx:1.9.1”$kubectlsetimagedeployment/nginxbusybox=busyboxnginx=nginx:1.9.1#所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”$kubectlsetimagedeployments,rcnginx=nginx:1.9.1--all#将daemonsetabc的所有容器镜像更新为“nginx:1.9.1”$kubectlsetimagedaemonsetabc*=nginx:1.9.1#从本地文件中更新nginx容器镜像$kubectlsetimage-fpath/to/file.yamlnginx=nginx:1.9.1--local-oyaml

    资源类型

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

    运维必知必会的 Kubectl 命令总结

    格式化输出

    要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。
    运维必知必会的 Kubectl 命令总结
    Kubectl 详细输出和调试
    运维必知必会的 Kubectl 命令总结
    使用 -v --v 标志跟着一个整数来指定日志级别。
    来源:


    延伸 · 阅读

    精彩推荐