OpenKruise安装使用指导

举报
可以交个朋友 发表于 2024/02/01 17:28:42 2024/02/01
【摘要】 指导用户如何安装开源openkruise,以及如何在CCE集群中使用。

一 背景

指导用户如何安装开源openkruise,以及如何在CCE集群中使用。


二 简介

  • 使用helm进行安装openkruise
  • 通过openkruise实现指定pod缩容

三 openkruise的安装与使用

openkruise当前最新版本为v1.5.2,以下操作将以v1.5的openkruise作为演示。
注意: 从 v1.0.0 (alpha/beta) 开始,OpenKruise 要求在 Kubernetes >= 1.16 以上版本的集群中安装和使用。


3.1 安装openkruise

  1. 建议采用 helm v3.5+ 来安装 Kruise
    如果当前节点上没有helm cli 可以参考如下命令进行helm的安装配置

    wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
    tar -zxvf helm-v3.13.0-linux-amd64.tar.gz
    mv linux-amd64/helm /usr/local/bin/
    

    image.png

    注意helm的版本和k8s的版本有兼容关系,由于演示集群的版本是1.25的kubernetes,所以最高只能安装v3.13的helm。helm与k8s 兼容关系参考:
    image.png


  1. 安装openkruise
    # 首先添加 charts 仓库
    $ helm repo add openkruise https://openkruise.github.io/charts/
    
    # 更新仓库
    $ helm repo update
    
    # 安装最新版本的openkruise
    $ helm install kruise openkruise/kruise --version 1.5.2
    
    

    image.png

    确认安装成功与否:
    kubectl get po -n kruise-system
    image.png
    应用部署完成后会在 kruise-system 命名空间下面运行 2 个 kruise–controller-manager 的 Pod,它们之间采用 leader-election 的方式进行选主,同一时间只有一个提供服务,达到高可用的目的。此外还会以 DaemonSet 的形式启动 kruise-daemon 组件,主要负责镜像预热等能力。
    如果不需要镜像镜像预热、原地升级等能力,则可以关闭kruise-daemon特性能力,节省集群资源使用量。
    参考命令: helm upgrade kruise openkruise/kruise --set featureGates="KruiseDaemon=false" --reset-values
    image.png
    可以发现kruise-daemon组件已不再部署

  1. openkruise特性参数说明
    直接安装 chart 会使用默认的 template values,可以根据你的集群情况指定一些特殊配置,比如修改 resources 限制或者配置 feature-gates。
    Feature-gate 控制了 Kruise 中一些有影响性的功能:

    Name 特性开关名称 Description Default Side effect (if closed)
    PodWebhook 启用对于 Pod 创建 的 webhook (不建议关闭) true SidecarSet/KruisePodReadinessGate 不可用
    KruiseDaemon 启用 kruise-daemon DaemonSet (不建议关闭) true 镜像预热/容器重启 不可用
    DaemonWatchingPod 每个 kruise-daemon 会 watch 与自己同节点的 pod (不建议关闭) true 同 imageID 的原地升级,以及支持 env from labels/annotation 原地升级 不可用
    CloneSetShortHash 启用 CloneSet controller 只在 pod label 中设置短 hash 值 false CloneSet 名字不能超过 54 个字符(默认行为)
    KruisePodReadinessGate 启用 Kruise webhook 将 ‘KruisePodReady’ readiness-gate 在所有 Pod 创建时注入 false 只会注入到 Kruise workloads 创建的 Pod 中
    PreDownloadImageForInPlaceUpdate 启用 CloneSet 自动为原地升级的过程创建 ImagePullJob 来预热镜像 false 原地升级无镜像提前预热
    CloneSetPartitionRollback 启用如果 partition 被调大, CloneSet controller 会回滚 Pod 到 currentRevision 老版本 false CloneSet 只会正向发布 Pod 到 updateRevision
    ResourcesDeletionProtection 资源删除防护 true 资源删除无保护
    TemplateNoDefaults 是否取消对 workload 中 pod/pvc template 的默认值注入 false Should not close this feature if it has open
    PodUnavailableBudgetDeleteGate 启用 PodUnavailableBudget 保护 pod 删除、驱逐 true 不防护 pod 删除、驱逐
    PodUnavailableBudgetUpdateGate 启用 PodUnavailableBudget 保护 pod 原地升级 false 不防护 pod 原地升级
    WorkloadSpread 启用 WorkloadSpread 管理应用多分区弹性与拓扑部署 true 不支持 WorkloadSpread (即不能实现指定资源池扩缩容)
    InPlaceUpdateEnvFromMetadata 启用 Kruise 原地升级容器当它存在 env from 的 labels/annotations 发生了变化 true 容器中只有 image 能够原地升级
    StatefulSetAutoDeletePVC 启用 StatefulSet 自动删除它所创建的 PVC true StatefulSet 不会清理 PVC
    PreDownloadImageForDaemonSetUpdate 启用 DaemonSet 自动为原地升级过程中创建 ImagePullJob 来镜像预热 true 原地升级无镜像提前预热
    PodProbeMarkerGate 启用 PodProbeMarker 能力 true PodProbeMarker 关闭
    SidecarSetPatchPodMetadataDefaultsAllowed 允许 SidecarSet Patch 任意 Annotations 到 Pob Object,不再进行白名单校验 false Annotations不允许随意Patch,需要通过 SidecarSet_PatchPodMetadata_WhiteList 配置
    SidecarTerminator 启用 SidecarTerminator 能力,在 Job 场景中当主容器退出后,能够停止 Sidecar 容器 false SidecarTerminator 不可用
    CloneSetEventHandlerOptimization 性能优化,减少 Pod Update 触发的无效 Reconcile 逻辑 false CloneSetEventHandlerOptimization 不启用
    ImagePullJobGate 启用 ImagePullJob 能力 false ImagePullJob 关闭
    ResourceDistributionGate 启用 ResourceDistribution 能力 false ResourceDistribution 关闭
    DeletionProtectionForCRDCascadingGate 启用 DeletionProtection 针对CRD资源的级联删除能力 false DeletionProtection 针对CRD资源的级联删除

    如果你要配置 feature-gate,只要在安装或升级时配置参数即可,比如:
    $ helm install kruise https://... --set featureGates="ResourcesDeletionProtection=true\,PreDownloadImageForInPlaceUpdate=true"


3.2 openKruise指定Pod缩容能力演示

当一个 CloneSet 被缩容时,有时候用户需要指定一些 Pod 来删除。这对于 StatefulSet 或者 Deployment 来说是无法实现的,因为 StatefulSet 要根据序号来删除 Pod,而 Deployment/ReplicaSet 目前只能根据控制器里定义的排序来删除。


  1. 创建CloneSet资源
    apiVersion: apps.kruise.io/v1alpha1
    kind: CloneSet
    metadata:
      labels:
        app: sample
      name: sample
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: sample
      template:
        metadata:
          labels:
            app: sample
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
    
    image.png

  1. 指定Pod缩容,CloneSet 允许用户在缩小 replicas 数量的同时,指定想要删除的 Pod 名字
    如果此时需要缩容pod sample-tg9txsample-rfgxf,可以修改cloneset配置:
    apiVersion: apps.kruise.io/v1alpha1
    kind: CloneSet
    metadata:
      labels:
        app: sample
      name: sample
    spec:
      replicas: 3     # 修改实例数量
      scaleStrategy:  # 配置扩缩容策略
        podsToDelete: # 显式声明需要删除的pod
        - sample-tg9tx
        - sample-rfgxf
      selector:
        matchLabels:
          app: sample
      template:
        metadata:
          labels:
            app: sample
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
    
    
    可以发现CloneSet已经缩容,指定的实例已经被删除。未指定的实例继续保留。
    image.png
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。