ITPub博客

首页 > 云计算 > Docker/K8 > K8s 组件优缺点

K8s 组件优缺点

Docker/K8 作者:Linksla 时间:2023-06-13 09:47:26 0 删除 编辑
Kubernetes 作为事实上的容器编排标准,已在企业和开源社区得到广泛的认同和使用。它不仅提供了高度可扩展、自管理的容器编排平台,具备强大的自动化管理能力,还拥有丰富的生态系统和第三方插件,可以实现各种定制化和扩展化需求。

除了普及 K8s 基本知识,例如,Pod 作为最小可部署单元,拥有独立 IP、主机名和进程;K8s 通过众多组件来管理和控制 Pod 的部署、更新、伸缩与网络等,还有哪些不被经常介绍,但需要了解的特性?本文试着来盘一盘。

01 Label

K8s 拥有众多组件,例如 Deployment 可以实现灰度发布、滚动升级;StatefulSet 可以保证有状态应用的有序部署和扩容;Service 可以实现负载均衡、服务发现等网络功能;Ingress 可以对外暴露应用服务,并提供 URL 路由、TLS 加密等服务;PV/PVC 可以实现数据持久化、共享等需求。
虽然,K8s 对于容器化应用的运维提供了完整的工具链,但当你遇到一大堆 Pod、节点等资源无从下手时,这里推荐你第一个功能是 Label,你既可以通过 app 来区分 Pod,也可以通过版本发布方式来区分 Pod,更先进更科学的 Label 方法,也欢迎大厂来提供哦。

PS:如果您的 Pod 长这样,那需要打标签了。

如何打 Label 

K8s 不仅可以给资源打标签,还可以通过标签选择器筛选出你想要的对象。

  • 列出标签

kubectl get po --show-labels
  • 只展示特定标签

kubectl get po -L label1, label2 /
  • 为已创建的 Pod 添加标签

kubectl label po xxxx xxxx=manual
  • 为节点添加标签

kubectl label node gke-kubia-8f56-node-0rrx gpu=true
  • 通过标签选择器列出节点

kubectl get node -l gpu=true

当然,Label 也有不足:例如 Label 在集群中不是一标识,不能自动更新,需要手动更新或删除,对于大规模的集群管理,会带来复杂度。

02 namespace

命名空间是 K8s 集群级别的资源,它的适用场景与标签不同,适合于跨多个团队或项目,K8s 默认会有一个 Default 命名空间,还有几个命名空间用于特定的目的,例如 kube-system 主要运行系统级资源等等。
可以通过  kubectl get ns  可以查看 namespace 资源:

    
    # kubectl get namespace/ns(缩写)
    
    NAME              STATUS           AGE
    
    default                   Active           102d
    
    kube-node-lease           Active           102d
    
    kube-public               Active           102d
    
    kube-system               Active           102d
    
    test                      Active           61d
    
    
    
    # 查看详细命名空间信息情况 # kubectl describe namespace default Name:                 default Labels:               <none> Annotations:          <none> Status:               Active No resource quota. No LimitRange resource. …省略部分信息…

    管理 namespace 资源

    namespace资源属性较少,通常只需要指定名称即可创建,如“kubectl create namespace qa”。
    namespace 资源的名称仅能由字母、数字、下划线、连接线等字符组成。
    删除 namespace 资源会级联删除其包含的所有其他资源对象。

      
      # 创建新的命名空间资源信息:# kubectl create ns test
      
      namespace/test created
      
      # kubectl get ns
      
      NAME                     STATUS           AGE
      
      test                      Active           4s
      
      
      
      # 删除已有命名空间资源信息:# kubectl delete ns test   --- 删除操作比较危险,慎用 - 创建指定命名空间 # kubectl create ns test # kubectl get ns test NAME              STATUS   AGE test                      Active    61d
      • 切换指定命名空间:

      切换命名空间后,kubectl get pods 如果不指定 -n ,查看的就是 kube-system 命名空间的资源了。

        
        # kubectl config set-context --current --namespace=kube-system
        
        Context "kubernetes-admin@kubernetes" modified.
        
        说明:表示从默认所在的default的命名空间状态,切换到指定的命名空间资源中
        
        
        
        # kubectl get pods NAME                                                READY   STATUS   RESTARTS           AGE calico-kube-controllers-6949477b58-5dqv4           1/1     Running           1                  61d calico-node-4ggj8                                  1/1     Running           1                  102d calico-node-4rmhx                                  1/1     Running           1                  102d calico-node-5xmjw                                  1/1     Running           2                  102d coredns-7f89b7bc75-krpzf                           1/1     Running           1                  61d coredns-7f89b7bc75-qvj5m                        1/1     Running           1                  61d etcd-k8s-master-01                                 1/1     Running           1                  102d etcd-k8s-master-02                                 1/1     Running           1                  102d kube-apiserver-k8s-master-01                       1/1     Running           1                  102d kube-apiserver-k8s-master-02                       1/1     Running           1                  102d kube-controller-manager-k8s-master-01              1/1     Running           4                  102d kube-controller-manager-k8s-master-02              1/1     Running           4                  102d kube-proxy-2zrtt                                   1/1     Running           1                  102d kube-proxy-dcxsv                                   1/1     Running           2                  102d kube-proxy-hs8x2                                   1/1     Running           1                  102d kube-scheduler-k8s-master-01                       1/1     Running           4                  102d kube-scheduler-k8s-master-02                       1/1     Running           4                  102d
        # kubectl config set-context --current --namespace=default Context "kubernetes-admin@kubernetes" modified.
        # 说明:表示从指定的命名空间所在的状态,切换到default的命名空间资源中
        # kubectl get pods NAME                          READY   STATUS    RESTARTS   AGE nginx-test-75c685fdb7-6g5m7        1/1     Running   1          61d nginx-test-75c685fdb7-6j9s8           1/1     Running   1          61d pod-first                             1/1     Running   0          54m

        当然,关于命名空间这里只是介绍了基础,还有多租户、隔离等相关内容没有介绍。
        关于使用 kubeConfig 高效切换命名空间的方法,也欢迎各位专家指正。

        03 Service

        Service 是用于在 K8s 集群内暴露一组 Pod 访问入口的抽象对象。它提供了一个稳定的 IP 地址和 DNS 名称,使得外部应用程序能够通过服务访问指定的一组 Pod。服务还提供了负载均衡机制,以便将流量分发到具有相同标签选择器的多个 Pod 上。
        如果您觉得 Pod 或一组 Pod 可以直接对外提供服务,那这里您可要好好看了,因为 Pod 提供 IP 不是的,并且 Pod 的 IP 地址是集群内部的,不能从外部访问。

        图片

        Service 架构图
        要让 Pod 能从外部访问,K8s 提供了一种机制——Service 来提供对外的访问,Service 也是一种特殊的 LoadBalancer 类型服务。
        另外,Pod 生命周期完成后是会被销毁的,重新创建的 Pod 会有新的 IP 地址、主机名和进程,如果单纯只有 Pod,不利于 K8s 大规模的服务与管理。


        当然,Service 也有缺点,比如 Service 只支持四层负载均衡,在实现七层负载均衡时候,Service 不支持,官方推荐的 Ingress 也有一些问题,这里暂且不涉及这方面内容

        04 小结

        在 K8s 中,从架构方面了解 K8s 固然没有错,如果一直停留在架构图层面,就不够了。需要深入挖掘、善于实践、抽丝剥茧。
        本文从 Label 入手,强调了打标签的重要性,也涉及了命名空间,注意:这里的命名空间需要与 Linux 的命名空间区分开~,还涉及了 Service 方面的内容。
        当然,本文还有很多没有涉及到的地方,如 RC、探针、DeamonSet 等方面的内容,更深入的内容,也欢迎广大网友投稿。
        最后,本文可能有不准确的地方,欢迎各位专家批评指正。


        来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013542/viewspace-2958287/ ,如需转载,请注明出处,否则将追究法律责任。

        请登录后发表评论 登录
        全部评论

        注册时间:2022-02-09

        • 博文量
          416
        • 访问量
          280356