kubernates常用命令
Kubernetes常用操作命令
kubectl log //查看日志
$ kubectl log myapp-pod –c test
kubectl get pods查看pod列表
[root@node-1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-app-demo-7bdfd97dcd-7t72x 1/1 Running 0 28m nginx-app-demo-7bdfd97dcd-hsrft 1/1 Running 0 28m nginx-app-demo-7bdfd97dcd-qtbzd 1/1 Running 0 28m
kubectl exec –it 进入容器
[root@node-1 ~]# kubectl exec -it nginx-app-demo-7bdfd97dcd-7t72x /bin/bash 设置站点内容 [root@nginx-app-demo-7bdfd97dcd-7t72x:/# echo "web1" >/usr/share/nginx/html/index.html
kubectl get pod //同上pods
kubectl get pod –n kube-system //-n根据命名空间查找
kubectl get pod –n kube-system –o wide //查看更详细的信息
kubectl get pods -o wide //获取pod的ip地址等详细信息
[root@node-1 ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-app-demo-7bdfd97dcd-7t72x 1/1 Running 0 34m 10.244.2.4 node-3 <none> <none> nginx-app-demo-7bdfd97dcd-hsrft 1/1 Running 0 34m 10.244.1.2 node-2 <none> <none> nginx-app-demo-7bdfd97dcd-qtbzd 1/1 Running 0 34m 10.244.1.3 node-2
curl http://,,,,访问pod IP
[root@node-1 ~]# curl http://10.244.2.4 web1
kubectl expose 暴露service
暴露service,其中port表示代理监听端口,target-port代表是容器的端口,type设置的是service的类型
[root@node-1 ~]# kubectl expose deployment nginx-app-demo --name nginx-service-demo \ --port=80 \ --protocol=TCP \ --target-port=80 \ --type ClusterIP service/nginx-service-demo exposed
kubectl get services查看service列表
查看service列表,显示有两个,kubernetes为默认集群创建的service
[root@node-1 ~]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29h nginx-service-demo ClusterIP 10.102.1.1 <none> 80/TCP 2m54s
kubectl describe services <> 查看service详情
查看service详情,可以看到Labels的Seletor和前面Deployments设置一致,Endpoints将pod组成一个列表
[root@node-1 ~]# kubectl describe services nginx-service-demo Name: nginx-service-demo #名称 Namespace: default #命名空间 Labels: run=nginx-app-demo #标签名称 Annotations: <none> Selector: run=nginx-app-demo #标签选择器 Type: ClusterIP #service类型为ClusterIP IP: 10.102.1.1 #服务的ip,即vip,集群内部会自动分配一个 Port: <unset> 80/TCP #服务端口,即ClusterIP对外访问的端口 TargetPort: 80/TCP #容器端口 Endpoints: 10.244.1.2:80,10.244.1.3:80,10.244.2.4:80 #访问地址列表 Session Affinity: None #负载均衡调度算法 Events: <none>
访问service的地址,可以访问的内容可知,service自动实现了pods的负载均衡,调度策略为轮询,为何?因为service默认的调度策略Session Affinity为None,即是轮训,可以设置为ClientIP,实现会话保持,相同客户端IP的请求会调度到相同的pod上。
[root@node-1 ~]# curl http://10.102.1.1 web3
ClusterIP原理深入剖析,service后端实现有两种机制:iptables和ipvs,环境安装采用iptables,iptables通过nat的链生成访问规则,KUBE-SVC-R5Y5DZHD7Q6DDTFZ为入站DNAT转发规则,KUBE-MARK-MASQ为出站转发
[root@node-1 ~]# iptables -t nat -L -n Chain KUBE-SERVICES (2 references) target prot opt source destination KUBE-MARK-MASQ tcp -- !10.244.0.0/16 10.102.1.1 /* default/nginx-service-demo: cluster IP */ tcp dpt:80 KUBE-SVC-R5Y5DZHD7Q6DDTFZ tcp -- 0.0.0.0/0 10.102.1.1 /* default/nginx-service-demo: cluster IP */ tcp dpt:80
出站:KUBE-MARK-MASQ源地址段不是10.244.0.0/16访问10.102.1.1的目标端口80时,将请求转发给KUBE-MARK-MASQ链
入站:KUBE-SVC-R5Y5DZHD7Q6DDTFZ任意原地址访问目标10.102.1.1的目标端口80时
查看入站请求规则,入站请求规则将会映射到不同的链,不同链将会转发到不同pod的ip上。
1. 查看入站规则KUBE-SVC-R5Y5DZHD7Q6DDTFZ,请求将转发至三条链
[root@node-1 ~]# iptables -t nat -L KUBE-SVC-R5Y5DZHD7Q6DDTFZ -n Chain KUBE-SVC-R5Y5DZHD7Q6DDTFZ (1 references) target prot opt source destination KUBE-SEP-DSWLUQNR4UPH24AX all -- 0.0.0.0/0 0.0.0.0/0 statistic mode random probability 0.33332999982 KUBE-SEP-56SLMGHHOILJT36K all -- 0.0.0.0/0 0.0.0.0/0 statistic mode random probability 0.50000000000 KUBE-SEP-K6G4Z74HQYF6X7SI all -- 0.0.0.0/0 0.0.0.0/0
2. 查看实际转发的三条链的规则,实际映射到不同的pod的ip地址上
[root@node-1 ~]# iptables -t nat -L KUBE-SEP-DSWLUQNR4UPH24AX -n Chain KUBE-SEP-DSWLUQNR4UPH24AX (1 references) target prot opt source destination KUBE-MARK-MASQ all -- 10.244.1.2 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp to:10.244.1.2:80
[root@node-1 ~]# iptables -t nat -L KUBE-SEP-56SLMGHHOILJT36K -n Chain KUBE-SEP-56SLMGHHOILJT36K (1 references) target prot opt source destination KUBE-MARK-MASQ all -- 10.244.1.3 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp to:10.244.1.3:80
[root@node-1 ~]# iptables -t nat -L KUBE-SEP-K6G4Z74HQYF6X7SI -n Chain KUBE-SEP-K6G4Z74HQYF6X7SI (1 references) target prot opt source destination KUBE-MARK-MASQ all -- 10.244.2.4 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0
kubectl get pod –n kube-system –w 时时监视
kubectl get deployment
kubectl create创建pod //命令式对象配置
$ kubectl create –f pod.yaml //-f应该是从file或stdin创建
kubectl get pods 查看pod列表
kubectl delete pods <pod name> 删除pod
$ kubectl delete pods nginx
kubectl run //命令式命令
https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/
通过创建 Deployment 对象来运行 nginx 容器的实例:
kubectl run nginx --image nginx
使用不同的语法来达到同样的上面的效果:
kubectl create deployment nginx --image nginx
创建在配置文件中定义的对象:
kubectl create -f nginx.yaml
删除在两个配置文件中定义的对象:
kubectl delete -f nginx.yaml -f redis.yaml
通过覆盖实时配置来更新配置文件中定义的对象:
kubectl replace -f nginx.yaml
与命令式命令相比的优点:
- 对象配置可以存储在源控制系统中,比如 Git。
- 对象配置可以与流程集成,例如在推送和审计之前检查更新。
- 对象配置提供了用于创建新对象的模板。
与命令式命令相比的缺点:
- 对象配置需要对对象架构有基本的了解。
- 对象配置需要额外的写 YAML 文件的步骤。