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
评论区