1

尝试在裸机上构建 k8s 集群。我使用 CoreOS 作为我的节点的主机操作系统。而且我对我应该为集群网络安装法兰绒的方式有点困惑。

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

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

文档还说我应该在任何其他 pod 之前运行 flannel。这就是为什么我的第一个想法是将它放在为 kubelet--pod-manifest参数指定的路径上。但是由于 flannel 的 yaml 包含 not PodbutDaemonSet和一些与 RBAC 相关的实体,因此使用--pod-manifestdir 部署 flannel 时出现以下错误:

无法处理清单文件“/etc/kubernetes/manifests/flannel.yaml”:/etc/kubernetes/manifests/flannel.yaml:无法解析为 pod(无效 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), 终结器:[]string(nil), ClusterName:""}, 规则:[]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)}),请检查清单文件。[]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)}),请检查清单文件。[]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)}),请检查清单文件。

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

4

1 回答 1

1

该清单包括一个 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

于 2018-02-26T21:16:01.680 回答