kubernetes常用命令

1、kubectl run 

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

# 启动一个pod指定镜像
kubectl run nginx --image=nginx

# 启动pod,暴露容器端口 5701
kubectl run nginx1 --image=nginx:1.17.1 --port=5701

# 启动一个pod,设置副本为3
kubectl run nginx2 --image=nginx:17.1 --replicas=3
报错:Flag --replicas has been deprecated, has no effect and will be removed in the future.
注:原因在于K8S v1.18.0以后,–replicas已弃用 ,推荐用 deployment 声明试对象创建 pod。

# 运行一个在前台运行的pod,如果退出不会重启
kubectl run -i --tty busybox --image=busybox --restart=Never

#试运行。不创建他们的情况下,打印出所有相关的 API 对象。
kubectl run nginx --image=nginx --dry-run -o yaml

2、kubectl get 

语法:
kubectl 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]


获取列出一个或者多个资源的信息
# 查看集群节点
kubectl get node

# 查看pod
kubectl get pod

# 获取指定命名空间的所有资源
kubectl get all -n 

# 查看集群组成的状态
kubectl get componentstatuses 或者 kubectl get cs

# 查看所有的命名空间啊
kubectl get namespaces 或者 kubectl get ns

# 显示指定标签匹配到的具体pod
kubectl get pods -l app=example

# 显示pod节点的标签信息
kubectl get pod --show-labels

#显示node节点的标签信息
kubectl get node --show-labels

3、kubectl delete

# 删除pod
kubectl delete pod  -n 

# 删除deployment
Kubectl delete deploy  -n 

# 指定yaml文件删除资源
kubectl delete -f 

4、kubectl expose

# 为deployment的nginx创建一个service服务,并且暴露端口让外部可以访问
kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service

# 为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。
kubectl expose rc nginx --port=80 --target-port=8000

5、kubectl set

配置应用资源。

使用这些命令能帮你更改现有应用资源一些信息。

1、资源限制范围resources 
#将 deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi

#设置deploy控制器nginx容器中Requests和Limits
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi

# 删除nginx中容器的计算资源值
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
2、容器镜像范围images
# 将deployment中的nginx容器镜像设置为“nginx:1.9.1”
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

# 所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”
kubectl set image deployments,rc nginx=nginx:1.9.1 --all

6、kubectl explain

显示资源书写信息

# 查看yaml文件中的deployment下面这么写
kubectl explain deployment

# 查看deployment下的metadata这么写
kubectl explain deployment.metadata

7、kubectl edit

用于编辑资源信息

# 编辑service类型的nginx的一些信息
kubectl edit service/nginx

# 编辑pod的一下信息
kubectl edit pod/nginx

8、kubectl label

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

#给名为foo的Pod添加label unhealthy=true
kubectl label pods foo unhealthy=true
 
# 给名为foo的Pod修改label 为 'status' / value 'unhealthy',且覆盖现有的value
kubectl label --overwrite pods foo status=unhealthy
 
# 给 namespace 中的所有 pod 添加 label
kubectl label  pods --all status=unhealthy
 
# 仅当resource-version=1时才更新 名为foo的Pod上的label
kubectl label pods foo status=unhealthy --resource-version=1
 
# 删除名为“bar”的label 。(使用“ - ”减号相连)
kubectl label pods foo bar-

9、kubectl rollout

用于对资源进行管理

可用资源包括:deployment,daemonsets

子命令:

  • history(查看历史版本)
  • pause(暂停资源)
  • resume(恢复暂停资源)
  • status(查看资源状态)
  • undo(回滚版本)
  • kubectl rollout status 部署状态更新状态检查
  • kubectl rollout history 部署的历史
  • kubectl rollout undo 回滚部署到最近或者某个版本
# 回滚到之前的deployment
kubectl rollout undo deployment/abc

# 查看deployment的状态
kubectl rollout status deployment/foo

10、kubectl scale

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

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

# 将名为foo中的pod副本数量设置为3
kubectl scale --replicas=3 rs/foo

# 将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3
kubectl scale --replicas=3 -f foo.yaml

# 如果当前副本数为2,则将其扩展至3。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

11、kubectl autoscale

这个比scale更加强大,也是弹性伸缩策略 ,它是根据流量的多少来自动进行扩展或者缩容。

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

# 使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间
kubectl autoscale deployment foo --min=2 --max=10

# 使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%
kubectl autoscale rc foo --max=5 --cpu-percent=80

12、kubectl cluster-info

# 显示集群命令
kubectl cluster-info

13、kubectl top

用于查看资源的cpu,内存,磁盘等资源的使用率

以前需要插件:heapster ,后替换为metrics-server

# 查看pod使用率
kubectl top pod -A

# 查看节点使用率
kubectl top node

14、kubectl corden

cordon命令:用于标记某个节点不可调度

uncordon命令:用于标签节点可以调度

drain命令: 用于在维护期间排除节点

# 用于某个节点不可调度
kubectl cordon node1

# 取消某个节点的不可调度
kubectl uncordon node1

# 驱逐某一个节点的所有pod到别的节点
kubectl drain node1

15、kubectl taint

用于个给某个node设置污点

#设置污点
kubectl taint nodes node1 key=value:effect

# 查看污点
kubectl describe nodes node1 | grep Taints

# 去除污点
kubectl taint nodes node1 key:effect-

# 去除所有污点
kubectl taint nodes node1 key-

16、kubectl describe

查看资源的详细信息

# 语法
kubectl describe   -n 

17、kubectl logs

用于在一个pod中输出日志,如果pod中只有一个容器可以省略容器名

语法:
kubectl logs [-f] [-p] pod [-c container] -n 

# 返回仅包含一个容器的pod nginx的日志快照
kubectl logs nginx

# 持续返回pod nginx的日志相当于tail -f
kubectl log -f nginx

# 返回pod ruby中已经停止的容器web-1的日志快照
kubectl logs -p -c ruby web-1

# 仅输出pod nginx中最近的20条日志
kubectl logs --tail=20 nginx

# 输出pod nginx中最近一小时内产生的所有日志
kubectl logs --since=1h nginx

参数说明:

  • -c, --container="": 容器名。
  • -f, --follow[=false]: 指定是否持续输出日志(实时日志)。
  • --interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true。
  • --limit-bytes=0: 输出日志的最大字节数。默认无限制。
  • -p, --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志。
  • --since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
  • --since-time="": 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
  • --tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。
  • --timestamps[=false]: 在日志中包含时间戳。

18、kubectl exec

exec命令同样类似于docker的exec命令,为在一个已经运行的容器中执行一条shell命令,如果一个pod容器中,有多个容器,需要使用-c选项指定容器。

语法:kubectl exec POD [-c CONTAINER] -- COMMAND [args...]

命令选项:

-c, --container="": 容器名。如果未指定,使用pod中的一个容器。

-p, --pod="": Pod名。

-i, --stdin[=false]: 将控制台输入发送到容器。

-t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。

# 进入nginx容器
kubectl exec -it nginx bash

# 以alpine系统作为基础镜像的进入容器命令如下
kubectl exec -it nginx sh

# 在容器里面执行命令
kubectl exec -it nginx echo "hello world"

19、kubectl attch

用于取得 pod 中容器的实时信息,可以持续不断实时的取出消息

类似于docker attach的功能,用于取得实时的类似于kubectl logs的信息

语法:kubectl attach POD -c CONTAINER

参数选项:

-c, --container="": 容器名。如果省略,则默认选择第一个 pod。

-i, --stdin[=false]: 将控制台输入发送到容器。

-t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。

# 获取正在运行的pod nginx的输出,默认链接到pod中的第一个容器
kubectl attach nginx

# 获取正在运行的pod中的指定容器的输出
kubectl attach  -c 

# 切换到终端模式,将控制台输入发送到pod的container的“bash”命令,并将其输出到控制台/错误控制台的信息发送回客户端。
kubectl attach  -c  -i -t

20、kubectl cp

用于pod和外部的文件交换,类似于docker 的cp,就是将容器中的内容和外部的内容进行交换。

kubectl cp 用于pod和外部的文件交换,比如如下示例了如何在进行内外文件交换。

# 把容器中的文件拷贝到本地
kubectl cp nginx:/usr/share/nginx/html/index.html /root/index.html

# 把本地的文档拷贝到容器
kubectl cp index.html nginx:/usr/share/nginx/html/index.html

21、kubectl apply

apply命令的使用方式同replace相同,不同的是,apply不会删除原有resource,然后创建新的。apply直接在原有resource的基础上进行更新。同时kubectl apply还会resource中添加一条注释,标记当前的apply

kubectl apply -f 

22、kubectl replace

和kubectl apply的用法一样

kubectl replace -f 

# 强制替换,删除原有资源,然后重新创建资源
kubectl replace --force -f 

你可能感兴趣的:(kubernetes,docker,容器)