跳转至

kubectl命令

本教程使用的版本是k8s-v1.24.2 - 官网文档

kubectl的命令语法可总结成下面格式 - kubectl [command] [TYPE] [NAME] [flags] - commmand:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete - TYPE:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式。例如,node,ns(namespace的缩写),pod - NAME:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息。例如:kubectl get pods - flags: 指定可选的参数。例如,可以使用 -s 或 --server 参数指定 Kubernetes API 服务器的地址和端口。

1 create

  • 功能:创建资源

1.1 deployment

  • 语法:kubectl create deployment NAME --image=image -- [COMMAND] [args...]
    • --image=image:指定镜像
    • --replicas=num-r num:指定副本数量
    • --port:容器暴露的端口
  • 示例:创建deployment资源
[root@master ~]# kubectl create deployment my-nginx --image=nginx
deployment.apps/my-nginx created
[root@master ~]# kubectl get pod
NAME                        READY   STATUS              RESTARTS   AGE
my-nginx-7cddc5685c-w44cd   0/1     ContainerCreating   0          14s
[root@master ~]# kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
my-nginx-7cddc5685c-w44cd   1/1     Running   0          18s   10.244.104.5   node2   <none>           <none>
[root@master ~]# kubectl get deploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx   1/1     1            1           66s
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d18h
创建了deployment资源,直接删除pod是不能达到目的的,需要删除deployment,才能删除pod
# 删除后,pod没有消失,而在重建
[root@master ~]# kubectl delete pod my-nginx-7cddc5685c-w44cd
pod "my-nginx-7cddc5685c-w44cd" deleted
[root@master ~]# kubectl get pod
NAME                        READY   STATUS              RESTARTS   AGE
my-nginx-7cddc5685c-wqtmr   0/1     ContainerCreating   0          7s

1.2 service

  • 语法:kubectl create TYPE NAME [--tcp=<port>:<targetPort>] [--dry-run=server|client|none]
    • TYOE:服务类型
      • clusterip:集群IP,k8s集群间可以访问
      • externalname
      • loadbalancer
      • nodeport:节点ip,集群外部可以通过任一台k8s集群主机ip来访问
    • NAME:服务名称
    • --tcp=<port>:<targetPort>:暴露的tcp端口
  • 示例:创建clusterip
[root@master k8s-yaml]# kubectl create service clusterip nginx --tcp=8080:80
service/nginx created
[root@master k8s-yaml]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    17d
nginx        ClusterIP   10.98.35.251   <none>        8080/TCP   7s

2 get

  • 功能:获取资源信息
  • flag:
    • -A:显示所有命令空间资源
    • -f 文件名:显示yaml文件里指定的资源
  • 示例:
[root@master ~]# kubectl get pod 
NAME                        READY   STATUS    RESTARTS        AGE
my-nginx-7cddc5685c-wqtmr   1/1     Running   1 (4h41m ago)   5h11m
[root@master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS        AGE
default       my-nginx-7cddc5685c-wqtmr                  1/1     Running   1 (4h40m ago)   5h11m
kube-system   calico-kube-controllers-6766647d54-hbshz   1/1     Running   3 (4h40m ago)   3d23h
...省略...
kube-system   kube-scheduler-master                      1/1     Running   5 (4h40m ago)   3d23h

3 run

  • 功能:指定镜像运行一个pod
  • flag:
    • -it:用于进去容器,分配一个TTY,保持stdin打开
    • --image:镜像名
    • --env:传给容器的环境变量
    • --port:容器暴露的端口
    • --labels:pod标签
    • --restart=[Always, OnFailure, Never]:容器exit状态的重启策略
  • 示例:运行一个nginx服务 pod
[root@master ~]# kubectl run nginx --image=nginx
pod/nginx created
[root@master ~]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          18s   10.244.104.6   node2   <none>           <none

4 exec

  • 进入Pod 中的容器或执行命令
  • 语法形式:
# 从 Pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date

# 运行输出 'date' 获取在 Pod <pod-name> 中容器 <container-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date

# 获取一个交互 TTY 并在 Pod  <pod-name> 中运行 /bin/bash。默认情况下,输出来自第一个容器。
kubectl exec -it <pod-name> -- /bin/bash

5 attach

  • 功能:附着在running状态的容器上
  • 语法:kubectl attach (POD | TYPE/NAME) -c CONTAINER
    • -c CONTAINER:指定具体的容器,默认是pod的第一个容器
    • -it
  • 示例1:attach nginx后,访问nginx,将会输出信息
[root@master ~]# kubectl attach nginx
If you don't see a command prompt, try pressing enter.

192.168.211.22 - - [25/Jul/2022:10:54:25 +0000] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" "-"
2022/07/25 10:54:25 [error] 32#32: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.211.22, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.211.22:30987", referrer: "http://192.168.211.22:30987/"
192.168.211.22 - - [25/Jul/2022:10:54:25 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.211.22:30987/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" "-"

6 describe

不指定具体的资源名,默认显示所有的资源
  • 功能:显示资源详细信息
  • 语法:kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)
  • 示例
# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe nodes <node-name>

# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 Pod 的详细信息。
# 记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods <rc-name>

# 描述所有的 Pod
kubectl describe pods

7 expose

  • 功能:将资源公开为一个新的 Kubernetes 服务
  • 语法: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]
  • flag
    • TYPE NAME:指定资源类型和资源名称,比如pod nginx
    • --port:pod内端口
    • --target-port:service端口
    • --name:创建的service名
    • --protocol=[TCP,UDP]:网络协议,默认TCP
    • --type=[ClusterIP, NodePort, LoadBalancer, ExternalName]:service类型,默认是ClusterIP,只能k8s集群内访问
    • -f 文件名:通过yaml文件指定要公开的资源
  • 示例:把pod nginx中80端口绑定到service的8000端口,通过service IP+port可以访问nginx
[root@master ~]# kubectl expose pod nginx --name svc-nginx --port=8000 --target-port=80
service/svc-nginx exposed
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    4d
svc-nginx    ClusterIP   10.100.119.43   <none>        8000/TCP   3s
[root@master ~]# curl 10.100.119.43:8000
<!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>

-示例:使用NodePort,集群外部可访问

[root@master ~]# kubectl expose pod nginx --name svc-nginx --type=NodePort --port=8000 --target-port=80
service/svc-nginx exposed
[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          4d
svc-nginx    NodePort    10.107.26.219   <none>        8000:30987/TCP   4s
### 是k8s集群IP(任意节点ip均可)+30987端口即可访问,其中20,21,22是k8s集群节点ip
### 在浏览器中输入http://192.168.211.20:30987/ http://192.168.211.21:30987/  http://192.168.211.22:30987/ 都可以访问到nginx首页

8 delete

  • 功能:删除资源
  • flag:
    • --all:删除某类所有资源
    • -A:在所有命令空间查
    • -l:匹配指定的标签
  • 示例:删除指定标签的pod
[root@master ~]# kubectl get pod --show-labels
NAME    READY   STATUS    RESTARTS   AGE   LABELS
nginx   1/1     Running   0          69m   run=nginx
[root@master ~]# kubectl delete pod  -l run=nginx
pod "nginx" deleted

9 label

  • 功能:给资源添加标签
  • 语法:kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
    • --overwrite:如果标签名存在,就会更新。默认不更新。直接返回错误
  • 示例:示例给pod加上标签
[root@master ~]# kubectl label pod nginx version=1.0
pod/nginx labeled
[root@master ~]# kubectl get pod --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          2m23s   run=nginx,version=1.0
  • 示例:更新标签
[root@master ~]# kubectl label pod nginx version=2.0
error: 'version' already has a value (1.0), and --overwrite is false
[root@master ~]# kubectl label pod nginx --overwrite version=2.0
pod/nginx labeled
[root@master ~]# kubectl get pod --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          4m59s   run=nginx,version=2.0

10 annotate

title: label和annotate区别?
1. label是给Kubernetes用的,可以使用便签和标签选择器来关联资源;
2. annotate是给人用的,用于展示给用户,让用户获取额外信息,Kubernetes并不使用这段信息。
3. label有长度限制,而annotate没有长度限制
  • 功能:给资源添加或更新注释信息,annotations也是键值对形式
  • 语法:kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
    • --list:显示资源annotations列表
    • --overwrite:如果annotation存在相同的key,直接覆盖
    • --record:1.在资源注解中记录当前的 kubectl 命令;2.记录到版本更新历史中
  • 示例
[root@master k8s-yaml]# kubectl annotate deploy/nginx --overwrite --record  description="my deploy nginx 1"
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx annotated
[root@master k8s-yaml]# kubectl annotate deploy/nginx --overwrite description="my deploy nginx 1"
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx annotated
[root@master k8s-yaml]# kubectl annotate --list deploy/nginx
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx","namespace":"default"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"nginx"}},"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":1},"type":"RollingUpdate"},"template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx","name":"nginx"}]}}}}

kubernetes.io/change-cause=kubectl annotate deploy/nginx description=my deploy nginx 1 --overwrite=true --record=true
deployment.kubernetes.io/revision=1
description=my deploy nginx 1

11 cp

  • 功能:将文件和目录复制到容器和从容器复制。
  • 语法:`kubectl cp
    • --container NAME-c NAME:指定具体的容器,默认是Pod的第一个容器
  • 示例:
## Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
## Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
## Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

12 logs打印pod的日志

logs 只用来打印pod的日志,所以不需要执行资源的类型
  • 语法形式:kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]
    • -c CONTAINER:指定具体的容器
    • --follow-f:指定是否应流式传输日志。
    • --tail=num:最后几条日志
    • --since=time:当前时间之前多少时间内的,比如5s, 2m, 3h。
    • --since-time=time:从指定时间之后的,使用RFC3339时间格式
  • 示例
[root@master k8s-yaml]# kubectl logs nginx-8f458dc5b-lb97c --tail=20 --since=1h
/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
2022/07/30 12:30:57 [notice] 1#1: using the "epoll" event method
2022/07/30 12:30:57 [notice] 1#1: nginx/1.21.5
2022/07/30 12:30:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/07/30 12:30:57 [notice] 1#1: OS: Linux 5.18.10-1.el7.elrepo.x86_64
2022/07/30 12:30:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/07/30 12:30:57 [notice] 1#1: start worker processes
2022/07/30 12:30:57 [notice] 1#1: start worker process 30
2022/07/30 12:30:57 [notice] 1#1: start worker process 31

13 explain

  • 功能:列出资源支持的字段信息
  • 语法:kubectl explain RESOURCE
    • RESOURCE:可以指定某资源具体字段,格式为<type>.<fieldName>[.<fieldName>]
  • 示例
[root@master ~]# kubectl explain pod.spec.containers.image
KIND:     Pod
VERSION:  v1

FIELD:    image <string>

DESCRIPTION:
     Container image name. More info:
     https://kubernetes.io/docs/concepts/containers/images This field is
     optional to allow higher level config management to default or override
     container images in workload controllers like Deployments and StatefulSets.

14 kubectl中flags参数

14.1 -n指定命名空间

-n 是 --namespace 的简写
  • 示例
[root@master ~]# kubectl get pod -n default
NAME        READY   STATUS    RESTARTS        AGE
nginx-pod   1/1     Running   1 (3h54m ago)   4h6m

14.2 -o格式化输出

-o 是--output的简写
  • -o name:仅打印资源名称而不打印任何其他内容。
  • -o wide:以纯文本格式输出,包含所有附加信息。对于 Pod 包含节点名。
  • -o yaml:输出 YAML 格式的 API 对象。
  • -o json:输出 JSON 格式的 API 对象
  • 示例
[root@master ~]# kubectl  get pod 
NAME        READY   STATUS    RESTARTS       AGE
nginx-pod   1/1     Running   1 (143m ago)   155m
[root@master ~]# kubectl  get pod -o name
pod/nginx-pod
[root@master ~]# kubectl  get pod -o wide
NAME        READY   STATUS    RESTARTS       AGE    IP             NODE    NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   1 (140m ago)   152m   10.244.104.2   node2   <none>           <none>

14.3 -w监听资源变化

-w 是 --watch 的简写
  • 示例
[root@master ~]# kubectl get pod --watch 
NAME        READY   STATUS    RESTARTS       AGE
nginx-pod   1/1     Running   1 (160m ago)   172m

2. 更新命令

1 scale

  • 功能:扩缩容。为deployment, replica set, replication controller,stateful set资源指定大小,增加或减少副本数
  • 语法:kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
    • TYPE NAM:指定资源类型和名称
    • --replicas=COUNT:期望的副本数
    • --current-replicas=count:当前副本数(必须匹配当前副本数,才能执行,否则不执行)
    • --selector-l:资源需要匹配标签( '=', '==', and '!='.(e.g. -l key1=value1,key2=value2).)
  • 示例
[root@master k8s-yaml]# kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           75m
[root@master k8s-yaml]# kubectl scale  deployment/nginx  --current-replicas=3 --replicas=5
deployment.apps/nginx scaled
[root@master k8s-yaml]# kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   5/5     5            5           77m

2 edit

1. 默认编辑器是vi。可以通过修改环境变量KUBE_EDITOR或EDITOR来改变使用的文本编辑器
2. 可以yaml编辑文件,也可以直接编辑资源
3. 编辑时默认时以yaml格式显示资源配置,可以使用`-o json`参数指定json格式显示
  • 功能:使用编辑器(linux默认vi)编辑资源,并重新上线
  • 语法:kubectl edit (RESOURCE/NAME | -f FILENAME)
    • --save-config:当前对象的配置将保存在其注解中
    • --record:在资源注解中记录当前的 kubectl 命令
  • 示例
## edit修改副本数由1->2
[root@master ~]# kubectl edit deployments/nginx --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx edited

## 查看版本历史
[root@master ~]# kubectl rollout history deploy/nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         kubectl edit deployments/nginx --record=true

## 查看deploy信息
[root@master ~]# kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/2     2            1           25h

3 set

  • 功能:配置应用程序资源
  • 语法:kubectl set SUBCOMMAND

3.1 env

  • 功能:更新pod模板上的环境变量
  • 语法:kubectl set env RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N
    • RESOURCE:支持的资源有pod (po), replicationcontroller (rc), deployment (deploy), daemonset (ds), statefulset (sts), cronjob (cj), replicaset (rs)
    • --containers=NAME-c NAME:指定具体的容器
    • --overwrite:重写环境变量(如果环境变量已经存在,则覆盖)
    • --list:显示环境变量列表
    • --all:选择资源类型下所有资源
    • --record:记录变更时命令,kubectl rollout history命令中能看到变更记录
  • 示例1
[root@master ~]# kubectl set env deploy/nginx env1="hello world"
deployment.apps/nginx env updated
## 等待pod更新后,进入pod查看
[root@master ~]# kubectl exec nginx-86956484b-fgqsr -it -- /bin/bash
root@nginx-86956484b-fgqsr:/# echo $env1
hello world
  • 示例2:显示环境变量列表
[root@master ~]# kubectl set env deploy --all --list
# Deployment nginx, container nginx
env1=hello world
[root@master ~]# kubectl set env pods --all --list
# Pod nginx-6b69b7d8fd-4vjps, container nginx
env1=hello world

3.2 image

  • 功能:更新资源的现有容器镜像
  • 语法:kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N
    • --record:记录变更时命令,kubectl rollout history命令中能看到变更记录
  • 示例
[root@master ~]# kubectl set image deployment/nginx nginx=nginx:1.23  --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx image updated
[root@master ~]# kubectl describe deployments/nginx|grep Image
    Image:      nginx:1.23

3.3 resources

  • 功能:为定义 pod 模板的任何资源指定计算资源要求(CPU、内存)
  • 语法:kubectl set resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
    • --limits='':所能请求的计算机资源最大值,比如--limits=cpu=100m,memory=256Mi
    • --requests='':请求的资源(会收到limits的限制)
    • -c, --containers='*':指定具体的容器
    • --record:记录变更时命令,kubectl rollout history命令中能看到变更记录
  • 示例
[root@master ~]# kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
deployment.apps/nginx resource requirements updated
[root@master ~]# kubectl describe deployments/nginx|grep -A 2 Limits
    Limits:
      cpu:     200m
      memory:  512Mi

4 rollout

  • 功能:管理资源的上线服务
  • 适用资源:
    • deployments
    • daemonsets
    • statefulsets

4.1 history

更新资源时指定了 --record 选项,CHANGE-CAUSE字就会显示更新时执行的命令,否则显示<none>,示例:
- `kubectl set image deployment/nginx nginx=nginx:1.23 --record=true`
  • 功能:查看以前的推出修订和配置。
  • 语法:kubectl rollout history (TYPE NAME | TYPE/NAME) [flags]
  • 示例
[root@master ~]# kubectl rollout history deployment nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
[root@master ~]# kubectl set image deployment/nginx nginx=nginx:1.23  --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx image updated
[root@master ~]# kubectl rollout history deployment/nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         kubectl set image deployment/nginx nginx=nginx:1.23 --record=true

4.2 pause

当前只支持deployment资源
  • 功能:暂停资源的上线(此状态下,资源更新了,如deploy改变镜像版本,资源不会更新,直到恢复)
  • 语法:kubectl rollout pause RESOURCE
  • 示例
[root@master ~]# kubectl rollout pause deployment nginx
deployment.apps/nginx paused

4.3 restart

  • 功能:重启资源(重新上线)
  • 语法:kubectl restart pause RESOURCE
  • 示例
[root@master ~]# kubectl rollout restart deployment nginx
deployment.apps/nginx restarted

### deploy资源重启中
[root@master ~]# kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   2/3     3            2           19h

4.4 resume

当前只支持deployment资源
  • 功能:恢复暂停的资源(上线功能恢复)
  • 语法:kubectl rollout resume RESOURCE
  • 示例
[root@master ~]# kubectl rollout resume deployment nginx
deployment.apps/nginx resumed

4.5 status

  • 功能:显示上线的状态
  • 语法:kubectl rollout status RESOURCE
  • 示例
[root@master ~]# kubectl set env deploy/nginx env1="hello world"
deployment.apps/nginx env updated
## 立即查看,上线过程中,实时更新状态,直到上线完成
[root@master ~]# kubectl rollout status deployment nginx
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx" rollout to finish: 2 of 3 updated replicas are available...
deployment "nginx" successfully rolled out

4.6 undo

  • 功能:回滚版本
  • 语法:kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags]
    • to-revision=num:回退到指定版本,默认回退到上一个版本
  • 示例
[root@master ~]# kubectl rollout history deployment nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
3         <none>

[root@master ~]# kubectl rollout undo deployment nginx --to-revision=2
deployment.apps/nginx rolled back
[root@master ~]# kubectl rollout history deployment nginx
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
3         <none>
4         <none>

### 版本2定义了env环境变量是"hello world",结果显示正确
[root@master ~]# kubectl exec nginx-86956484b-kn8rz -it -- /bin/bash
root@nginx-86956484b-kn8rz:/# echo $env1 
hello world

3. 集群系统

1 version

  • 功能:显示Kubernetes集群版本信息
  • 语法:kubectl version
    • --short:只显示版本号
    • --client:只显示client版本信息
    • -o [json/yaml]:输出格式
  • 示例
[root@master ~]# kubectl version --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.24.2
Kustomize Version: v4.5.4
Server Version: v1.24.2

2 api-resources

  • 功能:显示支持的api资源
  • 语法:kubectl api-resources
    • --sort-by=[kind/name]:以kind或者name字段排序
    • -o [wide/name]:wide显示详细信息,name只显示name字段
    • --namespaced=bool:false显示非命名空间资源;true或者空显示命名空间资源
  • 示例
[root@master ~]# kubectl api-resources --namespaced --sort-by=name
NAME                        SHORTNAMES   APIVERSION                     NAMESPACED   KIND
bindings                                 v1                             true         Binding
configmaps                  cm           v1                             true         ConfigMap
controllerrevisions                      apps/v1                        true         

....中间省略....

services                    svc          v1                             true         Service
statefulsets                sts          apps/v1                        true         StatefulSet

3 alpha

1. 此命令表示还属于alpha阶段,默认的Kubernetes集群时没有此功能。
2. 目前只支持events命令

3.1 events

  • 功能:显示事件
  • 语法:kubectl alpha events [--for TYPE/NAME] [--watch]
    • --for TYPE/NAME:指定具体的资源
    • --watch:监听事件
  • 示例
[root@master ~]# kubectl alpha events --for pod/nginx
LAST SEEN           TYPE      REASON                 OBJECT      MESSAGE
50m (x2 over 51m)   Normal    TaintManagerEviction   Pod/nginx   Cancelling deletion of Pod default/nginx

4. 资源类型缩写统计

  • pod->po
  • nodes->no
  • namespaces->ns
  • persistentvolumeclaims ->pvc
  • persistentvolumes->pv
  • configmaps->cm
  • services->svc
  • deployment->deploy
  • daemonsets->ds
  • replicasets->rs
  • replicationcontrollers->rc
  • statefulsets->sts
  • storageclasses->sc

5. K8S快速生成yaml文件

  • 第一种,使用kubectl create 命令生成:kubectl create deployment web --image=nginx -o yaml --dry-run > my1.yaml
  • 第二种,使用kubectl get命令导出:kubectl get deploy nginx -o=yaml --export > my2.yaml