K8s kubectl 常用命令总结 ~ 一、常用别名 cat >> ~/.bash_profile <<EOF export NAMESPACE=default alias kgn='kubectl get node' alias kgns='rancher kubectl get node --show-labels' alias kdp='kubectl describe pod -n\$NAMESPACE' alias kgp='kubectl get pod -n\$NAMESPACE' alias kgpo='kubectl get pod -o wide -n\$NAMESPACE' alias kgs='kubectl get svc -n\$NAMESPACE' alias kgd='kubectl get deployment -n\$NAMESPACE' alias kaf='kubectl apply -f' alias kdf='kubectl delete -f' alias ko='kubectl exec -it -n\$NAMESPACE' alias kdd='kubectl describe deploy -n\$NAMESPACE' alias kde='kubectl delete pod -n\$NAMESPACE' alias kdef='kubectl delete pod --force --grace-period=0 -n\$NAMESPACE' alias kdn='kubectl describe node' alias klf='kubectl logs -f -n\$NAMESPACE' alias ked='kubectl edit deploy -n\$NAMESPACE' alias kgc='rancher kubectl get cm' EOF source ~/.bash_profile 二、基本命令 2.1.创建或更新资源对象 kubectl create -f my-service.yaml -f my-rc.yaml #根据YAML配置文件一次性创建Service和RC kubectl apply -f app.yaml #如果存在则更新,不存在则创建 2.2.查看资源对象 kubectl get node #查看Node状态 kubectl get pods pod1 pod2 #获取多个pod的信息 kubectl get pod <pod-name> -o wide #显示Pod的更多信息 kubectl get pod <pod-name> -o yaml #以YAML格式显示Pod的详细信息 kubectl get pod -l app=web #查看标签为app=web的Pod kubectl get pod -o name #获取Pod的名字 kubectl get rc,service #查看RC和Service列表 kubectl get endpoints #查看Endpoint列表 kubectl get pod -n kube-system -w #动态查看pod kubectl get cs #查看Master组件状态 kubectl api-resources #列出K8s所有资源 kubectl get all -n default #查看default命名空间下面的所有资源 kubectl cluster-info #查看集群接口信息 kubectl get apiservice #查看apiserver聚合层注册信息 kubectl api-versions #查看API的版本 kubectl logs -f <Pod名称> -c <容器名称> #如果Pod中有多个容器,需用-c指定 2.3.描述资源对象 kubectl describe pods <rc-name> #显示由RC管理的Pod的信息 kubectl describe node <node_name> #查看某个node的详细信息 2.4.删除资源对象 kubectl delete -f pod.yaml #根据pod.yaml定义的名称删除Pod kubectl delete pods,services -l name=<label-name> #删除所有包含某个Label的Pod和Service kubectl delete pods --all #删除所有Pod 2.5.执行容器的命令 kubectl exec <pod-name> date #执行Pod的date命令,默认使用Pod中的第一个容器执行 kubectl exec <pod-name> -c <container-name> date #指定Pod中的某个容器执行date命令 kubectl exec -it <pod-name> -c <container-name> /bin/bash #通过bash获得Pod中某个容器的TTY,相当于登陆容器 2.6.查看容器的日志 kubectl logs <pod-name> kubectl logs -f <pod-name> -c <container-name> #跟踪查看容器的日志,相当于tail -f命令的结果 2.7.kubectl自动补齐 yum -y install bash-completion bash source <(kubectl completion bash) 2.8.查看k8s版本 kubectl version 三、Pod操作 3.1. 生成一个外部访问的端口 kubectl expose deployment web --port=80 --type=NodePort 3.2. 强制删除Pod 新Pod已经Running,但上一个Pod一直处于Terminal状态 kubectl delete pod Podname --force --grace-period=0 3.3. 添加taint,避免Pod 调度到特定Node 上 kubectl taint node knative-node1 foo=bar:NoSchedule #删除taint kubectl taint node knative-node1 foo=bar:NoSchedule- 2.4. 将Pod的开放端口映射到本地 把Pod的80端口映射到本地的8888端口 kubectl port-forward --address 0.0.0.0 <pod-name> 8888:80 3.5. 在Pod和本地之间复制文件 kubectl cp <pod-name>:/etc/hosts /tmp kubectl cp <pod-name>:/tmp/java.out /root/java.out -c 容器名 -n <namespace> #必须指定拷贝到本地的文件名,如/root/java.out kubectl cp /tmp/dir <pod-name>:/tmp/ -c 容器名 -n <namespace> #拷贝目录为增量覆盖,同名的文件覆盖 3.6 启动一个测试DNS的Pod kubectl run dns-test -it --rm --image=busybox:1.28.4 -- sh 3.7. 查看pod标签 kubectl get pods --show-labels 3.8.查看Pod支持的字段 kubectl explain pods.spec.containers 3.9.列出指定标签的Pod名称 kubectl get pod -l app=web -o name 查看指定标签使用cpu最高的pod kubectl top pods -l app=web --sort-by="cpu" 四、RC操作 4.1. 动态缩放 kubectl scale rc myweb --replicas=3 五、Deployment 5.1.创建一个Deployment kubectl create deployment web --image=tomcat-app:v1 5.2.导出一个标准Deployment的yaml文件 #需要删除里面的creationTimestamp: null和status: {} kubectl create deployment web --image=nginx --dry-run=client -o yaml > deployment.template #对现有资源进行导出,内容比较多 kubectl get deployment web -o yaml > deployment.template 5.3.查看Deployment支持的字段 kubectl explain deployment 5.4.滚动升级 kubectl 更新容器镜像的几种方式 #web为deployment的名字,tomcat-app为容器的名字,tomcat:latest为镜像,--record记录操作日志,方便回滚 kubectl set image deployment web tomcat-app=tomcat:latest --record #查看升级状态 kubectl rollout status deployment web 滚动升级时,如果镜像版本一致,不会触发pod重建,容器更新 kubectl rollout restart deploy deploy名字 #此命令可以让容器重新部署 5.5.版本回滚 #查看Deployment部署过的版本 kubectl rollout history deployment web #回滚到上一个版本 kubectl rollout undo deployment web #回滚到指定版本 kubectl rollout undo deployment web --to-revision=2 5.6.弹性伸缩 #至少有3个Pod,当该Deployment下的所有Pod的CPU使用率之和达到80%时会扩容Pod到4~10个之间 kubectl autoscale deployment web --min=3 --max=10 --cpu-percent=80 #上述命令会创建一个HPA kubectl get hpa 六、Service 6.1.发布一个服务 kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort --port=80 #该Service监听的端口,可以通过Cluster IP+该端口访问 --target-port=8080 #业务容器监听的端口 --type=NodePort #采用NodePort类型,系统会随机分配一个端口供外部访问 集群内部访问,通过Cluster IP:80端口 curl 10.1.170.105 集群外部访问,通过任意Node IP:32072端口 6.2.导出一个标准Service的yaml文件 #需要删除里面的creationTimestamp: null、status: 和loadBalancer: {} kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort --dry-run=client -o yaml > service.template 七、命名空间 7.1.创建名字为cka的命名空间 kubectl create ns cka 7.2.给命名空间设置标签 kubectl label namespaces default testing=true kubectl label namespaces default testing- #删除标签 八、Node 8.1.给节点加污点,不往上面调度Pod kubectl cordon 节点名 8.2.给节点打标签 kubectl label node 节点名 nodeType=dev kubectl label node 节点名 nodeType- #删除标签 查看node污点 kubectl get nodes k8s-master -o go-template={{.spec.taints}} 九、PV 9.1.按容量进行排序 kubectl get pv --sort-by={.spec.capacity.storage} 十、实战 删除k8s节点 #设置不可调度 kubectl cordon 节点名 #驱逐pod kubectl drain 节点名 --delete-local-data --ignore-daemonsets #检查pod是否全部驱逐成功 kubectl describe nodes 节点名 #摘除集群 kubectl delete nodes 节点名 (责任编辑:IT) |