kubectl是陈述式资源管理方法,用于与apiservice进行通信,将用户在命令行输入的命令转化为apiservice能识别的信息,进而实现管理k8s各种资源的一种有效途径。
k8s中文社区学习文档:http://docs.kubernetes.org.cn/
https://kubernetes.io/zh/docs/concepts/architecture/nodes/
搭建K8s集群的两种方式:1、二进制;2、kubeadm
1、查看所有的命名空间:kubectl get ns
2、创建命名空间:kubectl create ns test_cluster(test_cluster指需要创建的命名空间的名字)
3、删除命名空间:kubectl delete ns test_cluster(test_cluster指需要删除的命名空间的名字)
4、查看指定命名空间下的所有资源:kubectl get all -n test_cluster(test_cluster表示命名空间)
5、查看所有节点信息:kubectl get nodes
6、查看所有namespace的pods运行情况:kubectl get pods --all-namespaces
7、查看具体的pod信息:kubectl get pods -o wide XXXXXXXXXX(pod名) -n kube-system(kube-system指具体的某个命名空间)
8、查看集群的健康状态:kubectl get cs
9、获取pod的结构信息:kubectl describe pods XXXXXXXXXXXXX(pod名) -n default(default指具体的某个命名空间)
10、获取node的结构信息:kubectl describe nodes XXX.XXX.XXX.XXX(节点名)
11、查看pod日志:kubectl logs XXXXXXXXX(pod名)(Ex:kubectl logs -f aep-aep-aepconsole-77b5d6fc77-kv7tm --tail=200)
12、获取pod控制器(deployment):kubectl get deployment -n default
13、创建pod:kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.0.0 -n default(nginx-dp是pod名)
(或者:kubectl apply -f nginx.yaml)
14、更新镜像(更新版本):
方式一:kubectl set image deployment nginx-deployment nginx=nginx:1.9.1 (nginx-deployment表示deployment名,nginx表示容器名称,nginx:1.9.1表示镜像名称)
方式二:kubectl edit deployment aep-dm-dmportal 编辑deployment,修改image版本号即可
15、查看历史发布版本:kubectl rollout history deployment nginx-deployment
回滚到上个版本:kubectl rollout undo deployment nginx-deployment
回滚到指定版本:kubectl rollout undo deployment --to-revision=2 (2表示具体的编号)
16、master主节点重启后,可能需要重启的服务:
(1)启动/重启/停止etcd服务:systemctl start/restart/stop etcd.service(etcd主要是持久化存储数据)
(2)启动/重启/停止apiserver服务:systemctl start/restart/stop kube-apiserver.service(k8s所有程序唯一入口)
(3)启动/重启/停止scheduler服务:systemctl start/restart/stop kube-scheduler.service(scheduler负责pod调度)
(4)启动/重启/停止controller服务:systemctl start/restart/stop kube-controller-manager.service(controller-manager执行整个后台的任务,包括节点状态、Pod个数、Pods和Service的关联)
work节点重启服务:
(1)启动/重启/停止kubelet服务:systemctl start/restart/stop kubelet.service(kubelet对pod进行启停,与master关联,实现集群管理的基本功能)
(2)启动/重启/停止kube-proxy服务:systemctl start/restart/stop kube-proxy.service(kube-proxy实现kubenetes service的通信与负载均衡机制的重要组件)
(3)启动/重启/停止docker服务:systemctl start/restart/stop docker.service
17、获取某个节点下面的pod数量:kubectl get pods -owide |grep 192.168.1.54 |wc -l
18、重启某个pod:kubectl delete pod XXXXXXXXX
强制重启某个pod:kubectl delete pod/XXXXX --grace-period=0 --force(如:kubectl delete pod/XXXXXXXX --grace-period=0 --force)
强制删除Terminating状态的pod:kubectl delete pod/XXXXX --grace-period=0 --force
19、进入某个具体的pod内:kubectl exec -it XXXXXXXXXX /bin/bash
20、设置不可调度状态:kubectl cordon 192.168.73.152
解除不可调度状态:kubectl uncordon 192.168.73.152
21、批量重启pod:
先查询出某个节点下面的所有pod:kubectl get pod -owide |grep 192.168.57.37
然后,把所有的pod名列出来:kubectl get pod -owide |grep 192.168.57.37 |awk '{print $1}'
最后,删除该节点下面的所有pod:kubectl get pod -owide |grep 192.168.57.37 |awk '{print $1}' |xargs kubectl delete pod
重启包含河北、海南、重庆、山西、山东、广东的所有节点:
kubectl get pod -owide | grep -Ei"hebei|hainan|chongqing|shanxi|shandong|guangdong" | awk '{print $1}' | xargs kubectl delete pods
22、删除所有UnexpectedAdmissionError状态的pod:
kubectl get pods -A | grep UnexpectedAdmissionError | awk '{printf("kubectl delete pod %s -n %s\n", $2, $1)}' | /bin/bash
23、检查容器网络连通性:在不通的节点上,ping一下其他节点的PodIP试一下,看是否网络连通
检查容器能否ping通外网:kubectl exec -it podname ping www.baidu.com
24、编辑deployment:kubectl edit deployment aep-dm-dmportal-anhui -o yaml
查看deployment:kubectl get deployment aep-dm-dmportal-anhui -o yaml
扩缩容:kubectl scale --replicas=0 deploy/aep-dm-dmportal(或者:kubectl scale deployment nginx-deployment --replicas 10)
如果想删除pod,只需要删除deployment即可:kubectl delete deployment nginx-deployment
25、驱逐节点,驱逐节点上的pod,由其他节点创建
(1)确定要移除的节点的名称:kubectl get nodes
(2)命令node节点开始释放所有pod,并且不接收新的pod进程:kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data
恢复驱逐的节点,恢复接收新的pod进程:kubectl uncordon [node-name]
26、 从集群中删除节点:
(1)驱逐node上的pod,其他节点重新创建:kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data
(2)从master节点删除该node,master对其不可见,失去对其控制,master不可对其恢复:kubectl delete node [node-name]
恢复节点并加入到集群中:
(1)进入待恢复的node节点中
(2)重启kubelet:systemctl restart kubelet
27、给节点打标签:
(1)节点添加标签:kubectl label node 192.168.1.205 mem=large
(2)查看所有主机所有标签:kubectl get node --show-labels
(3)查看某个pod所属标签:kubectl get pod XXXX --show-labels
(4)删除标签:kubectl label node 192.168.1.205 mem-(该命令中的mem-中的mem为标签的键,后面的减号表示将该标签删除)
(5)把pod调度到指定标签:可以通过修改pod所属的deployment中的nodeselector来指定pod调度到哪个节点上
(6)使用标签过滤pod:kubectl get pods -owide --selector app=aep-logcenter-filebeat
pod和service通过标签进行管理。当一个pod的IP发生变化的时候,service可以动态的提供负载均衡的能力
kubectl get ep 表示查看服务下面,绑定几个pod
kubectl get service aep-dm-dmportal -o yaml 查询这个service属于哪个标签
kubectl get pods -owide --selector name=aep-dm-dmportal 可以查询到该service关联到几个pod
查询service信息:kubectl get service
pod绑定标签,service绑定标签,pod的IP变化,service就能动态感知到。
可以通过kubectl get service 查询到集群暴露给外面访问的IP和端口,通过集群和端口可以访问到该集群下面的pod(service和pod通过标签进行关联)
通过kubectl get service aep-rule-web 可以查询port是访问端口
service两种类型:
1、ClusterIP:默认,分配一个稳定的IP地址,即VIP,只能在集群(整个k8s集群)内部访问
验证:curl ClusterIP:port
2、NodePort:在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定的内部集群IP地址。访问地址:IP:port 端口范围:30000-32767
通过kubectl get service flink-jobmanager-nodeport-suzhou-vpnmsgpush -o yaml 可以查询到nodeport的端口
可以看到30010就是对外暴露的端口
验证:通过浏览器访问IP:30010即可访问到集群内部的服务
ingress:https://blog.csdn.net/cbmljs/article/details/103183927
k8s复制
1.将pod里的文件拷贝到主机
kubectl cp -n 分区名 -c 容器名 pod名:文件绝对路径
文件目标位置
注意!!!
1.文件绝对路径前面不能加 /
2.文件目标位置不能为文件夹,必须为文件路径
例:将pod里
/data/test.sql 拷贝到主机当前路径下,并命名为test.sql
kubectl
cp -n zeus -c mysql zeus-mysql-back-0:data/test.sql ./test.sql
2.将主机文件拷贝到pod
kubectl cp 主机文件路径 -n 分区 -c 容器 pod名:容器内绝对路径
注意!!!
1.主机文件路径可以为相对路径,也可以为绝对路径。
2.pod内绝对路径前面不能有 /
例:将主机当前路径下的test.sql文件拷贝到pod的data目录下,并命名为testnew.sql
kubectl
cp ./test.sql -n zeus -c mysql zeus-mysql-back-1:data/testnew.sql