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")
- https://github.com/argoproj/argo-rollouts/blob/459112b318b4a900639fd8a514bbefe12c392393/cmd/rollouts-controller/main.go#L244
- https://github.com/argoproj/argo-rollouts/blob/a3477cfbb85b40b0d5722a1f661d4dd261550fa4/controller/controller.go#L76-L77
そのため以下のいずれかで対応しましょう。
--leader-elect=false
をつけて起動する- 権限を付与する(GKEの場合は
container.leases.*
)