kubectl命令¶
本教程使用的版本是k8s-v1.24.2 - 官网文档
kubectl的命令语法可总结成下面格式 -
kubectl [command] [TYPE] [NAME] [flags]
-commmand
:指定要对一个或多个资源执行的操作,例如create
、get
、describe
、delete
-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