Skip to content

021安装集成K8s扩展套件OpenKruise

简介

OpenKruise 是一个基于 Kubernetes 的扩展套件,主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。

OpenKruise 提供的绝大部分能力都是基于 CRD 扩展来定义,它们不存在于任何外部依赖,可以运行在任意纯净的 Kubernetes 集群中。

核心能力

  • 增强版本的 Workloads

    • OpenKruise 包含了一系列增强版本的 Workloads(工作负载),比如 CloneSet、Advanced StatefulSet、Advanced DaemonSet、BroadcastJob 等。
    • 它们不仅支持类似于 Kubernetes 原生 Workloads 的基础功能,还提供了如原地升级、可配置的扩缩容/发布策略、并发操作等。
    • 其中,原地升级是一种升级应用容器镜像甚至环境变量的全新方式。它只会用新的镜像重建 Pod 中的特定容器,整个 Pod 以及其中的其他容器都不会被影响。因此它带来了更快的发布速度,以及避免了对其他 Scheduler、CNI、CSI 等组件的负面影响。
  • 应用的旁路管理

    • OpenKruise 提供了多种通过旁路管理应用 sidecar 容器、多区域部署的方式,“旁路” 意味着你可以不需要修改应用的 Workloads 来实现它们。
    • 比如,SidecarSet 能帮助你在所有匹配的 Pod 创建的时候都注入特定的 sidecar 容器,甚至可以原地升级已经注入的 sidecar 容器镜像、并且对 Pod 中其他容器不造成影响。
    • 而 WorkloadSpread 可以约束无状态 Workload 扩容出来 Pod 的区域分布,赋予单一 workload 的多区域和弹性部署的能力。
  • 高可用性防护

    • OpenKruise 在为应用的高可用性防护方面也做出了很多努力。
    • 目前它可以保护你的 Kubernetes 资源不受级联删除机制的干扰,包括 CRD、Namespace、以及几乎全部的 Workloads 类型资源。
    • 相比于 Kubernetes 原生的 PDB 只提供针对 Pod Eviction 的防护,PodUnavailableBudget 能够防护 Pod Deletion、Eviction、Update 等许多种 voluntary disruption 场景。
  • 高级的应用运维能力

    • OpenKruise 也提供了很多高级的运维能力来帮助你更好地管理应用。
    • 你可以通过 ImagePullJob 来在任意范围的节点上预先拉取某些镜像,或者指定某个 Pod 中的一个或多个容器被原地重启。

安装

用户手册

安装helm

配置镜像加速代理(关键)

text
"registry-mirrors": [
     "https://dockerproxy.com",
     "https://mirror.baidubce.com",
     "https://docker.m.daocloud.io",
     "https://docker.nju.edu.cn",
     "https://docker.mirrors.sjtug.sjtu.edu.cn"
]

离线安装openkruise

  • 从 v1.0.0 (alpha/beta) 开始,OpenKruise 要求在 Kubernetes >= 1.16 以上版本的集群中安装和使用。
  • 从 v1.5.0 (alpha/beta) 开始,OpenKruise 不再支持 dockershim。如果你依然在 K8S 集群中使用 docker 引擎运行容器, 你可以 将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd。
  • 从 v1.6.0 (alpha/beta) 开始,OpenKruise 要求在 Kubernetes >= 1.18 以上版本的集群中安装和使用。如果你关闭了 Kruise-Daemon 组件(featureGates="KruiseDaemon=false"),你依然可以在 K8S 1.16 和 1.17 的集群上安装和使用。
  • 从 v1.6.0 (alpha/beta) 开始,Kruise-Daemon 将不再支持 v1alpha2 CRI 的运行时。如果你关闭了 Kruise-Daemon 组件(featureGates="KruiseDaemon=false"),你依然可以在只支持 v1alpha2 CRI 的运行时节点所在集群上安装和使用 OpenKruise。
shell
#curl https://ghproxy.cc/https://github.com/openkruise/charts/releases/download/kruise-1.7.2/kruise-1.7.2.tgz > kruise-1.7.2.tgz
#docker pull openkruise/kruise-manager:v1.7.2
#curl https://github.com/openkruise/charts/releases/download/kruise-1.6.4/kruise-1.6.4.tgz > kruise-1.6.4.tgz
curl https://oss.odboy.cn/blog/files/k8s/kruise/kruise-1.6.4.tgz > kruise-1.6.4.tgz
docker pull registry.cn-shanghai.aliyuncs.com/odboy/ops:openkruise-kruise-manager-v1.6.4

# 运行时 docker, 访问权限一定要改(可用)
chmod 755 /var/run/dockerd.sock
helm install openkruise kruise-1.6.4.tgz \
--set manager.image.repository=registry.cn-shanghai.aliyuncs.com/odboy/ops \
--set manager.image.tag=openkruise-kruise-manager-v1.6.4 \
--set daemon.socketLocation=/var/run/ \
--set daemon.socketFile=dockerd.sock \
--set manager.replicas=2

# 运行时 containerd, 访问权限一定要改(可用)
chmod 755 /run/containerd
chmod 755 /run/containerd/containerd.sock
helm install openkruise kruise-1.6.4.tgz \
--set manager.image.repository=registry.cn-shanghai.aliyuncs.com/odboy/ops \
--set manager.image.tag=openkruise-kruise-manager-v1.6.4 \
--set daemon.socketLocation=/run/containerd/ \
--set daemon.socketFile=containerd.sock \
--set manager.replicas=2

kubectl get pod -n kruise-system -w

最终结果

jietu

自动补全配置

参考文档

shell
# 如果之前配置过就只需要执行以下命令即可
source /etc/profile

jietu2

卸载openkruise

注意:卸载会导致所有 Kruise 下的资源都会删除掉,包括 webhook configurations, services, namespace, CRDs, CR instances 以及所有 Kruise workload 下的 Pod。 请务必谨慎操作!

shell
helm uninstall openkruise