k8s 常用基础命令_k8s k8s基础命令总结

 

k8s 常用基础命令_k8s k8s基础命令总结_02

 

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指具体的某个命名空间) 

troot@cloud03 monitorj# kubectl 
NAME 
pr 
[root@cloud03 moni kubectl 
NAME 
[rootgcl oud03 moni 
get pods 
READY 
1/1 
get pods 
READY 
1/1 
STATUS 
RESTARTS AGE 
Runn i ng 
47 d 
NODE 
192. 168. 1. 241 
192. 168. 1. 241 
e—sys 
u 
em 
STATUS 
RESTARTS AGE 
Runn i ng I 
47 d

 

8、查看集群的健康状态:kubectl get cs 

 

9、获取pod的结构信息:kubectl describe pods XXXXXXXXXXXXX(pod名) -n default(default指具体的某个命名空间) 

[root@c I oud03 
Name : 
Namespace : 
Node : 
Start Time: 
Labe Is: 
kubectl descr ibe pods —n default 
thumbor j 9k 
defau It 
192. 168. 1. 100/192. 168. 1. 100 
Tue, 21 Jul 2020 16:48:17 +0800 
app=78 
pod—terp I 
source=dcos

 

10、获取node的结构信息:kubectl describe nodes XXX.XXX.XXX.XXX(节点名) 

[root@c I oud03 
Name : 
Roles: 
Labe I s : 
Annotat ions: 
kubectl describe nodes 192. 168. l. 241 
192. 168. 1. 241 
(none) 
beta. kubernetes. io/arch=arrxi64 
beta. kubernetes. io/os=l inux 
kubernetes. io/hostname=192. 168. l. 241 
type=ernqxRouterNode 
node. alpha. kubernetes. io/tt 1=0

 

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 

[ root@hdss7-21 
NAME 
READY 
kubectt get 
UP-TO-DATE 
1 
deploy -n kube-public 
AVAILABLE AGE 
nginx -dp 1/1 
1 
IOS

 

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) 

( aot@hdss7-21 kubectl 
-n kube-public 
NAME 
nginx - dp -5dfc689474- x5nhb 
[root@hdss7-21 
get pods 
READY 
1/1 
STATUS 
Running 
STARTS 
AGE 
22s

 

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版本号即可 

- name: 
val ue: 
- name: 
val ue: 
- name: 
val ue: 
- name: 
val ue: 
- name: 
val ue: 
DEVOPS DEPLOY ENV CODE 
pr oduct_aep 
DEVOPS SERVICE VER_NO 
1. O. O-SNAPSHOT 
DEVOPS SERVICE VER 
"2737" 
DEVOPS SERVICE TYPE 
CUSTOM 
DEVOPS ZK CONNECT STRING 
172.25.55.221 : 10610, 172.25.55.51 : 10610, 172.25.55. 15: 10610 
Onage: 172. 25. l. 144: 8021 O. O—snapshot. jar : l. O. 
imagePul IPol icy: Always 
I i venessProbe: 
fai lureThreshold: 3 
initial Del aySeconds: 30 
per i : 10 
successThreshold: I 
tcoSocket

 

15、查看历史发布版本:kubectl rollout history deployment nginx-deployment 

    回滚到上个版本:kubectl rollout undo deployment nginx-deployment 

    回滚到指定版本:kubectl rollout undo deployment --to-revision=2 (2表示具体的编号) 

 

16master主节点重启后,可能需要重启的服务: 

(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调度到哪个节点上     

eSel ector : 
aep: product 
res ar o Icy: 
schedu I erName: 
5 
I ways 
defau I t—schedu I er

    (6)使用标签过滤pod:kubectl get pods -owide --selector app=aep-logcenter-filebeat 

 

    pod和service通过标签进行管理。当一个pod的IP发生变化的时候,service可以动态的提供负载均衡的能力 

    kubectl get ep  表示查看服务下面,绑定几个pod 

172. 26. 52. 118:8777 
172. 26. 52. 116:8777 
aep 
172. 26. 216. 116: 18080 
aep 
aep— i am— i 
— i am— i am—web—shanx i 
aep— i am— i i ang 
aep— i ama i —ctw i ngsearch 
—i ama i —mon i tor 
aep— I ogcenter—k i bana 
aep— I ogcenter—ng i nx 
172. 26. 189. 22:8777 
172. 26. 122. 247:5601, 172.26. 122. 247:9200 
172. 26. 122. 134:5601 
172. 26. 157. 140:5601, 172.26. 157. 140: 18079

      

    kubectl get service aep-dm-dmportal -o yaml  查询这个service属于哪个标签 

mon t 
monitorl# kubectl 
get service —o yaml 
apiVersion: VI 
kind: Service 
metadata: 
annotat i ons 
prometheus. 
p heus. 
Prometheus. 
prometheus. 
promet heus. 
prometheus. 
prometheus. 
Prometheus. 
prometheus. 
promet heus. 
prometheus. 
prometheus. 
labe 
i o/ app— info—dep I opcode: 
i info—env: product_aep 
i o/ dmportal 
i info—tenant: aep 
i o/app—metr i 
"false- 
i o/ app—rnetr ics—path: /metr i cs 
i o/app—metr i as—port "8777" 
i o/http—probe: "true" 
io/http—probe—path: / health 
i o/http—probe—port: "8777" 
i o/ scrape: 
"false" 
name: 
name: aep— m— mpor a 
namespace: default 
resourceVers ion: "54496" 
selfLink; /api / VI / 
uid: 113920f4-ff50-4969-bbb3-3ef60e5fd1de 
spec: 
clusterlP: 10.96. 227. 96

 

    kubectl get pods -owide --selector name=aep-dm-dmportal 可以查询到该service关联到几个pod 

mon i 
NAME 
I —745c6478c7—5kp4x 
aep—dm—dmporta I —745c6478c7—62r 2 j 
aep—dm—dmporta I —745c6478c7—f47r 5 
mon 
kubect I 
READY 
1/1 
1/1 
1/1 
get pods —se I ector 
STATUS 
Runn i ng 
Runn i ng 
Runn i ng 
RESTARTS AGE 
8h 
8h

 

查询service信息:kubectl get service 

pod绑定标签,service绑定标签,pod的IP变化,service就能动态感知到。 

可以通过kubectl get service 查询到集群暴露给外面访问的IP和端口,通过集群和端口可以访问到该集群下面的pod(service和pod通过标签进行关联) 

NAME 
i GemsgtodG 
monitor]# kubectl get service 
TYPE 
C I uster I p 
Cl uster I P 
Cl uster I p 
C I uster I p 
CLUSTER-I P 
10. 
96. 138. 103 
10. 
96.69. 210 
10.96. 194. 232 
10. 
96.37 1 
EXTERNAL-IP PORT(S) 
AGE 
8777/TCP 
(none) 
8777/TCP 
< none) 
8777/TCP 
8777/TCP 
480d

 

通过kubectl get service aep-rule-web 可以查询port是访问端口 

spec : 
cluster IP: 10.96. 144.255 
ports: 
ort: 8777 
protoco 
targetport: 8777 
se lector : 
narne: aep—ru I e—web 
sess ionAff inity: None 
type: Cluster IP 
status: 
loadBa lancer:

 

 

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的端口 

api / VI / namespaces/defaul t/ serv ice 
uid: ecff2bac-f858-48d5-9d2e-24d76260715c 
'pec : 
clusterlP: 10.96.58.147 
external Trafficpol icy: Cl uster 
ports : 
nodeport: 30010 
port : 
protocol : TCP 
targetPort: 8081 
sel ector : 
app: fl i 
component: jobmanager 
sessionAffinity: None 
type: NodePort 
status : 
I oadBa I ancer: O

可以看到30010就是对外暴露的端口 

f I i nk—jobmanager—nodeport—suzhou—msgpush 
fl i nk— I I 
Cl uster IP 
Node Port 
Cl uster IP 
10. 
10. 
96. 78. 22 
96. 
58. 147 
None 
(none) 
(none > 
38081 /TCP 
38081 : 30010/TCP 
6123/TCP. 6124/TCP. 8081 'TCP

验证:通过浏览器访问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​