OpenKruise安装使用指导
一 背景
指导用户如何安装开源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
-
建议采用 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/
注意helm的版本和k8s的版本有兼容关系,由于演示集群的版本是1.25的kubernetes,所以最高只能安装v3.13的helm。helm与k8s 兼容关系参考:
- 安装openkruise
# 首先添加 charts 仓库 $ helm repo add openkruise https://openkruise.github.io/charts/ # 更新仓库 $ helm repo update # 安装最新版本的openkruise $ helm install kruise openkruise/kruise --version 1.5.2
kubectl get po -n kruise-system
应用部署完成后会在 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
可以发现kruise-daemon组件已不再部署
-
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 目前只能根据控制器里定义的排序来删除。
- 创建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
- 指定Pod缩容,CloneSet 允许用户在缩小 replicas 数量的同时,指定想要删除的 Pod 名字
如果此时需要缩容podsample-tg9tx
和sample-rfgxf
,可以修改cloneset配置:
可以发现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
- 点赞
- 收藏
- 关注作者
评论(0)