1、创建pod
kubectl create -f mysql-rc.yaml #不建议使用,无法更新,必须先delete
kubectl apply -f mysql-rc.yaml #创建+更新,可以重复使用
2、删除pod
kubectl delete -f mysql-rc.yaml
3、查看pod信息
kubectl describe pod (pod的id)
4、获取pod运行在哪个节点上的信息。
kubectl get po -o wide
5、获取所有pod
kubectl get pod --all-namespaces
6、获取namespace 信息
kubectl get namespace
7、获取service信息
kubectl get service
kubectl get svc
说明:以上两条命令效果相同
8、获取node信息
kubectl get nodes
9、获取rc信息
kubectl get rc
10、获取deployment信息
kubectl get deploy
11、以json格式输入pod的详细信息
kubectl get pod <podname> -o json
12、pod集群扩容及缩容
kubectl scale rc nginx --replicas=2 #表示副本数量为2个
#replicationcontroller "nginx" scaled
pod缩容 #将 --replicas 设置为比当前 Pod 副本数量更小的数字,系统将会 “杀掉” 一些运行中的 Pod,即可实现应用集群缩容)
例如:
kubectl scale rc nginx --replicas=1 #表示副本数量为1个
13、收缩pod (rc资源类型)
kubectl scale rc nginx --replicas=0 #将pod数收缩为0
14、收缩pod (deploy资源类型)
kubectl scale deploy nginx --replicas=0 #将pod数收缩为0
kubectl scale deploy/nginx --replicas=0。 #将pod数收缩为0
说明:以上两条命令效果等同
15、deployment扩展
kubectl scale deploy/nginx --replicas=2 #表示副本数量为2个
16、kubectl查看日志
kubectl logs --tail=20 mysql-rj5z0
17、k8s删除一个Node节点并重新加入集群
17.1、k8s删除一个节点使用以下命令
17.2、删除一个节点前,先驱赶掉上面的pod
kubectl drain 172.16.20.134 --delete-local-data
#172.16.20.134 为node节点ip
17.3、删除节点
kubectl delete node 172.16.20.134
kubectl delete node nodename
17.3.1、删除前
[root@k8s_master ssl]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.16.20.130 Ready <none> 39d v1.8.3
172.16.20.134 Ready <none> 1m v1.8.3
17.3.2、删除后
[root@k8s_master ssl]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.16.20.130 Ready <none> 39d v1.8.3
从上面看已经删除了172.16.20.134节点
说明:删除一个节点后,这个节点如果重新启动kubelet服务的话,在master节点还是可以看到该节点的
17.4、彻底删除node节点
17.4.1、删除以下文件
[root@k8s_node2 kubernetes]# ll kubelet.kubeconfig
-rw-------. 1 root root 2280 11月 21 01:16 kubelet.kubeconfig
[root@k8s_node2 ssl]# ll kubelet*
-rw-r--r--. 1 root root 1046 11月 21 01:16 kubelet-client.crt
-rw-------. 1 root root 227 11月 21 01:16 kubelet-client.key
-rw-r--r--. 1 root root 1115 11月 21 01:16 kubelet.crt
-rw-------. 1 root root 1675 11月 21 01:16 kubelet.key
以上这些文件是在node上的kubelet启动后向master发出csr请求通过后生成的文件,删除后,重新启动kubelet就会重新发出csr请求,这样在master上重新通过csr请求就可以吧该节点重新加入到集群里了,以上这些文件也会自动生成。
[root@k8s_master ssl]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr--6yFaU0DijbaqnhPKsfqOlWxJJ2rovhz-15UcffuHcM 1h kubelet-bootstrap Approved,Issued
node-csr-5guRbgIjHdv2n8fmYccxcTtWjlSf3AT3S4wlX3q2SuY 39d kubelet-bootstrap Approved,Issued
node-csr-Z7lJElJ1gOtdJAMqJPjJdjCPEwAp2tM7KrGzQw5b6UE 18m kubelet-bootstrap Approved,Issued
重新通过
[root@k8s_master ssl]# kubectl certificate approve node-csr-Z7lJElJ1gOtdJAMqJPjJdjCPEwAp2tM7KrGzQw5b6UE
certificatesigningrequest "node-csr-Z7lJElJ1gOtdJAMqJPjJdjCPEwAp2tM7KrGzQw5b6UE" approved
重新查看集群节点
[root@k8s_master ssl]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
172.16.20.130 Ready <none> 39d v1.8.3
172.16.20.134 Ready <none> 5s v1.8.3
从以上可以看出,已经重新加入集群了
18、k8s零停机滚动发布微服务
kubectl set image deploy/my-tomcat my-tomcat=tomcat:latest
19、滚动回滚(回滚到上一版本)
kubectl rollout undo deploy/my-tomcat
20、查看历史版本
kubectl rollout history deployment my-tomcat
21、回滚指定版本
kubectl rollout undo deployment/my-tomcat --to-revision=<版次>
22、强制删除pod
kubectl delete pods <pod> --grace-period=0 --force
23、删除pod
kubectl delete deployment pod-name -n kube-system
24、根据label删除pod
kubectl delete pod -l app=deployment -n kube-system
25、导出配置文件:
导出proxy
kubectl get ds -n kube-system -l k8s-app=kube-proxy -o yaml>kube-proxy-ds.yaml
导出kube-dns
kubectl get deployment -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-dp.yaml
kubectl get services -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-services.yaml
导出所有 configmap
kubectl get configmap -n kube-system -o wide -o yaml > configmap.yaml
26、封锁节点
kubectl cordon $NodeName
27、驱逐pod到其它节点
kubectl drain $NodeName --ignore-daemonsets
28、取消封锁
kubectl uncordon $NodeName
29、删除资源
kubectl delete -f ./pod.json # 删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete pod,service cassandra cassandra # 删除名为“cassandra”的 pod 和名为“cassandra”的 service
kubectl delete pods,services -l name=myLabel # 删除具有 name=myLabel 标签的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
kubectl -n my-ns delete po,svc --all # 删除 my-ns namespace 下的所有 pod 和 serivce,包括尚未初始化的与运行中的 Pod 交互
kubectl logs my-pod # dump 输出 pod 的日志(stdout)
kubectl logs my-pod -c my-container # dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl logs -f my-pod # 流式输出 pod 的日志(stdout)
kubectl logs -f my-pod -c my-container # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl run -i --tty busybox --image=busybox – sh # 交互式 shell 的方式运行 pod
kubectl attach my-pod -i # 连接到运行中的容器
kubectl port-forward my-pod 5000:6000 # 转发 pod 中的 6000 端口到本地的 5000 端口
kubectl exec my-pod – ls / # 在已存在的容器中执行命令(只有一个容器的情况下)
kubectl exec my-pod -c my-container – ls / # 在已存在的容器中执行命令(pod 中有多个容器的情况下)
kubectl top pod POD_NAME --containers # 显示指定 pod 和容器的指标度量节点和集群交互
kubectl cordon my-node # 标记 my-node 不可调度
kubectl drain my-node # 清空 my-node 以待维护
kubectl uncordon my-node # 标记 my-node 可调度
kubectl top node my-node # 显示 my-node 的指标度量
kubectl cluster-info # 显示 master 和服务的地址
kubectl cluster-info dump # 将当前集群状态输出到 stdout
kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state