跳转至

K8s

K8s 中 leader election 选举原理

在开发CRD时,定义 controller 的时候,会看到如下代码

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
    // 是否进行 leader 选举
    LeaderElection:          enableLeaderElection,
    // Namespace and name
    LeaderElectionNamespace: leaderElectionNamespace,
    LeaderElectionID:        "alluxio.data.fluid.io",
    // ...
})

对于有状态组件来说,实现高可用一般来说通过选主来达到同一时刻只能有一个组件在处理业务逻辑。

这里,会比较好奇这个选举是如何实现的,接下来的内容便从源码的角度进行解读。

K8s Pod 如何配置免密

MPI Operator 在执行 MPI 作业时,通过 SSH 的方式,因此需要在不同的 MPI Workers Pod间配置免密。

本文通过源码分析,探究如何在 K8s Pod 间配置免密。

K8s Configmap 挂载避免符号链接

在 k8s 中挂载 configmap 时,默认情况下,会以符号链接的形式存在。

在某些场景下,如 Pod 挂载 .ssh 进行免密时,由于.ssh的特殊权限,因此不能以符号链接的形式存在,否则不能 ssh 免密。

此时,可以使用 subpath 进行挂载。

Kubernetes ConfigMap 实时通知 Pod

在 K8s 中,官方说明 ConfigMap 整体作为卷被 Pod 挂载时,会自动更新。从 ConfigMap 更新到新键映射到 Pod 的总延迟可能与 kubelet 同步周期(默认为1分钟)+ kubelet 中 ConfigMap 缓存的 TTL(默认为1分钟)一样长。

官方说明可以通过更新 Pod 的一个注解来触发立即刷新