目 录CONTENT

文章目录

Kubectl命令

ZiChen D
2021-12-19 / 0 评论 / 0 点赞 / 427 阅读 / 16,788 字 / 正在检测是否收录...

kubectl 概述

语法

在管理工具界面使用kubectl语法运行如下命令:

kubectl [command] [TYPE] [NAME] [flags]

其中command,TYPE,NAME,和flags都是:* command:指定要在一个或多个资源执行的操作,例如操作create,get,describe,delete。* TYPE:指定资源类型Resource types。Resource types会区分大小写,也可以指定单数,复数或缩写的形式。例如,以下命令将输出相同的结果:

shell $ kubectl get pod pod1 $ kubectl get pods pod1 $ kubectl get po pod1 * NAME:指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods。

当在多个资源上执行操作时,可以通过type和name 指定每个资源,或者指定一个或多个file:通过type和name指定的资源:如果它们都是相同的type,就可以对资源进行分组TYPE1 name1 name2 name<#>

命令及使用

kubectl create

通过配置文件名或stdin创建一个集群资源对象。

支持JSON和YAML格式的文件。

语法

kubectl create -f FILENAME

示例

通过pod.json文件创建一个pod。

[root@master ~]# kubectl create -f ./pod.json

kubectl run

创建并运行一个或多个容器镜像。

创建一个deployment 或job 来管理容器。

语法

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

示例

启动nginx实例。

[root@master ~]# kubectl run nginx --image=nginx

启动nginx1实例,暴露容器端口 8080。

[root@master ~]# kubectl run nginx1 --image=nginx --port=8080

启动nginx2实例,在容器中设置环境变量“DNS_DOMAIN = cluster”和“POD_NAMESPACE = default”。

[root@master ~]# kubectl run nginx2 --image=nginx --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

启动nginx3实例,设置副本数5。

[root@master ~]# kubectl run nginx3 --image=nginx --replicas=5

运行 Dry 打印相应的API对象而不创建它们。

[root@master ~]# kubectl run nginx --image=nginx --dry-run

kubectl expose

将资源暴露为新的Kubernetes Service。

指定deployment、service、replica set、replication controller或pod ,并使用该资源的选择器作为指定端口上新服务的选择器。deployment 或 replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service。

资源包括(不区分大小写):

pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)

语法

expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

示例

为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。

[root@master ~]# kubectl expose rc nginx --port=80 --target-port=8000

由“nginx-controller.yaml”中指定的type和name标识的RC创建Service,并通过Service的80端口转发至容器的8000端口上。

[root@master ~]# kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

kubectl delete

通过配置文件名、stdin、资源名称或label选择器来删除资源。

支持JSON和YAML格式文件。可以只指定一种类型的参数:文件名、资源名称或label选择器。

有些资源,如pod,支持优雅的(graceful)删除,因为这些资源一般是集群中的实体,所以删除不可能会立即生效,这些资源在强制终止之前默认定义了一个周期(宽限期),但是你可以使用--grace-period flag来覆盖该值,或者通过pass --now设置该周期为1。

如果托管Pod的Node节点已经停止或者无法连接API Server,使用delete命令删除Pod需等待时间更长。要强制删除资源,需指定- force flag,且设置周期(宽限期)为0。

如果执行强制删除Pod,则调度程序会在节点释放这些Pod之前将新的Pod放在这些节点上,并使之前Pod立即被逐出。

注意:执行delete命令时不会检查资源版本,如果在执行delete操作时有人进行了更新操作,那么更新操作将连同资源一起被删除。

语法

delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])

示例

使用 pod.json中指定的资源类型和名称删除pod。

[root@master ~]# kubectl delete -f ./pod.json

强制删除dead node上的pod

[root@master ~]# kubectl delete pod --grace-period=0 --force

删除所有pod

[root@master ~]# kubectl delete pods --all

kubectl get

获取列出一个或多个资源的信息。

可以使用的资源包括:

  • all
  • certificatesigningrequests (aka 'csr')
  • clusterrolebindings
  • clusterroles
  • clusters (valid only for federation apiservers)
  • componentstatuses (aka 'cs')
  • configmaps (aka 'cm')
  • controllerrevisions
  • cronjobs
  • daemonsets (aka 'ds')
  • deployments (aka 'deploy')
  • endpoints (aka 'ep')
  • events (aka 'ev')
  • horizontalpodautoscalers (aka 'hpa')
  • ingresses (aka 'ing')
  • jobs
  • limitranges (aka 'limits')
  • namespaces (aka 'ns')
  • networkpolicies (aka 'netpol')
  • nodes (aka 'no')
  • persistentvolumeclaims (aka 'pvc')
  • persistentvolumes (aka 'pv')
  • poddisruptionbudgets (aka 'pdb')
  • podpreset
  • pods (aka 'po')
  • podsecuritypolicies (aka 'psp')
  • podtemplates
  • replicasets (aka 'rs')
  • replicationcontrollers (aka 'rc')
  • resourcequotas (aka 'quota')
  • rolebindings
  • roles
  • secrets
  • serviceaccounts (aka 'sa')
  • services (aka 'svc')
  • statefulsets
  • storageclasses
  • thirdpartyresources

语法

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

示例

列出所有运行的Pod信息。

[root@master ~]# kubectl get pods

列出Pod以及运行Pod节点信息。

[root@master ~]# kubectl get pods -o wide

列出指定NAME的 replication controller信息。

[root@master ~]# kubectl get replicationcontroller web

列出所有不同的资源对象

[root@master ~]# kubectl get all

kubectl edit

使用默认编辑器 编辑服务器上定义的资源。

使用命令行工具获取的任何资源都可以使用edit命令编辑。edit命令会打开使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR环境变量定义的编辑器,可以同时编辑多个资源,但所编辑过的资源只会一次性提交。edit除命令参数外还接受文件名形式。

文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。

如果在更新资源时报错,将会在磁盘上创建一个临时文件来记录。在更新资源时最常见的错误是几个用户同时使用编辑器更改服务器上资源,发生这种情况,你需要将你的更改应用到最新版本的资源上,或者更新保存的临时副本。

语法

edit (RESOURCE/NAME | -f FILENAME)

示例

编辑名为nginx的pods

[root@master ~]# kubectl edit pods nginx
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2021-12-20T09:26:53Z"
  labels:
    app: test  		//修改nginx为test方便查看
  name: nginx
  namespace: default

[root@master ~]# kubectl edit pods/nginx	
pod/nginx edited		//更改完成

[root@master ~]# kubectl describe pods nginx		//查看内容
Name:         nginx
Namespace:    default
Priority:     0
Node:         node1.example.com/192.168.160.124
Start Time:   Mon, 20 Dec 2021 19:22:07 +0800
Labels:       app=test		//更改成功
Annotations:  <none>
Status:       Running

kubectl scale

扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量。

scale也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。

语法

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

示例

使用scale扩展

[root@master ~]# kubectl scale --replicas 3 deployment/nginx
deployment.apps/nginx scaled

查看扩展之后

[root@master ~]# kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
nginx                     1/1     Running             0          8m55s
nginx-85bf7b8976-bsdaf   0/1     ContainerCreating   0          11s
nginx-85bf7b8976-tdf5h   0/1     Running             0          90s
nginx-85bf7b8976-fdgj6   0/1     ContainerCreating   0          11s

kubectl autoscale

使用 autoscaler 自动设置在kubernetes集群中运行的pod数量(水平自动伸缩)。

指定Deployment、ReplicaSet或ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。

语法

autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]

示例

自动扩展,给定一个范围,自动根据业务的访问量增加或减少

[root@master ~]# kubectl autoscale --min=2 --max=7 --cpu-percent=60 deployment/nginx
horizontalpodautoscaler.autoscaling/nginx autoscaled
[root@master ~]# kubectl get hpa
NAME     REFERENCE           TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
nginx    Deployment/nginx    <unknown>/80%   1         3         3          29m

kubectl cluster-info

显示标签为 kubernetes.io/cluster-service=true 的控制平面和服务的地址。

语法

kubectl cluster-info

示例

[root@master ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.47.163:6443
KubeDNS is running at https://192.168.47.163:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

kubectl describe

显示特定资源或资源组的详细信息。

打印所选资源的详细说明,包括相关资源,例如事件或控制器。您可以按名称选择单个对象、该类型的所有对象、提供名称前缀或标签选择器。例如:

$ kubectl 描述 TYPE NAME_PREFIX

将首先检查 TYPE 和 NAME_PREFIX 是否完全匹配。如果不存在这样的资源,它将输出名称以 NAME_PREFIX 为前缀的每个资源的详细信息。

使用“kubectl api-resources”获取支持资源的完整列表。

语法

kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)

示例

[root@master ~]# kubectl describe pod nginx
Name:         nginx-85bf7b8976-bsdaf
Namespace:    default
Priority:     0
Node:         node2.example.com/192.168.160.125
Start Time:   Sat, 18 Dec 2021 15:42:42 +0800
Labels:       app=nginx
              pod-template-hash=6799fc88d8
Annotations:  <none>
Status:       Running
IP:           10.244.1.1
IPs:
  IP:           10.244.1.1
Controlled By:  ReplicaSet/nginx-85bf7b8976
Containers:
  nginx:
    Container ID:   docker://9b416e8d6cc8bf26f5d16bc50b2effa9c21478684a59a937c307b59006676e55
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 18 Dec 2021 15:43:16 +0800
    Ready:          True

kubectl logs

打印 pod 或指定资源中容器的日志。如果 Pod 只有一个容器,则容器名称是可选的。

语法

kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]

示例

[root@master ~]# kubectl logs deployment nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/12/18 07:43:16 [notice] 1#1: using the "epoll" event method
2021/12/18 07:43:16 [notice] 1#1: nginx/1.21.4
2021/12/18 07:43:16 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2021/12/18 07:43:16 [notice] 1#1: OS: Linux 4.18.0-257.el8.x86_64
2021/12/18 07:43:16 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/12/18 07:43:16 [notice] 1#1: start worker processes
2021/12/18 07:43:16 [notice] 1#1: start worker process 31
2021/12/18 07:43:16 [notice] 1#1: start worker process 32

kubectl attach

附加到已在现有容器内运行的进程。

语法

kubectl attach (POD | TYPE/NAME) -c CONTAINER

示例

[root@master ~]# kubectl attach nginx-85bf7b8976-bsdaf
Defaulting container name to nginx.
Use 'kubectl describe pod/nginx-85bf7b8976-bsdaf -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.

kubectl exec

在容器中执行命令。

语法

kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]

示例

[root@master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-85bf7b8976-bsdaf   1/1     Running   0          2d4h
[root@master ~]# kubectl exec nginx-85bf7b8976-bsdaf -- date
Mon Dec 20 12:03:22 UTC 2021
[root@master ~]# kubectl exec -it nginx-85bf7b8976-bsdaf -- /bin/bash
root@nginx-85bf7b8976-bsdaf:/# ls
bin   docker-entrypoint.d   home   media  proc  sbin  tmp
boot  docker-entrypoint.sh  lib    mnt    root  srv   usr
dev   etc                   lib64  opt    run   sys   var
root@nginx-85bf7b8976-bsdaf:/# 

kubectl prot-forward

将一个或多个本地端口转发到一个 Pod。

使用资源类型/名称(例如部署/mydeployment)来选择一个 Pod。如果省略,资源类型默认为“pod”。

如果有多个 Pod 符合条件,则会自动选择一个 Pod。转发会话结束当所选POD终止时,并且需要将命令重新运行恢复转发。

语法

kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]

示例

[root@master ~]# kubectl port-forward deployment/nginx 80
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80

[root@master ~]# ss -antl
LISTEN 0      128           127.0.0.1:80           0.0.0.0:*                                                                    
LISTEN 0      128           127.0.0.1:10257        0.0.0.0:*  
[root@master ~]# curl http://127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

允许所有IP访问80端口

[root@master ~]# kubectl port-forward --address 0.0.0.0 deployment/nginx 80
Forwarding from 0.0.0.0:80 -> 80

kubectl cp

将文件和目录复制到容器或从容器复制。

语法

kubectl cp <file-spec-src> <file-spec-dest>

示例

[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-85bf7b8976-bsdaf   1/1     Running   0          2d4h
[root@master ~]# kubectl cp anaconda-ks.cfg nginx-85bf7b8976-bsdaf:/usr
[root@master ~]# kubectl exec nginx-85bf7b8976-bsdaf -- ls -l /usr
total 4
-rw------- 1 root root 1092 Dec 20 12:26 anaconda-ks.cfg
drwxr-xr-x 1 root root  261 Dec  2 10:59 bin
drwxr-xr-x 2 root root    6 Oct  3 09:15 games
drwxr-xr-x 2 root root    6 Oct  3 09:15 include
drwxr-xr-x 1 root root   79 Dec  2 10:59 lib

kubectl label

更新(增加、修改或删除)资源上的 label(标签)。

  • label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
  • 如果--overwrite 为 true,则可以覆盖已有的 label,否则尝试覆盖 label 将会报错。
  • 如果指定了--resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。

语法

kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

示例

创建标签

[root@master ~]# kubectl label --overwrite=true deployment nginx app=nginx
deployment.apps/nginx labeled

查看标签

[root@master ~]# kubectl describe pod nginx
Name:         nginx-85bf7b8976-bsdaf
Namespace:    default
Priority:     0
Node:         node2.example.com/192.168.160.125
Start Time:   Sat, 18 Dec 2021 15:42:42 +0800
Labels:       app=nginx
              pod-template-hash=85bf7b8976
Annotations:  <none>
Status:       Running

追加标签

[root@master ~]# kubectl label pods nginx-85bf7b8976-bsdaf app=test
pod/nginx-85bf7b8976-bsdaf labeled

更改标签

[root@master ~]# kubectl label pod nginx-85bf7b8976-bsdaf --overwrite xaw=my
pod/nginx-85bf7b8976-bsdaf labeled

kubectl api-resources

在服务器上打印支持的 API 资源。

语法

kubectl api-resources

示例

[root@master ~]# kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
pods                              po           v1                                     true         Pod
podtemplates                                   v1                                     true         PodTemplate
replicationcontrollers            rc           v1                                     true         ReplicationController

kubectl api-versions

在服务器上打印支持的 API 版本,以“组/版本”的形式。

语法

kubectl api-versions

示例

[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
0

评论区