• 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 文件的步骤。
  • 相关阅读:
    算法漫游指北(第六篇)双端队列、排序算法分类、排序算法的稳定性、排序算法复杂度
    横冲直撞vue(第七篇):vue生命周期、vue组件
    还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!
    带你学够浪:Go语言基础系列
    带你学够浪:Go语言基础系列
    带你学够浪:Go语言基础系列
    带你学够浪:Go语言基础系列-环境配置和 Hello world
    带你学够浪:Go语言基础系列
    最香远程开发解决方案!手把手教你配置VS Code远程开发工具,工作效率提升N倍
    面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/12378433.html
Copyright © 2020-2023  润新知