• K8S的资源管理


    K8S的资源管理

    管理K8S资源的三种基本方法:

    • 陈述式资源管理方法-使用cli工具进行管理。
    • 声明式资源管理方式-主要依耐资源配置清单。
    • GUI式资源管理方法-主要依耐图形界面。

    陈述式资源管理方法

    1.1 查看名称空间

    kubectl get namespace
    kubectl get ns
    
    # 查看名称空间中的所有资源,不带-n默认就是查询default中的资源
    kubectl get all -n default
    

    1.2 创建名称空间

    kubectl create namespace app
    

    1.3 删除名称空间

    # 删除名称空间会删除里面的所有资源
    
    kubectl delete namespace app
    
    app 名称空间名称
    

    管理Deployment资源

    Replica Set ------------------------------ 副本集

    Deployment为PodReplica Set(升级版的 Replication Controller)提供声明式更新。

    你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

    注意:您不该手动管理由 Deployment 创建的 Replica Set,否则您就篡越了 Deployment controller 的职责!下文罗列了 Deployment 对象中已经覆盖了所有的用例。如果未有覆盖您所有需要的用例,请直接在 Kubernetes 的代码库中提 issue。

    典型的用例如下:

    • 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
    • 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
    • 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
    • 扩容Deployment以满足更高的负载。
    • 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
    • 根据Deployment 的状态判断上线是否hang住了。
    • 清除旧的不必要的 ReplicaSet。

    2.1 创建deployment

    kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.17.9 -n kube-public
    
    nginx-dp    # 创建的名字
    --image     # 需要镜像
    -n          # 创建在那个名称空间
    
    kubectl get pods -n kube-public -o wide
    
    -o wide    # 以扩展的方式查看
    

    2.2 查看deployment

    kubectl get deployment
    
    kubectl get deployment -n kube-public
    
    -o wide    # 查看扩展信息
    

    2.3 删除deployment

    kubectl delete deployment nginx-dp -n kube-public
    

    2.4 删除pod资源~重启

    kubectl delete pod <pod-name> -n namespace
    
    kubectl delete deploy nginx-dp -n kube-public
    # 如果删除了pod,没有删除控制器,控制器会让pod达到一个预设置的状态,所以pod会自动的拉起来。这也是重启pod的一种方法。
    
    # 强制删除
    kubectl delete pod nginx-ds-trrwk --grace-period=0 --force
    

    强制删除

    kubectl delete pod nginx-ds-trrwk --grace-period=0 --force

    管理service资源

    1.现在可以看到创建的pod IP是172.7.22.3

    2.当我们使用 kubectl delete pod nginx-dp -n kube-public 命令,删除pod之后再次查看,发现pod已经重新调度到了新的节点上面,而且pod的IP也更改了。

          在实际应用中如果是pod挂了,IP地址发生了改变,这样就会影响业务。所以`service`资源就是来解决这个问题的。
    

    3.1 创建service资源

    # 创建一个service资源,暴露一个端口。提供固定的业务访问接口。
    kubectl expose deployment nginx-dp --port=80 -n kube-public
    
    #把nginx-dp的副本数改为2
    kubectl scale deployment nginx-dp --replicas=2 -n kube-public
    
    scale    #  Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job
             # 设置一个新的deployment、副本数、Replication Controller。
    

    更改为了两个pod

    创建的service资源,并且提供了一个CLUSTER-IP ----------192.168.145.91,这样不管是pod的IP怎么变化始终service提供的接口IP是不会变化的。

    底层原理,通过LVS进行转发,同时还起到了负载均衡的效果。

    3.2 查看svc

    kubectl describe service -n kube-public
    
    kubectl describe svc -n kube-public
    
    describe    # 显示详细的信息
    

    总结

    陈述式资源管理方法可以满足90%以上的资源管理需求,但它的缺点也很明显:

    • 命令冗长
    • 特定场景下,无法实现需求
    • 对资源增、删、查操作比较容易,改的话就非常不方便。

    声明式资源管理方法

    声明式资源管理方法,使用-----资源配置清单(yamljson)

    获取资源配置请单

    [root@hdss7-21 ~]# kubectl get svc nginx-dp -n kube-public -o yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: "2021-04-13T07:21:39Z"
      labels:
        app: nginx-dp
      name: nginx-dp
      namespace: kube-public
      resourceVersion: "40542"
      selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
      uid: 92efaf9c-0af4-4576-ad03-12cec6fdfb35
    spec:
      clusterIP: 192.168.145.91
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx-dp
      sessionAffinity: None
      type: ClusterIP
    status:
      loadBalancer: {}
    
    # 必须要有的三个段
    apiVersion: 
    kind: 
    metadata:
    spec:
    
    # 查看帮助文档
    kubectl explain deployment.kind
    

    使用资源配置清单暴露service接口

    cat>>nginx-ds-svc.yaml<<EOF
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-ds
      name: nginx-ds
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx-ds
      type: ClusterIP
    EOF
    
    # 应用资源配置清单
    kubectl apply -f nginx-ds-svc.yaml
    
    # 查看资源
    kubectl get svc nginx-ds -o wide
    

    离线更改service暴露的端口

    vi nginx-ds-svc.yaml
    
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-ds
      name: nginx-ds
      namespace: default
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx-ds
      type: ClusterIP
      
    
    [root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml 
    service/nginx-ds configured
    
    

    在线更改

    kubectl edit svc nginx-ds
    

    删除资源配置

    陈述式删除

    kubectl delete svc nginx-ds
    

    声明式

    kubectl delete -f nginx-ds-svc.yaml
    
  • 相关阅读:
    博客模仿
    实体零售的数据分析与信息化之路
    巡店系统如何应用于连锁加盟店管理
    Dynamics CRM 常用的JS
    公众号被动消息回复原理
    form分辨率
    打开新网页 浏览图片
    网页浏览文件
    Model赋值返回json
    装载 反射
  • 原文地址:https://www.cnblogs.com/gshelldon/p/14734968.html
Copyright © 2020-2023  润新知