kubctl命令
图来源:https://jimmysong.io/kubernetes-handbook/guide/using-kubectl.html
Kubectl 的子命令主要分为 8 个类别:
- 基础命令(初学者都会使用的)
- 基础命令(中级)
- 部署命令
- 集群管理命令
- 故障排查和调试命令
- 高级命令
- 设置命令
- 其他命令
下面列出来一些常用的:
-
查看集群状态:
# 查看客户端及服务端程序版本信息 kubectl version --short=true # 查看集群信息 kubectl cluster-info
-
查看资源清单配置字段的解释:
kubectl explain pods/deployments/...(二级对象可用类似于pods.spec这种方式查看)
-
创建资源对象:
# 创建并运行一个指定的可复制的镜像。 创建一个`deployment`或者`job`来管理创建的容器。 kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] # 陈述式对象配置管理方式 kubectl create -f **.yaml # 声明式对象配置管理方式(也适用于更新等) kubectl apply -f **.yaml # 将service暴露出去 kubectl expose deployments/deployment_name --type="NodePort" --port=(要暴露的容器端口) --name=(Service对象名字)
- kubectl create命令可创建新资源。 因此,如果再次运行该命令,则会抛出错误,因为资源名称在名称空间中应该是唯一的;
- kubectl apply命令将配置应用于资源。 如果资源不在那里,那么它将被创建。 如果配置文件中的资源在集群中已存在,则根据配置对资源字段进行更新。
-
查看资源对象:
# 查看命名空间 kubectl get namespace # 查看pod或者service,-o 输出格式 wide表示plain-text kubectl get pods,services -o wide # -l 标签选择器(多个的话是与逻辑),-n 指定命名空间,不指定默认default kubectl get pod -l "key=value,key=value" -n kube-system # -l 基于集合的标签选择器, -L查询结果显示标签,注意:为了避免和shell解释器解析!,必须要为此类表达式使用单引号 kubectl get pod -l "key1 in (val1,val2),!key2" -L key # -w 监视资源变动信息 kubectl get pod -w
-
更新资源对象:
# 进行热更新,直接编辑 kubectl edit [pods/services/deployments/...] name # apply进行更新 kubectl apply -f **.yaml # --force 如果需要基于此前的配置文件进行替换,需要加上force kubectl replace -f xx.yaml --force
-
删除资源对象:
# 删除指定资源对象 kubectl delete [pods/services/deployments/...] name # 删除kube-system下指定标签的资源对象 kubectl delete [pods/services/deployments/...] -l key=value -n kube-system # 删除kube-system下所有资源对象 kubectl delete [pods/services/deployments/...] --all -n kube-system # 强制删除Terminating的资源对象 kubectl delete [pods/services/deployments/...] source_name --force --grace-period=0 -n kube-system # 删除yaml定义的资源对象 kubectl delete -f xx.yaml # 一般不用这种方式删除 kubectl apply -f xx.yaml --prune -l <labels> # 默认删除控制器会同时删除其管控的所有Pod对象,加上cascade=false就只删除rs kubectl delete rs rs_name --cascade=fale
-
查看某资源对象的配置文件:
kubectl get source_type source_name -o yaml --export(--export表示省略由系统生成的信息) 后面加 > file.yaml就可以快速生成一个配置文件了
-
标签管理(node/pod):
# 查看所有节点的标签 kubectl get node --show-labels # 查看指定节点的标签 kubectl get node k8s-node01 --show-labels # 添加节点标签 kubectl label node k8s-node01 app=node01 # 修改节点标签 # kubectl label node 节点名 新的标签键值对 --overwrite=true kubectl label node k8s-node01 app=app01 --overwrite=true # 删除节点标签 kubectl label node k8s-node01 app-
-
打印容器中日志信息:
# -f 持续监控,-c如果pod中只有一个容器不用加 kubectl logs name -f -c container_name -n kube-system
-
在容器中执行命令:
# 执行命令
kubectl exec pod_name -c container_name -n kube-system -- COMMAND [args...]
# 进入容器, 如果 POD 中有多个容器,则需要 -c 指定容器名
kubectl exec pod_name [-c container_name] -it -- /bin/sh
-
扩容和缩容:
kubectl scale deployment/deployment_name --replicas=N # 只有当前副本数等于M时才会执行扩容或者缩容 kubectl scale deployment/deployment_name --replicas=N --current-replicas=M
-
patch修改Deployment控制器进行控制器升级:
# -p 以补丁形式更新补丁形式默认是json kubectl patch deployment deployment-demo -p '{"spec": {"minReadySeconds": 5}}' # 修改depolyment中的镜像文件 kubectl set image deployments deployment-demo myapp=ikubernetes/myapp:v2 # 打印滚动更新过程中的状态信息 kubectl rollout status deployment deployment-demo # 监控deployment的更新过程 kubectl get deployments deployment-demo --watch # 暂停更新 kubectl kubectl rollout pause deployments deployment-demo # 继续更新 kubectl rollout resume deployments deployment-demo # 查看历史版本(能查到具体的历史需要在apply的时候加上--record参数) kubectl rollout history deployments deployment-demo # 回滚到指定版本,不加--to-version则回滚到上一个版本 kubectl rollout undo deployments deployment-demo --to-revision=2