美文网首页
kubectl 命令

kubectl 命令

作者: 河码匠 | 来源:发表于2023-01-29 13:03 被阅读0次

    基本命令初级

    命令 语法 说明
    create kubectl create -f filename [flags] 从配置文件或 stdin 中创建资源对象
    expose kubectl expose (-f filename | type name) [--port=port] [--protocol=tcp|udp|sctp] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options] 将已经存在的一个 rc,service,deployment 或 pod 暴露为一个新的 service
    set kubectl set SUBCOMMAND [options] 设置资源对象的某个特定信息
    run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] 基于一个镜像在 kubernetes 集群上启动一个 deployment

    基本命令中级

    命令 语法 说明
    explain kubectl explain [--include-extended-apis=true] [--recursive=false] [flags] 对资源对象属性的详细说明
    get kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns-file|custom-columns|wide] (type[.version][.group] [name | -l label] | type[.version][.group]/name ...) [flags] [options] 显示一个或多个资源对象的该要信息
    -l:指定查看的标签 如:-l key=value
    --show-labels: 显示标签
    -A/--all-namespace: 所有 namespace 下的资源
    -w 动态查看资源状态
    --kubeconfig: 指定使用的配置文件,默认~/.kube/config
    delete kubectl delete [-f filename | type name | -l label] [flags] 从配置文件,stdin,资源名称或label selector 删除资源对象
    edit kubectl edit [-f filename | type name | type/name] [flags] 编辑资源对象的属性,在线更新

    扩展命令

    命令 语法 说明
    rollout kubectl rollout SUBCOMMAND [options] 对 deployment 进行管理,可用操作包括:history,pause,resume,undo,status
    scale kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [options] 扩容/缩容一个 deployment,replicaSet,RC 或 job 中的 pod 的数量
    autoscale kubectl antoscale [-f filename | type name | type/name] 对 deployment,replicaSet 或 replicationController 进行水平自动扩容和缩容的设置

    集群管理命令

    命令 语法 说明
    certificate kubectl certificate SUBCOMMAND [options] 修改自签证书
    cluster-info kubectl cluster-info [flags] 显示集群 master 和内置服务的信息
    top kubectl top node 查看 node 或 pod 的资源使用情况,需要在集群中运行 metics server
    cordon kubectl cordon node [flags] 将 node 标记 node 为 unschedulable
    uncordon kubectl uncordon node 标记 node 为 schedulable
    drain kubectl drain node [flags] 首先将 node 设置为 unscheduled,然后删除在该 node 上运行的所有 pod,但不会删除由 api server 管理的 pod
    taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] 设置 node 的 taint 信息,用于将特定的 pod 调度到特定的 node 的操作

    故障排除和调试命令

    命令 语法 说明
    describe kubectl describe [-f filename | type name] [flags] 描述一个或多个资源对象的详细信息
    logs kubectl logs pod [-c container] [--follow] [flags] 打印一个容器的日志
    attach kubectl attach POD -c container [flags] 附着到一个正在允许的容器上
    exec kubectl exec (pod | type/name) [-c container] [flags] -- command [args...] [options] 执行一个容器中的命令
    -i: 交互模式
    -t: 为终端方式
    -c:指定进去到 pod 中的那个容器里面
    -- command:要运行的命令,例如:-- /bin/bash
    port-forward kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] 将本机的某个端口映射到 pod 的端口号,通常用于测试
    proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [options] 将本机某个端口号映射到 api server 上
    auth kubectl auth [flags] [options] 检查 RBAC 权限
    cp kubectl cp <file-spec-src> <file-spec-dest> [options] 复制 files 和 directories 到 containers 和从容器中复制 files 和 directories

    高级命令

    命令 语法 说明
    diff kubectl diff -f filename [options] 查看配置文件与当前系统中正在运行的资源对象的差异
    apply kubectl apply -f filename [flags] 从配置文件或 stdin 中对资源对象进行配置更新
    patch kubectl patch (-f filename | type name) [-p patch|--patch-file file] [options] 以 merge 形式对资源的某部分字段的值进行修改
    replace kubectl replace -f filename [flags] 从配置文件或 stdin 替换资源对象

    设置命令

    命令 语法 说明
    label kubectl label [--overwrite] (-f filename | type name) key_1=val_1 ... key_n=val_n [--resource-version=version] [options] 设置或更新这个资源的 label
    annotate kubectl annotate [-f filename | type name | type/name] key1=value1,key2=value2 添加或更新资源对象的 annotation 信息
    completion kubectl completion shell [flags] 输出 shell 命令的执行结果

    其他命令

    命令 语法 说明
    api-version kubectl api-version [flags] 列出当前系统支持的 api 版本列表,格式为"group/version"
    api-resources kubectl 列出 api 资源
    config kubectl config SUBCOMMAND [flags] 修改 kubeconfig 文件
    plugin kubectl plugin [flags] [options] 在 kubectl 命令行适用用户自定义的插件
    version kubectl version 查看版本信息

    -o 输出格式参数说明

    get 等命令中会用到 -o

    输出格式 说明
    -o=custom-columns=<spec> 自定义列名进行输出,以逗号分割
    -o=custom-columns-file=<filename> 从文件中获取自定义列名进行输出
    -o=json 以 json 格式输出
    -o=jsonpath=<template> 输出 jsonpath 表达式定义的字段信息
    -o=jsonpath-file=<filename> 商促局 jsonpath 表达式定义的字段信息,来源于文件
    -o=name 仅输出资源对象的名称
    -o=wide 输出额外信息,对于 pod 将输出 pod 所在 node 名
    -o=yaml 以 yaml 格式输出内容

    常用命令汇总

    关于 pod 的

    • 获取指定标签的 pod 列表
    kubectl get pods -l key-value
    
    • 列出所有 pod 中某个标签的值
    root@master:~/k8s# kubectl get pods -A -L k8s-app
    NAMESPACE     NAME                                       READY   STATUS    RESTARTS      AGE   K8S-APP
    kube-system   calico-kube-controllers-6744f6b6d5-hjwqp   1/1     Running   0             21h   calico-kube-controllers
    kube-system   calico-node-9fqfg                          1/1     Running   0             21h   calico-node
    kube-system   calico-node-hv2tf                          1/1     Running   0             21h   calico-node
    kube-system   calico-node-ts6hs                          1/1     Running   0             21h   calico-node
    kube-system   coredns-7f8cbcb969-9j5v6                   1/1     Running   0             21h   kube-dns
    kube-system   coredns-7f8cbcb969-vnz5h                   1/1     Running   0             21h   kube-dns
    
    • 在 pod 列表中查看 ip 和分配到那个节点
    kubectl get pods -o wide
    
    • 指定 namespace 查看 pod
    kubectl get pods -n xxxx
    
    • 给 pod 添加标签
    kubectl label pods xxx key=value
    
    • 查看 pod 所有标签
    kubectl get pods --show-labels
    
    • 查看 pod 详细信息
    kubectl describe pods xxx
    
    • 进入pod中的某个容器
    kubectl exec -it pod名 -c 容器名 -- /bin/bash
    
    • 删除 pod
    kubectl delete pods xxx
    
    • 删除基于 yaml 创建的 pod
    kubectl delete -f xxx.yaml
    
    • 查看 pod yaml 配置
    kubectl get pods xxx -o yaml
    

    关于 deployment 的

    • 查看 deployment 详情
    kubectl describe deploy xxx
    
    • 查看滚动跟新版本
    kubectl rollout history deployment xxx
    
    • 回滚到指定版本
    kubectl rollout undo deployment/xxx --to-revision=版本号
    
    • 使用命令修改策略
    kubectl patch deployment xxx -p '{"spec":{"strategy":{"rollingUpdate": {"maxSurge":1,"maxUnavailable":1}}}}'
    
    • 修改 deployment pod 中某个容器的镜像
    kubectl set image deployment deployment名 容器名=镜像地址 -n 命名空间
    
    • 暂停 deployment 滚动跟新
    kubectl rollout pause deployment deployment名 -n 命名空间
    
    • 恢复 deployment 滚动跟新
    kubectl rollout resume deployment deployment名 -n 命名空间
    

    关于 service

    查看 service

    kubectl get svc
    

    查看 service 详情

    kubectl describe svc xxx
    

    关于 node 的

    • 查看 node 节点标签
    klubectl get nodes --show-lables
    
    • node 节点添加标签
    kubectl label nodes xxx key=value
    
    • 删除 node 节点标签
    kubectl label nodes xxx key-
    
    • 定义 node 污点
    kubectl taint nodes 节点名 key=value
    
    例子
    kubectl taint nodes 节点名 node-aaa=production:NoSchedule
    
    详情中
    Taints:             nodeaaa=production:NoSchedule
    

    命名空间

    • 查看命名空间
    kubectl get ns
    
    • 创建命名空间
    kubectl create ns xxx
    

    pv 和 pvc 相关命令

    查看 pv 或 pvc

    kubectl get pv/pvc
    

    ConfigMap 相关命令

    • 查看 ConfigMap
    kubectl get cm
    
    • 查看 ConfigMap 详情
    kubectl describe cm xxx
    
    • 创建 key-value 方式 ConfigMap
    # --from-literal 添加 key=value 参数
    kubectl create configmap 名字 --from-literal=键=值 --from-literal=键2=值2
    
    • 创建文件 ConfigMap
    kubectl create configmap 名字 --from-file=键=配置文件1 --from-file=键2=配置文件2
    或
    这样 key 就是文件名
    kubectl create configmap 名字 --from-file=配置文件1
    
    • 创建目录 ConfigMap
    这样 key 就是文件名
    kubectl create configmap 名字 --from-file=目录
    

    Secret 相关命令

    • 查看 Secret
    kubectl get secret
    
    • 查看 Secret 详情
    kubectl describe secret xxx
    
    • 创建 generic 形式的。伪加密通过 base64 decode 可以解密
    kubectl create secret generic 名字 --from-literal=键=值 --from-literal=键2=值2
    

    Role ClusterRole 相关命令

    • 查看角色
    kubectl get role/clusterrole
    
    • 查看角色详情
    kubectl describe role/clusterrole xxx
    
    • 用户和权限绑定

    命名空间 中创建 rolebinding名,将 用户名clusterrole名字 进行绑定。
    这里的 --user 是 kubectl 客户端的用户

    kubectl create rolebinding rolebinding名 --clusterrole=clusterrole名字 --user=用户名 --namespace=命名空间
    

    命名空间a 下创建 rolebinding名字,将 命名空间 下的 :ServiceAccount账户 绑定在 clusterrole名字

    kubctl create rolebinding rolebinding名字 --clusterrole=clusterrole名字 --serviceaccount=命名空间:ServiceAccount账户 --namespace=命名空间a
    

    创建 clusterrolebinding名,将 用户名clusterrole名 进行绑定
    这里的 --user 是 kubectl 客户端的用户

    kubectl create clusterrolebinding clusterrolebinding名 --clusterrole=clusterrole名 --user=用户名
    

    创建 clusterrolebinding名,将 ServiceAccount账户clusterrole名 进行绑定

    kubectl create clusterrolebinding clusterrolebinding名 --clusterrole=clusterrole名 --serviceaccount=ServiceAccount账户
    

    创建 kubectl 客户端用户

    • 生成新用户相关证书
    私钥
    umask 077; openssl genrsa -out xxx.key 2048
    
    请求证书
    openssl req -new -key xxx.key -out xxx.csr -subj "/CN=xxx"
    
    生成一个证书
    openssl x509 -req -in xxx.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out xxx.crt -days 3650
    
    • kubectl 下新增用户和配置 kube/config
    kubectl config set-credentials xxx --client-certificate=./xxx.crt --client-key=./xxx.key --embed-certs=true  
    
    在 kubeconfig下新增加一个 xxx 这个账号
    kubectl config set-context xxx@kubernetes --cluster=kubernetes --user=xxx
    
    • 切换账号
      这时的账号是没有任何权限的需要使用 rolebinding 等绑定权限
      这个账号可以和操作系统新增的账户联合使用,修改操作系统的新增账户的 ~/.kube/config 为 kubectl 新增的 xxx 配置即可
    kubectl config use-context xxx@kubernetes
    

    其他

    • 查看 kubectl config 信息
    kubectl config view
    
    • 查看日志
    kubectl logs xxx
    
    • 查看资源配额
    kubectl get resourcequota -n xxx
    
    • 动态查看资源状态
    kubect get 资源类型 -w
    
    • 查看 api
      api 组成 apiGroup/apiVersion
    kubectl api-versions
    

    相关文章

      网友评论

          本文标题:kubectl 命令

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