语法:
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
语法:
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
# 删除pod
kubectl delete pod -n
# 删除deployment
Kubectl delete deploy -n
# 指定yaml文件删除资源
kubectl delete -f
# 为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
配置应用资源。
使用这些命令能帮你更改现有应用资源一些信息。
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
显示资源书写信息
# 查看yaml文件中的deployment下面这么写
kubectl explain deployment
# 查看deployment下的metadata这么写
kubectl explain deployment.metadata
用于编辑资源信息
# 编辑service类型的nginx的一些信息
kubectl edit service/nginx
# 编辑pod的一下信息
kubectl edit pod/nginx
用于更新(增加、修改或删除)资源上的 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-
用于对资源进行管理
可用资源包括:deployment,daemonsets
子命令:
# 回滚到之前的deployment
kubectl rollout undo deployment/abc
# 查看deployment的状态
kubectl rollout status deployment/foo
扩容或缩容 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
这个比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
# 显示集群命令
kubectl cluster-info
用于查看资源的cpu,内存,磁盘等资源的使用率
以前需要插件:heapster ,后替换为metrics-server
# 查看pod使用率
kubectl top pod -A
# 查看节点使用率
kubectl top node
cordon命令:用于标记某个节点不可调度
uncordon命令:用于标签节点可以调度
drain命令: 用于在维护期间排除节点
# 用于某个节点不可调度
kubectl cordon node1
# 取消某个节点的不可调度
kubectl uncordon node1
# 驱逐某一个节点的所有pod到别的节点
kubectl drain node1
用于个给某个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-
查看资源的详细信息
# 语法
kubectl describe -n
用于在一个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
参数说明:
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"
用于取得 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
用于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
apply命令的使用方式同replace相同,不同的是,apply不会删除原有resource,然后创建新的。apply直接在原有resource的基础上进行更新。同时kubectl apply还会resource中添加一条注释,标记当前的apply
kubectl apply -f
和kubectl apply的用法一样
kubectl replace -f
# 强制替换,删除原有资源,然后重新创建资源
kubectl replace --force -f