• k8s技术--Kubernetes集群kubectl命令的常见使用方法


    简介:kubectl是一个命令行界面,用于运行针对Kubernetes群集的命令。
    语法:
    kubectl [command] [TYPE] [NAME] [flags]
    • command:指定您希望对一个或多个资源执行的操作,例如创建,获取,描述,删除。
    • TYPE:指定资源类型。 资源类型区分大小写,可以使用单数,复数或缩写形式。
    • NAME:指定资源的名称。 名称区分大小写。 如果省略名称,则会显示所有资源的详细信息,例如$ kubectl get pod。
    • flags:指定可选标志。 例如,可以使用-s或--server标志来指定Kubernetes API服务器的地址和端口。

    1、显示Pod的更多信息

    kubectl get pod <pod-name> -o wide
    以yaml格式显示Pod的详细信息
    kubectl get pod <pod-name> -o yaml
     

    2、创建资源对象

    根据yaml配置文件一次性创建service和rc
    kubectl create -f my-service.yaml -f my-rc.yaml
    根据<directory>目录下所有.yaml、.yml、.json文件的定义进行创建操作
    kubectl create -f <directory>
     

    3、查看资源对象

    查看所有Pod列表
    kubectl get pods
     

    4、查看rc和service列表

    kubectl get rc,service
     

    5、描述资源对象

    显示Node的详细信息
    kubectl describe nodes <node-name>
    显示Pod的详细信息
    kubectl describe pods/<pod-name>
    显示由RC管理的Pod的信息
    kubectl describe pods <rc-name>
     

    6、删除资源对象

    基于Pod.yaml定义的名称删除Pod
    kubectl delete -f pod.yaml
    删除所有包含某个label的Pod和service
    kubectl delete pods,services -l name=<label-name>
    删除所有Pod
    kubectl delete pods --all
     

    7、执行容器的命令

    执行Pod的data命令,默认是用Pod中的第一个容器执行
    kubectl exec <pod-name> data
    指定Pod中某个容器执行data命令
    kubectl exec <pod-name> -c <container-name> data
    通过bash获得Pod中某个容器的TTY,相当于登录容器
    kubectl exec -it <pod-name> -c <container-name> /bin/bash
     

    8、使用一些复杂过滤条件查看特定的资源对象

    # 根据重启次数排序列出 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}'
     
    # 查看哪些节点已就绪
    $ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
     

    9、Pod的扩容缩容、滚动升级以及更新资源配置

    执行扩容缩容Pod的操作
    kubectl scale rc redis --replicas=3
    我们需要确认的是在rc配置文件中定义的replicas数量,当我们执行上述命令的结果大于replicas的数量时,则我们执行的命令相当于扩容操作,反之相反,可以理解为我们填写的数量是我们需要的Pod数量。需要注意的是,当我们需要进行永久性扩容时,不要忘记修改rc配置文件中的replicas数量。
     
    Pod的滚动升级
    执行滚动升级操作
    kubectl rolling-update redis -f redis-rc.update.yaml
    需要注意的是当我们执行rolling-update命令前需要准备好新的RC配置文件以及ConfigMap配置文件,RC配置文件中需要指定升级后需要使用的镜像名称,或者可以使用kubeclt rolling-update redis --image=redis-2.0直接指定镜像名称的方式直接升级。
     
    # 强制替换,删除后重新创建资源。会导致服务中断。
    $ kubectl replace --force -f ./pod.json
     
    # 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
    $ kubectl expose rc nginx --port=80 --target-port=8000
     
    # 更新单容器 pod 的镜像版本(tag)到 v4
    $ kubectl get pod mypod -o yaml | sed 's/image:myimageimage:myimage:.*$/1:v4/' | kubectl replace -f -
     
    $ kubectl label pods my-pod new-label=awesome # 添加标签
    $ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 添加注解
    $ kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”
     

    10、查看容器的日志

    查看容器输出到stdout的日志:
    kubectl logs <pod-name>
    跟踪查看容器的日志(tail -f):
    kubectl logs -f <pod-name> -n <namespace> -c <container-name>
     

    11、Kubectl context和配置

    修改kubectl命令行工具默认使用的apiServer地址、集群CA和客户端证书:
    [root@bogon ssl]# kubectl config set-cluster default-cluster --server=https://10.0.2.5:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt
    Cluster "default-cluster" set.
    [root@bogon ssl]# kubectl config set-credentials default-admin --certificate-authority=/etc/kubernetes/ssl/ca.crt --client-key=/etc/kubernetes/ssl/cs_client.key --client-certificate=/etc/kubernetes/ssl/cs_client.crt
    User "default-admin" set.
    [root@bogon ssl]# kubectl config set-context default-system --cluster=default-cluster --user=default-admin  在kubeconfig配置中添加一条名为default-system的上下文记录
    Context "default-system" created.
    [root@bogon ssl]# kubectl config use-context default-system     #设置默认上下文为default-system
    Switched to context "default-system".
    [root@bogon ~]# kubectl config current-context   #查看当前的上下文
    default-system
     
    详细如下:

    创建 kubeconfig 文件

    kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;

    source /opt/k8s/bin/environment.sh
    # 设置集群参数
    kubectl config set-cluster kubernetes 
      --certificate-authority=/etc/kubernetes/cert/ca.pem 
      --embed-certs=true 
      --server=${KUBE_APISERVER} 
      --kubeconfig=kubectl.kubeconfig
    
    # 设置客户端认证参数
    kubectl config set-credentials admin 
      --client-certificate=admin.pem 
      --client-key=admin-key.pem 
      --embed-certs=true 
      --kubeconfig=kubectl.kubeconfig
    
    # 设置上下文参数
    kubectl config set-context kubernetes 
      --cluster=kubernetes 
      --user=admin 
      --kubeconfig=kubectl.kubeconfig
      
    # 设置默认上下文
    kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
    • --certificate-authority:验证 kube-apiserver 证书的根证书;
    • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;
    • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);

    分发 kubeconfig 文件

    分发到所有使用 kubectl 命令的节点:

    source /opt/k8s/bin/environment.sh
    for node_ip in ${NODE_IPS[@]}
      do
        echo ">>> ${node_ip}"
        ssh k8s@${node_ip} "mkdir -p ~/.kube"
        scp kubectl.kubeconfig k8s@${node_ip}:~/.kube/config
        ssh root@${node_ip} "mkdir -p ~/.kube"
        scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
      done
    • 保存到用户的 ~/.kube/config 文件;
    查看kubectl context配置信息:
    # kubectl config view   
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority: /etc/kubernetes/ssl/ca.crt
        server: https://10.0.2.5:6443
      name: default-cluster
    contexts:
    - context:
        cluster: default-cluster
        user: default-admin
      name: default-system
    current-context: default-system
    kind: Config
    preferences: {}
    users:
    - name: default-admin
      user:
        client-certificate: /etc/kubernetes/ssl/cs_client.crt
        client-key: /etc/kubernetes/ssl/cs_client.key
    显示当前的上下文:
    [root@bogon ~]# kubectl config current-context
    default-system
     

    12、在线编辑资源

    # kubectl edit svc/mysql  #可以直接对各种资源对象进行在线编辑变更
     

    13、节点和集群信息查询或调度方法

    $ kubectl cordon my-node # 标记 my-node 不可调度
    $ kubectl drain my-node # 清空 my-node 以待维护
    $ kubectl uncordon my-node # 标记 my-node 可调度
    $ kubectl top node my-node # 显示 my-node 的指标度量
    $ kubectl cluster-info # 显示 master 和服务的地址
    $ kubectl cluster-info dump # 将当前集群状态输出到 stdout
    $ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
    # 如果该键和影响的污点(taint)已存在,则使用指定的值替换
    $ kubectl taint nodes foo dedicated=special-user:NoSchedule
     

    14、资源类型列表

    下表列出的是 kubernetes 中所有支持的类型和缩写的别名。
    资源类型
    缩写别名
    apiservices
     
    certificatesigningrequests
    csr
    clusters
     
    clusterrolebindings
     
    clusterroles
     
    componentstatuses
    cs
    configmaps
    cm
    controllerrevisions
     
    cronjobs
     
    customresourcedefinition
    crd
    daemonsets
    ds
    deployments
    deploy
    endpoints
    ep
    events
    ev
    horizontalpodautoscalers
    hpa
    ingresses
    ing
    jobs
     
    limitranges
    limits
    namespaces
    ns
    networkpolicies
    netpol
    nodes
    no
    persistentvolumeclaims
    pvc
    persistentvolumes
    pv
    poddisruptionbudget
    pdb
    podpreset
     
    pods
    po
    podsecuritypolicies
    psp
    podtemplates
     
    replicasets
    rs
    replicationcontrollers
    rc
    resourcequotas
    quota
    rolebindings
     
    roles
     
    secrets
     
    serviceaccounts
    sa
    services
    svc
    statefulsets
     
    storageclasses
     

    15、kubectl的格式化输出

    要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。
    输出格式
    描述
    -o=custom-columns=<spec>
    使用逗号分隔的自定义列列表打印表格
    -o=custom-columns-file=<filename>
    使用 文件中的自定义列模板打印表格
    -o=json
    输出 JSON 格式的 API 对象
    -o=jsonpath=<template>
    打印 jsonpath 表达式中定义的字段
    -o=jsonpath-file=<filename>
    打印由 文件中的 jsonpath 表达式定义的字段
    -o=name
    仅打印资源名称
    -o=wide
    以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称
    -o=yaml
    输出 YAML 格式的 API 对象

    16、Kubectl 日志打印级别

    使用 -v 或 --v 标志跟着一个整数来指定日志级别。
    详细等级
    描述
    --v=0
    总是对操作人员可见。
    --v=1
    合理的默认日志级别,如果您不需要详细输出。
    --v=2
    可能与系统的重大变化相关的,有关稳定状态的信息和重要的日志信息。这是对大多数系统推荐的日志级别。
    --v=3
    有关更改的扩展信息。
    --v=4
    调试级别详细输出。
    --v=6
    显示请求的资源。
    --v=7
    显示HTTP请求的header。
    --v=8
    显示HTTP请求的内容。


    参考:
  • 相关阅读:
    网络嗅探器
    struct udphdr
    struct tcphdr
    struct iphdr
    socket函数
    SQL SERVER-解析Extendevent文件数据
    SQL SERVER-日期按时区转换
    SQL SERVER-CROSS APPLY
    WinServer-文件共享端口
    SQL SERVER-修改实例的排序规则
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/10168501.html
Copyright © 2020-2023  润新知