フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

argo-rolloutsが権限不足で起動しない人向け

f:id:lirlia:20210917203345p:plain

argo-rollouts がこんな感じのログを発行することがあります。

error retrieving resource lock argo-rollouts/argo-rollouts-controller-lock: leases.coordination.k8s.io "argo-rollouts-controller-lock" is forbidden: User "system:serviceaccount:argo-rollouts:argo-rollouts" cannot get resource "leases" in API group "coordination.k8s.io" in the namespace "argo-rollouts""

これは Cluster Role に設定されている leases 権限を必要とするものです。

# leases create/get/update needed for leader election
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - create
  - get
  - update

この権限は argo-rollouts controller を HA で動作させるために必要な k8s node のハートビート情報をチェックするためのものです。ここでトラップなのが argo-rollouts ではデフォルトで LeaderElect 設定が true となっているため、否応なくこの権限が必要 になります。

    // DefaultLeaderElect is the default true leader election should be enabled
    DefaultLeaderElect = true
   command.Flags().BoolVar(&electOpts.LeaderElect, "leader-elect", controller.DefaultLeaderElect, "If true, controller will perform leader election between instances to ensure no more than one instance of controller operates at a time")

そのため以下のいずれかで対応しましょう。

  • --leader-elect=false をつけて起動する
  • 権限を付与する(GKEの場合はcontainer.leases.*)