您的位置:首页 > 其它

k8s核心组件----kubectl常用命令总结

2019-08-03 09:29 441 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/cyfblog/article/details/97639312

文章目录

  • 3、kubectl create
  • 3.4、kubectl create configmap:创建configmap
  • 3.5、kubectl create serviceaccount:创建serviceaccount
  • 4、kubectl get
  • 4.2、kubectl get pods
  • 4.3、kubectl get namespaces:获取namespace信息
  • 4.4、kubectl get rs:获取ReplicaSet控制器信息
  • 4.5、kubectl get deploy && kubectl get deployment
  • 4.6、kubectl get svc:获取service信息
  • 4.7、kubectl get secrets:获取secrets信息
  • 4.8、kubectl get pv:获取pv信息
  • 4.9、kubectl get pvc:获取pvc信息
  • 4.10、kubectl get configmap && kubectl get cm:获取configMap信息
  • 4.11、kubectl get sts:获取statefulSet控制器信息
  • 4.12、kubectl get serviceaccounts && kubectl get sa:获取serviceaccount信息
  • 5、kubectl label
  • 6、kubectl describe
  • 7、kubectl delete
  • 8、kubectl edit
  • 9、kubectl exec
  • 10、kubectl logs
  • 11、kubectl explain
  • 12、kubectl rollout
  • 13、kubectl scale
  • 14、kubectl patch
  • 15、kubectl set
  • 16、kubectl config
  • 17、kubectl cp:类似docker cp,区别在于拷贝目录下的文件到本地
  • kubectl cordon:标记节点为不可调度节点
  • kubectl uncordon:标记节点为可调度节点
  • kubectl cluster-info:查看集群信息
  • kubectl api-versions:查询 Kubernetes API 支持的 API 版本
  • kubectl api-resources:查看k8s支持的资源类型
  • 一、k8s集群搭建

    可以参考我的另一篇文章搭建一个集群进行演练:k8s核心组件----kubeadm初始化集群(v1.14.2)

    二、kubectl简介

    kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。

    kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。以下是查看子命令的帮助命令:

    • kubectl -h:查看子命令列表
    • kubectl options:查看全局选项
    • kubectl --help:查看子命令的帮助
    • kubectl [command] [PARAMS] -o=:设置输出格式(如 json、yaml、jsonpath 等)
    • kubectl explain [RESOURCE]:查看资源的定义

    三、命令行自动补全配置

    为了方便练习k8s常用命令使用,配置命令行自动补全

    Centos
    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    
    Ubuntu
    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.2/bin/linux/amd64/kubectl
    chmod +x kubectl
    mv kubectl  /usr/local/bin/
    sudo mv kubectl  /usr/local/bin/
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc

    四、kubectl常用命令总结

    1、kubectl version

    输出 client 和 server 的版本信息

    [root@master ~]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.2", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:23:09Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.2", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:14:56Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

    2、kubectl run

    用法:

    kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

    2.1、创建一个镜像为nginx、副本为2、暴露端口为80的nginx容器

    [root@master ~]# kubectl run nginx --image=nginx --replicas=2 --port=80
    kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
    deployment.apps/nginx created

    3、kubectl create

    用法:

    kubectl create -f FILENAME [options]
    ,创建资源

    3.1、创建dashboard通过yaml文件

    可以参考我的另一篇文章:k8s UI组件----Kubernetes Dashboard

    [root@master yaml]# kubectl create -f kubernetes-dashboard.yaml
    secret/kubernetes-dashboard-certs created
    serviceaccount/kubernetes-dashboard created
    role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
    rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
    deployment.apps/kubernetes-dashboard created
    service/kubernetes-dashboard created

    3.2、kubectl create namespace:创建namespace

    用法:kubectl create namespace NAME [–dry-run] [options]

    [root@master ~]# kubectl create namespace cyf
    namespace/cyf created

    3.3、kubectl create secret:创建secret

    用法:

    kubectl create secret [flags] [options]

    3.3.1、创建一个TLS Secret

    [root@master ingress]# kubectl create secret tls tomcat-ingress-sercret --cert=tls.crt --key=tls.key
    secret/tomcat-ingress-sercret created
    [root@master ingress]# kubectl get secrets
    NAME                     TYPE                                  DATA   AGE
    default-token-g5zk6      kubernetes.io/service-account-token   3      5d14h
    tomcat-ingress-sercret   kubernetes.io/tls                     2      11s[root@master ingress]# kubectl describe secrets tomcat-ingress-sercret
    Name:         tomcat-ingress-sercret
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  kubernetes.io/tls
    
    Data
    ====
    tls.crt:  1294 bytes
    tls.key:  1675 bytes

    3.3.2、创建一个generic Secret

    [root@master configmap]# kubectl create secret generic mysql-root-password --from-literal=password=Myp@ss123
    secret/mysql-root-password created
    [root@master configmap]# kubectl get secrets
    NAME                    TYPE                                  DATA   AGE
    default-token-g5zk6     kubernetes.io/service-account-token   3      9d
    mysql-root-password     Opaque                                1      10s #Opaque:模糊类型
    tomcat-ingress-secret   kubernetes.io/tls                     2      4d7h

    3.4、kubectl create configmap:创建configmap

    用法:

    kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run] [options]

    [root@master ~]# kubectl create configmap nginx-config --from-literal=nginx_port=80 --from-literal=server_name=myapp.cyf.com
    configmap/nginx-config created

    3.5、kubectl create serviceaccount:创建serviceaccount

    [root@master yaml]# kubectl create serviceaccount admin
    serviceaccount/admin created
    [root@master ~]# kubectl create serviceaccount mysa -o yaml --dry-run
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    creationTimestamp: null
    name: mysa

    4、kubectl get

    用法:

    kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]

    4.1、kubectl get nodes

    4.1.1、获取节点信息

    [root@master ~]# kubectl get nodes
    NAME     STATUS   ROLES    AGE   VERSION
    master   Ready    master   16h   v1.14.2
    node1    Ready    worker   16h   v1.14.2

    4.1.2、获取节点详细信息

    [root@master ~]# kubectl get nodes -o wide
    NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
    master   Ready    master   16h   v1.14.2   192.168.10.48    <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://19.3.1
    node1    Ready    worker   16h   v1.14.2   192.168.10.148   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://19.3.1

    4.1.3、获取节点标签

    [root@master ~]# kubectl get nodes --show-labels
    NAME     STATUS   ROLES    AGE   VERSION   LABELS
    master   Ready    master   2d    v1.14.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    node1    Ready    worker   2d    v1.14.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker

    4.1.4、给节点打标签

    [root@master ~]# kubectl label nodes node1 disktype=ssd
    node/node1 labeled

    4.2、kubectl get pods

    4.2.1、获取指定namespace的Pod信息(不加-n默认获取default)

    [root@master ~]# kubectl get pods -n default
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-755464dd6c-b56mr   1/1     Running   0          52s
    nginx-755464dd6c-ggwzv   1/1     Running   0          52s

    4.2.2、获取所有namespace的Pod信息

    [root@master ~]# kubectl get pods --all-namespaces
    [root@master ~]# kubectl get pods -A
    NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
    default       nginx-755464dd6c-b56mr                  1/1     Running   0          3m12s
    default       nginx-755464dd6c-ggwzv                  1/1     Running   0          3m12s
    kube-system   coredns-fb8b8dccf-b9cwb                 1/1     Running   1          17h
    kube-system   coredns-fb8b8dccf-qcdv2                 1/1     Running   1          17h
    kube-system   etcd-master                             1/1     Running   1          17h
    kube-system   kube-apiserver-master                   1/1     Running   1          17h
    kube-system   kube-controller-manager-master          1/1     Running   1          17h
    kube-system   kube-flannel-ds-amd64-4kn7q             1/1     Running   1          17h
    kube-system   kube-flannel-ds-amd64-xpd8f             1/1     Running   1          17h
    kube-system   kube-proxy-htdpc                        1/1     Running   1          17h
    kube-system   kube-proxy-q49ff                        1/1     Running   1          17h
    kube-system   kube-scheduler-master                   1/1     Running   1          17h
    kube-system   kubernetes-dashboard-6c98b7f57c-q6zp7   1/1     Running   1          16h

    4.2.3、获取Pod的详细信息

    [root@master ~]# kubectl get pods -o wide
    NAME                     READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
    nginx-755464dd6c-b56mr   1/1     Running   0          5m31s   10.244.1.11   node1   <none>           <none>
    nginx-755464dd6c-ggwzv   1/1     Running   0          5m31s   10.244.1.10   node1   <none>           <none>
    [root@master ~]# kubectl get pods -A -o wide
    NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
    default       nginx-755464dd6c-b56mr                  1/1     Running   0          6m4s   10.244.1.11      node1    <none>           <none>
    default       nginx-755464dd6c-ggwzv                  1/1     Running   0          6m4s   10.244.1.10      node1    <none>           <none>
    kube-system   coredns-fb8b8dccf-b9cwb                 1/1     Running   1          17h    10.244.1.9       node1    <none>           <none>
    kube-system   coredns-fb8b8dccf-qcdv2                 1/1     Running   1          17h    10.244.1.8       node1    <none>           <none>
    ......

    4.2.4、获取Pod的labels

    [root@master ~]# kubectl get pods --show-labels
    NAME                     READY   STATUS    RESTARTS   AGE   LABELS
    nginx-755464dd6c-b56mr   1/1     Running   0          27h   pod-template-hash=755464dd6c,run=nginx
    nginx-755464dd6c-ggwzv   1/1     Running   0          27h   pod-template-hash=755464dd6c,run=nginx
    pod-demo                 2/2     Running   0          58s   apps=myapp,tier=frontend

    4.2.5、查看所有pod对于指定标签的key是否有value,有则显示,没有则空白

    [root@master yaml]# kubectl get pods -L apps,run
    NAME                     READY   STATUS    RESTARTS   AGE   APPS    RUN
    nginx-755464dd6c-b56mr   1/1     Running   0          27h           nginx
    nginx-755464dd6c-ggwzv   1/1     Running   0          27h           nginx
    pod-demo                 2/2     Running   0          15m   myapp

    4.2.6、获取含有指定标签key的pod

    [root@master yaml]# kubectl get pods -l apps --show-labels
    NAME       READY   STATUS    RESTARTS   AGE    LABELS
    pod-demo   2/2     Running   0          112s   apps=myapp,tier=frontend

    4.2.7、获取含有指定标签key=value的pod

    等值关系:

    =
    !=

    [root@master yaml]# kubectl get pods -l release=stable --show-labels
    NAME       READY   STATUS    RESTARTS   AGE   LABELS
    pod-demo   2/2     Running   0          39m   apps=myapp,release=stable,tier=frontend

    4.2.8、获取标签key的value在(不在)集合中的pod(in表示在集合,notin表示不在集合)

    集合关系:

    key in (value1,value2...)

    key notin (value1,value2...)

    key

    !key

    [root@master yaml]# kubectl get pods -l "release in (canary,beta,alpha)"
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-755464dd6c-ggwzv   1/1     Running   0          28h
    [root@master yaml]# kubectl get pods -l "release notin (canary,beta,alpha)"
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-755464dd6c-b56mr   1/1     Running   0          28h
    pod-demo                 2/2     Running   0          53m

    4.2.7、获取podIP

    kubectl get pod pod-name -o jsonpath=’{.status.podIP}’

    [root@master ~]# kubectl get pods nginx-755464dd6c-b56mr -o jsonpath='{.status.podIP}'
    10.244.1.11

    4.2.8、导出指定pod的yaml配置

    [root@master yaml]# kubectl get pods myapp-deploy-74fb9bdf9b-2rt79 -o yaml --export
    Flag --export has been deprecated, This flag is deprecated and will be removed in future.
    apiVersion: v1
    kind: Pod
    metadata:
    creationTimestamp: null
    generateName: myapp-deploy-74fb9bdf9b-
    labels:
    app: myapp
    pod-template-hash: 74fb9bdf9b
    release: canary
    ownerReferences:
    .....

    4.3、kubectl get namespaces:获取namespace信息

    4.3.1、获取所有namespace信息

    [root@master ~]# kubectl get ns
    NAME              STATUS   AGE
    default           Active   18h
    kube-node-lease   Active   18h
    kube-public       Active   18h
    kube-system       Active   18h
    [root@master ~]# kubectl get namespaces
    NAME              STATUS   AGE
    default           Active   18h
    kube-node-lease   Active   18h
    kube-public       Active   18h
    kube-system       Active   18h

    4.3.2、获取指定namespace信息

    [root@master ~]# kubectl get namespaces kube-system
    NAME          STATUS   AGE
    kube-system   Active   18h

    4.3.3、获取指定namespace的yaml格式信息

    [root@master ~]# kubectl get namespaces kube-system -o yaml
    apiVersion: v1
    kind: Namespace
    metadata:
    creationTimestamp: "2019-07-29T09:28:58Z"
    name: kube-system
    resourceVersion: "10"
    selfLink: /api/v1/namespaces/kube-system
    uid: 4ad779da-b1e3-11e9-ac67-0800273a2eb7
    spec:
    finalizers:
    - kubernetes
    status:
    phase: Active

    4.3.4、获取指定namespace的json格式信息

    [root@master ~]# kubectl get namespaces kube-system -o json
    {
    "apiVersion": "v1",
    "kind": "Namespace",
    "metadata": {
    "creationTimestamp": "2019-07-29T09:28:58Z",
    "name": "kube-system",
    "resourceVersion": "10",
    "selfLink": "/api/v1/namespaces/kube-system",
    "uid": "4ad779da-b1e3-11e9-ac67-0800273a2eb7"
    },
    "spec": {
    "finalizers": [
    "kubernetes"
    ]
    },
    "status": {
    "phase": "Active"
    }
    }

    4.4、kubectl get rs:获取ReplicaSet控制器信息

    [root@master yaml]# kubectl get rs
    NAME    DESIRED   CURRENT   READY   AGE
    myapp   2         2         2       24s

    4.5、kubectl get deploy && kubectl get deployment

    4.5.1、获取Deployment控制器信息

    [root@master yaml]# kubectl get deploy
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    myapp-deploy   2/2     2            2           22s
    nginx          1/1     1            1           19h
    [root@master yaml]# kubectl get deployments
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    myapp-deploy   2/2     2            2           22s
    nginx          1/1     1            1           19h

    4.5.2、与ReplicaSet的联系。

    rs名称:myapp-deploy-74fb9bdf9b,deploy名称:myapp-deploy,pod名称:myapp-deploy-74fb9bdf9b-rd4nf

    [root@master yaml]# kubectl get rs
    NAME                      DESIRED   CURRENT   READY   AGE
    myapp-deploy-74fb9bdf9b   2         2         2       48s
    nginx-755464dd6c          1         1         1       19h
    [root@master yaml]# kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    myapp-deploy-74fb9bdf9b-rd4nf   1/1     Running   0          7m42s
    myapp-deploy-74fb9bdf9b-slfst   1/1     Running   0          7m42s
    nginx-755464dd6c-2pgbs          1/1     Running   0          19h

    4.5.3、滚动更新

    修改版本号后的滚动更新过程

    [root@master yaml]# kubectl get pods -w
    NAME                            READY   STATUS    RESTARTS   AGE
    myapp-deploy-74fb9bdf9b-rd4nf   1/1     Running   0          33h
    myapp-deploy-74fb9bdf9b-slfst   1/1     Running   0          33h
    nginx-755464dd6c-2pgbs          1/1     Running   0          2d4h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     Pending   0          33h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     Pending   0          33h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     ContainerCreating   0          33h
    myapp-deploy-74fb9bdf9b-lqm77   1/1     Running             0          33h
    myapp-deploy-66cfdc5675-g8dgm   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-g8dgm   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-g8dgm   0/1     ContainerCreating   0          33h
    myapp-deploy-66cfdc5675-g8dgm   1/1     Running             0          33h
    myapp-deploy-74fb9bdf9b-lqm77   1/1     Terminating         0          33h
    myapp-deploy-66cfdc5675-c7fxx   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-c7fxx   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-c7fxx   0/1     ContainerCreating   0          33h
    myapp-deploy-66cfdc5675-c7fxx   1/1     Running             0          33h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-rd4nf   1/1     Terminating         0          33h
    myapp-deploy-66cfdc5675-xj5qq   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-xj5qq   0/1     Pending             0          33h
    myapp-deploy-66cfdc5675-xj5qq   0/1     ContainerCreating   0          33h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-lqm77   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-rd4nf   0/1     Terminating         0          33h
    myapp-deploy-66cfdc5675-xj5qq   1/1     Running             0          33h
    myapp-deploy-74fb9bdf9b-slfst   1/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-rd4nf   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-rd4nf   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-slfst   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-slfst   0/1     Terminating         0          33h
    myapp-deploy-74fb9bdf9b-slfst   0/1     Terminating         0          33h

    查看滚动更新后历史版本和现在运行版本

    [root@master yaml]# kubectl get rs -o wide
    NAME                      DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES                 SELECTOR
    myapp-deploy-66cfdc5675   3         3         3       100s   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=66cfdc5675,release=canary
    myapp-deploy-74fb9bdf9b   0         0         0       16m    myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=74fb9bdf9b,release=canary

    4.6、kubectl get svc:获取service信息

    4.6.1、获取默认命名空间的service

    [root@master yaml]# kubectl get svc
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d5h

    4.6.2、获取指定命名空间的service

    [root@master ingress-nginx]# kubectl get svc -n ingress-nginx
    NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    default-http-backend   ClusterIP   10.109.114.81    <none>        80/TCP                       45m
    ingress-nginx          NodePort    10.106.125.159   <none>        80:30080/TCP,443:30443/TCP   73s

    4.7、kubectl get secrets:获取secrets信息

    [root@master ingress]# kubectl get secrets
    NAME                     TYPE                                  DATA   AGE
    default-token-g5zk6      kubernetes.io/service-account-token   3      5d14h
    tomcat-ingress-sercret   kubernetes.io/tls                     2      11s

    4.8、kubectl get pv:获取pv信息

    [root@master volumes]# kubectl get pv
    NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    pv001   1Gi        RWO,RWX        Retain           Available                                   10s
    pv002   1Gi        RWX            Retain           Available                                   10s
    pv003   1Gi        RWO,RWX        Retain           Available                                   10s
    pv004   1Gi        RWO,RWX        Retain           Available                                   10s
    pv005   1Gi        RWO,RWX        Retain           Available                                   10s

    4.9、kubectl get pvc:获取pvc信息

    [root@master volumes]# kubectl get pvc
    NAME    STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    mypvc   Bound    pv002    1Gi        RWX                           43s

    4.10、kubectl get configmap && kubectl get cm:获取configMap信息

    [root@master ~]# kubectl get cm
    NAME           DATA   AGE
    nginx-config   2      4m11s

    4.11、kubectl get sts:获取statefulSet控制器信息

    [root@master yaml]# kubectl get sts
    NAME    READY   AGE
    myapp   3/3     30s

    4.12、kubectl get serviceaccounts && kubectl get sa:获取serviceaccount信息

    [root@master yaml]# kubectl get serviceaccounts && kubectl get sa
    NAME      SECRETS   AGE
    admin     1         3m49s
    default   1         10d
    NAME      SECRETS   AGE
    admin     1         3m50s
    default   1         10d

    5、kubectl label

    用法:

    kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
    ,资源标签设定

    5.1、给一个pod打一个没有存在的标签key=value,

    [root@master yaml]# kubectl label pods pod-demo release=canary
    pod/pod-demo labeled
    [root@master yaml]# kubectl get pods pod-demo --show-labels
    NAME       READY   STATUS    RESTARTS   AGE   LABELS
    pod-demo   2/2     Running   0          33m   apps=myapp,release=canary,tier=frontend

    5.2、给一个pod已经存在的标签重新赋值

    [root@master yaml]# kubectl label pods pod-demo release=stable
    error: 'release' already has a value (canary), and --overwrite is false
    [root@master yaml]# kubectl label pods pod-demo release=stable --overwrite
    pod/pod-demo labeled

    5.3、通过key删除标签

    [root@master ~]# kubectl get nodes --show-labels
    NAME     STATUS   ROLES    AGE    VERSION   LABELS
    master   Ready    master   8d     v1.14.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    node1    Ready    worker   8d     v1.14.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,hostname=node1,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker
    node2    Ready    worker   5d6h   v1.14.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hostname=node2,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker
    [root@master ~]# kubectl label nodes node1 disktype-
    node/node1 labeled

    6、kubectl describe

    用法:

    kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options]
    ,显示资源的详细描述

    6.1、查看某个pod的详细信息

    [root@master yaml]# kubectl describe pods pod-demo
    Name:               pod-demo
    Namespace:          default
    Priority:           0
    PriorityClassName:  <none>
    Node:               node1/192.168.10.148
    Start Time:         Tue, 30 Jul 2019 18:17:38 +0800
    Labels:             apps=myapp
    tier=frontend
    Annotations:        <none>
    Status:             Running
    IP:                 10.244.1.14

    6.2、查看创建的serviceaccount的详细信息

    [root@master yaml]# kubectl describe sa admin
    Name:                admin
    Namespace:           default
    Labels:              <none>
    Annotations:         <none>
    Image pull secrets:  <none> #设置镜像拉取的镜像仓库,用sa替代imagePullSecrets
    Mountable secrets:   admin-token-f6h28
    Tokens:              admin-token-f6h28
    Events:              <none>

    7、kubectl delete

    用法:

    kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options]
    ,删除资源

    7.1、删除pods资源

    [root@master yaml]# kubectl get pods
    NAME          READY   STATUS    RESTARTS   AGE
    myapp-l9pbb   1/1     Running   0          7m1s
    myapp-nlw6m   1/1     Running   0          10m
    myapp-ppktd   1/1     Running   0          10m
    myapp-wmbnc   1/1     Running   0          28m
    myapp-wpfpn   1/1     Running   0          10m
    [root@master yaml]# kubectl delete pods myapp-l9pbb
    pod "myapp-l9pbb" deleted
    [root@master yaml]#

    7.2、删除service

    [root@master yaml]# kubectl delete svc redis
    service "redis" deleted

    7.3、删除namespace

    [root@master ~]# kubectl delete ns cyf
    namespace "cyf" deleted

    7.4、删除Secret

    [root@master ingress]# kubectl delete secrets tomcat-ingress-sercret
    secret "tomcat-ingress-sercret" deleted

    7.5、删除configmap

    [root@master configmap]# kubectl delete configmaps nginx
    configmap "nginx" deleted

    8、kubectl edit

    用法:

    kubectl edit (RESOURCE/NAME | -f FILENAME) [options]
    ,编辑资源清单

    8.1、修改ReplicaSet控制器的yaml清单内容

    注意:修改容器版本,不会自动更新(手动删除pod后自动更新:灰度发布)

    [root@master yaml]# kubectl edit rs myapp
    replicaset.extensions/myapp edited

    9、kubectl exec

    用法:

    kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
    ,类似docker exec,进入容器

    9.1、进入pod内的容器

    [root@master yaml]# kubectl exec -it myapp-lmj45 -- /bin/sh
    / # ls
    bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var
    / # exit
    [root@master yaml]# kubectl exec -it myapp-lmj45 sh
    / # ls
    bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var
    / #

    9.2、进入pod内指定容器

    用法:

    kubectl exec -it pod-name -c container-name -- /bin/sh

    [root@master yaml]# kubectl exec -it myapp-lmj45 -c myapp-container sh
    / # ls
    bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var
    / # exit
    [root@master yaml]# kubectl exec -it myapp-lmj45 -c myapp-container -- /bin/sh
    / # ls
    bin    dev    etc    home   lib    media  mnt    proc   root   run    sbin   srv    sys    tmp    usr    var
    / #

    10、kubectl logs

    用法:

    kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]
    ,类似于docker logs,查看容器日志

    10.1、查看pod内的容器日志

    [root@master yaml]# kubectl logs myapp-lmj45 --tail 300 -f
    10.244.0.0 - - [31/Jul/2019:22:06:42 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:42 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:43 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:43 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:44 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"

    10.2、查看pod内指定容器的日志

    [root@master yaml]# kubectl logs myapp-lmj45 -c myapp-container --tail 300 -f
    10.244.0.0 - - [31/Jul/2019:22:06:42 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:42 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:43 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:43 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"
    10.244.0.0 - - [31/Jul/2019:22:06:44 +0000] "GET / HTTP/1.1" 200 65 "-" "curl/7.29.0" "-"

    11、kubectl explain

    用法:

    kubectl explain RESOURCE [options]
    ,显示各种资源清单的字段解释

    11.1、查看pod资源清单字段

    [root@master ~]# kubectl explain pod
    KIND:     Pod
    VERSION:  v1
    
    DESCRIPTION:
    Pod is a collection of containers that can run on a host. This resource is
    created by clients and scheduled onto hosts.
    
    FIELDS:
    apiVersion	<string>
    .....

    11.2、查看pod资源清单理metadata字段下的字段(以此类推)

    [root@master ~]# kubectl explain pod.metadata
    KIND:     Pod
    VERSION:  v1
    RESOURCE: metadata <Object>
    DESCRIPTION:
    Standard object's metadata. More info:
    https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
    
    ObjectMeta is metadata that all persisted resources must have, which
    includes all objects users must create.
    FIELDS:
    annotations	<map[string]string>
    .....

    11.3、查看ReplicaSet资源清单字段

    [root@master yaml]# kubectl explain rs
    KIND:     ReplicaSet
    VERSION:  extensions/v1beta1
    
    DESCRIPTION:
    DEPRECATED - This group version of ReplicaSet is deprecated by
    apps/v1beta2/ReplicaSet. See the release notes for more information.
    ReplicaSet ensures that a specified number of pod replicas are running at
    any given time.
    
    FIELDS:
    apiVersion	<string>
    APIVersion defines the versioned schema of this representation of an
    object. Servers should convert recognized schemas to the latest internal
    value, and may reject unrecognized values. More info:
    .....

    12、kubectl rollout

    用法:

    kubectl rollout SUBCOMMAND [options]
    ,滚动更新
    类型:

    • deployments
    • daemonsets
    • statefulsets

    12.1、查看deployment滚动更新历史版本

    [root@master yaml]# kubectl rollout history deployment myapp-deploy
    deployment.extensions/myapp-deploy
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>

    12.2、更新一个pod后暂停更新

    [root@master yaml]# kubectl rollout pause deployment myapp-deploy
    deployment.extensions/myapp-deploy paused
    [root@master ~]# kubectl get pods -l app=myapp -w
    NAME                            READY   STATUS    RESTARTS   AGE
    myapp-deploy-66cfdc5675-cnm4m   1/1     Running   0          12s
    myapp-deploy-66cfdc5675-jzghg   1/1     Running   0          12s
    myapp-deploy-66cfdc5675-zkc94   1/1     Running   0          12s
    myapp-deploy-668ff4dc58-fq6hp   0/1     Pending   0          0s
    myapp-deploy-668ff4dc58-fq6hp   0/1     Pending   0          0s
    myapp-deploy-668ff4dc58-fq6hp   0/1     ContainerCreating   0          0s
    myapp-deploy-668ff4dc58-fq6hp   1/1     Running             0          9s

    12.3、解除暂停状态,继续更新

    [root@master yaml]# kubectl rollout resume deployment myapp-deploy
    deployment.extensions/myapp-deploy resumed
    [root@master yaml]# kubectl rollout status deployment myapp-deploy
    deployment "myapp-deploy" successfully rolled out

    12.4、回滚到指定版本

    [root@master ~]# kubectl rollout history deployment myapp-deploy
    deployment.extensions/myapp-deploy
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>
    3         <none>
    [root@master yaml]# kubectl rollout undo deployment myapp-deploy --to-revision=1
    deployment.extensions/myapp-deploy rolled back
    [root@master yaml]# kubectl get rs -o wide
    NAME                      DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                 SELECTOR
    myapp-deploy-668ff4dc58   0         0         0       4m      myapp        ikubernetes/myapp:v3   app=myapp,pod-template-hash=668ff4dc58,release=canary
    myapp-deploy-66cfdc5675   0         0         0       4m23s   myapp        ikubernetes/myapp:v2   app=myapp,pod-template-hash=66cfdc5675,release=canary
    myapp-deploy-74fb9bdf9b   5         5         5       5m8s    myapp        ikubernetes/myapp:v1   app=myapp,pod-template-hash=74fb9bdf9b,release=canary
    [root@master ~]# kubectl rollout history deployment myapp-deploy
    deployment.extensions/myapp-deploy
    REVISION  CHANGE-CAUSE
    2         <none>
    3         <none>
    4         <none>

    12.5、监控deployment更新状态

    [root@master yaml]# kubectl rollout status deployment myapp-deploy
    Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 3 new replicas have been updated...

    13、kubectl scale

    Deployment, ReplicaSet, Replication Controller, or StatefulSet
    ,pod副本的扩容和缩容

    用法:

    kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

    13.1、扩容和缩容

    [root@master yaml]# kubectl scale sts myapp --replicas=2
    statefulset.apps/myapp scaled
    [root@master yaml]# kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    myapp-0   1/1     Running   0          14m
    myapp-1   1/1     Running   0          14m

    14、kubectl patch

    用法:

    kubectl patch (-f FILENAME | TYPE NAME) -p PATCH [options]

    14.1、修改deployment副本数

    [root@master yaml]# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'
    deployment.extensions/myapp-deploy patched

    14.2、修改deployment滚动更新策略

    [root@master yaml]# kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
    deployment.extensions/myapp-deploy patched
    [root@master yaml]# kubectl describe deployments myapp-deploy
    Name:                   myapp-deploy
    Namespace:              default
    CreationTimestamp:      Fri, 02 Aug 2019 01:33:47 +0800
    Labels:                 app=myapp
    release=canary
    Annotations:            deployment.kubernetes.io/revision: 2
    kubectl.kubernetes.io/last-applied-configuration:
    {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":3...
    Selector:               app=myapp,release=canary
    Replicas:               5 desired | 5 updated | 5 total | 5 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  0 max unavailable, 1 max surge #已经修改
    .....

    15、kubectl set

    用法:

    kubectl set SUBCOMMAND [options]

    15.1、kubectl set image

    用法:

    kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [options]

    15.1.1、修改deployment的镜像版本

    [root@master yaml]# kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3
    deployment.extensions/myapp-deploy image updated

    15.1.2、修改daemonset的镜像版本

    [root@master yaml]# kubectl set image daemonsets filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine
    daemonset.extensions/filebeat-ds image updated

    16、kubectl config

    用法:

    kubectl config SUBCOMMAND [options]

    16.1、kubectl config view:显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件

    [root@master yaml]# kubectl config view
    apiVersion: v1
    clusters:
    - cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.10.48:6443
    name: kubernetes
    contexts:
    - context:
    cluster: kubernetes
    user: kubernetes-admin
    name: kubernetes-admin@kubernetes
    current-context: kubernetes-admin@kubernetes
    kind: Config
    preferences: {}
    users:
    - name: kubernetes-admin
    user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

    17、kubectl cp:类似docker cp,区别在于拷贝目录下的文件到本地

    [root@master nginx]# kubectl cp -n ingress-nginx nginx-ingress-controller-8bddb774f-jxzk2:/etc/nginx/ .
    tar: Removing leading `/' from member names
    [root@master nginx]# ls
    fastcgi.conf          fastcgi_params          geoip    koi-win  mime.types          modsecurity  nginx.conf          opentracing.json       scgi_params          template      uwsgi_params.default
    fastcgi.conf.default  fastcgi_params.default  koi-utf  lua      mime.types.default  modules      nginx.conf.default  owasp-modsecurity-crs  scgi_params.default  uwsgi_params  win-utf

    kubectl cordon:标记节点为不可调度节点

    [root@master helm]# kubectl cordon node2
    node/node2 cordoned
    [root@master yaml]# kubectl apply -f deploy-demo.yaml
    deployment.apps/myapp-deploy created
    [root@master yaml]# kubectl get pods -o wide
    NAME                             READY   STATUS    RESTARTS   AGE    IP             NODE    NOMINATED NODE   READINESS GATES
    eureka-deploy-579bf579dc-7gzfh   1/1     Running   0          111m   10.244.2.104   node2   <none>           <none>
    eureka-deploy-579bf579dc-9vvk6   1/1     Running   0          111m   10.244.1.167   node1   <none>           <none>
    myapp-deploy-74fb9bdf9b-8cg5l    1/1     Running   0          7s     10.244.1.169   node1   <none>           <none>
    myapp-deploy-74fb9bdf9b-fmxjr    1/1     Running   0          7s     10.244.1.172   node1   <none>           <none>
    myapp-deploy-74fb9bdf9b-gk4q2    1/1     Running   0          7s     10.244.1.170   node1   <none>           <none>
    myapp-deploy-74fb9bdf9b-hxchc    1/1     Running   0          7s     10.244.1.168   node1   <none>           <none>
    myapp-deploy-74fb9bdf9b-jk4mj    1/1     Running   0          7s     10.244.1.171   node1   <none>           <none>

    kubectl uncordon:标记节点为可调度节点

    [root@master yaml]# kubectl uncordon node2
    node/node2 uncordoned

    kubectl cluster-info:查看集群信息

    [root@master ~]# kubectl cluster-info
    Kubernetes master is running at https://192.168.10.48:6443
    KubeDNS is running at https://192.168.10.48:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

    kubectl api-versions:查询 Kubernetes API 支持的 API 版本

    [root@master ~]# kubectl api-versions
    admissionregistration.k8s.io/v1beta1
    apiextensions.k8s.io/v1beta1
    apiregistration.k8s.io/v1
    apiregistration.k8s.io/v1beta1
    apps/v1
    apps/v1beta1
    apps/v1beta2
    .....

    kubectl api-resources:查看k8s支持的资源类型

    [root@master ~]# kubectl api-resources
    NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
    bindings                                                                      true         Binding
    componentstatuses                 cs                                          false        ComponentStatus
    configmaps                        cm                                          true         ConfigMap
    endpoints                         ep                                          true         Endpoints
    events                            ev                                          true         Event
    limitranges                       limits                                      true         LimitRange
    namespaces                        ns                                          false        Namespace
    nodes                             no                                          false        Node

    查看指定群组支持的资源类型

    [root@master ~]# kubectl api-resources --api-group=storage.k8s.io
    NAME                SHORTNAMES   APIGROUP         NAMESPACED   KIND
    csidrivers                       storage.k8s.io   false        CSIDriver
    csinodes                         storage.k8s.io   false        CSINode
    storageclasses      sc           storage.k8s.io   false        StorageClass
    volumeattachments                storage.k8s.io   false        VolumeAttachment
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: