我应该在裸机上安装 flannel 作为系统服务还是 运行 作为带有 k8s 的 DaemonSet?

Should I install flannel on bare metal as systems service or run it as DaemonSet with k8s?

正在尝试在裸机上构建 k8s 集群。我使用 CoreOS 作为节点的主机 OS。我对为集群网络安装 flannel 的方式有点困惑。

我从文档中看到我可以将它下载到我的主机并使用 systemd 启动它,或者使用 k8s DaemonSet manifest.

我个人喜欢 DaemonSet 的想法,因为 k8s 会在每个节点上处理 运行ning flannel。但是运行ning flannel作为k8s-DaemonSet有什么缺点吗?

文档还说我应该先 运行 法兰绒 pods。这就是为什么我的第一个想法是将它放在为 kubelet --pod-manifest 参数指定的路径上。但是由于 flannel 的 yaml 不包含 PodDaemonSet 和一些与 RBAC 相关的实体,我使用 --pod-manifest 目录部署 flannel 时出现以下错误:

Can't process manifest file "/etc/kubernetes/manifests/flannel.yaml": /etc/kubernetes/manifests/flannel.yaml: couldn't parse as pod(invalid pod: &rbac.ClusterRole{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"flannel", GenerateName:"", Namespace:"", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Initializers:(*v1.Initializers)(nil), Finalizers:[]string(nil), ClusterName:""}, Rules:[]rbac.PolicyRule{rbac.PolicyRule{Verbs:[]string{"get"}, APIGroups:[]string{""}, Resources:[]string{"pods"}, ResourceNames:[]string(nil), NonResourceURLs:[]string(nil)}, rbac.PolicyRule{Verbs:[]string{"list", "watch"}, APIGroups:[]string{""}, Resources:[]string{"nodes"}, ResourceNames:[]string(nil), NonResourceURLs:[]string(nil)}, rbac.PolicyRule{Verbs:[]string{"patch"}, APIGroups:[]string{""}, Resources:[]string{"nodes/status"}, ResourceNames:[]string(nil), NonResourceURLs:[]string(nil)}}, AggregationRule:(*rbac.AggregationRule)(nil)}), please check manifest file.

所以如果我想在特定节点上的其他 pods 之前执行我的 flannel yaml-manifest,我应该把它放在哪里?或者唯一的选择是执行 kubectl apply -f flannel.yaml?

该清单包括一个 ClusterRole、一个 ClusterRoleBinding、一个 ConfigMap 和 DaemonSet 资源(它隐式定义了 pod 资源),因此它不能 运行 与 --pod-manifest,它只需要 pod 资源定义。

我没有比较经验 运行在 systemd 下使用 flannel 作为守护进程。

我会将 AddOn 管理器视为确保 kubernetes 对象被视为集群服务并在集群生命周期早期启动的一种方式:

https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/addon-manager/README.md