Kubectl常用命令

289 阅读3分钟

常用命令:create、apply、delete、get、logs、describe、run、expose、set、rollout、exec

create 命令:根据文件或者输入来创建资源

# 创建Deployment和Service资源
 
$ kubectl create -f demo-deployment.yaml
$ kubectl create -f demo-service.yaml

apply 命令:

apply并不告诉kubectl具体做什么,而是由kubectl根据后面-f中的yaml文件与k8s中对应的object对比,自动探测要进行哪些操作,比如如果object不存在,则create;如果已经存在,则对比差异,update and replace

# 滚动更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.11
# 或者
kubectl edit deployment/nginx-deployment
# 或者
kubectl apply -f nginx-deployment.yaml
# 或者 记录版本次
kubectl apply -f nginx-deployment.yaml --record

delete 命令:删除资源

# 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效
 
$ kubectl delete -f demo-deployment.yaml 
$ kubectl delete -f demo-service.yaml
 
# 也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源
 
$ kubectl delete 具体的资源名称

get 命令 :获得资源信息

# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces
# 查看pod列表
$ kubectl get pod
# 显示pod节点的标签信息
$ kubectl get pod --show-labels
# 根据指定标签匹配到具体的pod
$ kubectl get pods -l app=example
# 查看node节点列表
$ kubectl get node 
# 显示node节点的标签信息
$ kubectl get node --show-labels
# 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide
# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system
# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces
# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces
# 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get pod --all-namespaces  -o wide
# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs
# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide

logs 命令:日志查看

Usage:
  kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]
Examples: 
# 输出一个单容器pod my-pod的日志到标准输出
kubectl logs my-pod              

# 输出多容器pod中的某个nginx容器的日志
kubectl logs nginx-78f5d695bd-czm8z -c nginx     

# 输出所有包含app-nginx标签的pod日志
kubectl logs -l app=nginx      

# 加上-f参数跟踪日志,类似tail -f
kubectl logs -f my-pod       

# 输出该pod的上一个退出的容器实例日志。在pod容器异常退出时很有用
kubectl logs my-pod  -p              

# 指定时间戳输出日志      
kubectl logs my-pod  --since-time=2018-11-01T15:00:00Z

# 指定时间段输出日志,单位s/m/h    
kubectl logs my-pod  --since=1h 

# 查看前一个 pod 的日志,logs -p 选项 
kubectl logs --tail 100 -p user-klvchen-v1.0-6f67dcc46b-5b4qb > pre.log

describe 命令:输出指定的一个/多个资源的详细信息

# 描述一个node
$ kubectl describe nodes kubernetes-minion-emt8.c.myproject.internal

# 描述一个pod
$ kubectl describe pods/nginx

# 描述pod.json中的资源类型和名称指定的pod
$ kubectl describe -f pod.json

# 描述所有的pod
$ kubectl describe pods

# 描述所有包含label name=myLabel的pod
$ kubectl describe po -l name=myLabel

# 描述所有被replication controller “frontend”管理的pod(rc创建的pod都以rc的名字作为前缀)
$ kubectl describe pods frontend

run 命令:在集群中创建并运行一个或多个容器镜像

# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例
 
$ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
 
# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上
$ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'

expose 命令:创建一个service服务,并且暴露端口让外部可以访问

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

set 命令:配置应用的一些特定资源,也可以修改应用已有的资源

kubectl set resources

# 更新镜像
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
 
# 设置所有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

rollout 命令:

# Deployment部署的历史记录
$ kubectl rollout history deployment/nginx-deployment

# 可以查看deployment的更新过程
kubectl rollout status deployment/nginx-deployment

#  撤销本次发布回滚到上一个部署版本
$ kubectl rollout undo deployment/nginx-deployment

# 回滚到指定版本
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2





exec 命令

# 执行 pod 的 date 命令
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.9


# 通过bash获得 pod 中某个容器的TTY,相当于登录容器
kubectl exec -it <pod-name> -c <container-name> -- bash
eg:
kubectl exec -it redis-master-cln81 -- bash