[toc]
Kubernetes (v1.22.5+)
Flannel (v0.14.0 ) 或者 Calico (v3.16.5)
KubeEdge (>= v1.9.0)或者 SuperEdge(v0.8.0)或者 OpenYurt( >= v1.2.0)
注1: Flannel目前仅支持Vxlan模式,支持双栈环境。
注2: Calico目前仅支持IPIP模式,kube backend存储(默认),不支持双栈环境。
确保防火墙或安全组允许以下协议和端口
如果机器上有firewalld,也最好关闭
获取集群配置信息,供后面使用
$ curl -s https://fabedge.github.io/helm-chart/scripts/get_cluster_info.sh | bash -
This may take some time. Please wait.
clusterDNS : 169.254.25.10
clusterDomain : cluster.local
cluster-cidr : 10.233.64.0/18
service-cluster-ip-range : 10.233.0.0/18
用helm添加fabedge repo:
helm repo add fabedge https://fabedge.github.io/helm-chart
安装FabEdge
$ curl https://fabedge.github.io/helm-chart/scripts/quickstart.sh | bash -s -- \
--cluster-name beijing \
--cluster-role host \
--cluster-zone beijing \
--cluster-region china \
--connectors node1 \
--edges edge1,edge2 \
--edge-pod-cidr 10.233.0.0/16 \
--connector-public-addresses 10.22.46.47 \
--chart fabedge/fabedge
说明:
--connectors: connector所在节点主机名,指定的节点会被打上node-role.kubernetes.io/connector标签
--edges: 边缘节点名称,指定的节点会被打上node-role.kubernetes.io/edge标签
--edge-pod-cidr: 用来分配给边缘Pod的网段, 使用Calico时必须配置,并确保这个值不能跟集群的cluster-cidr参数重叠
--connector-public-addresses: connector所在节点的公网IP地址,从边缘节点必须网络可达
注:quickstart.sh
脚本有很多参数,以上实例仅以最常用的参数举例,执行quickstart.sh --help
查询。
确认部署正常
$ kubectl get no
NAME STATUS ROLES AGE VERSION
edge1 Ready edge 5h22m v1.22.6-kubeedge-v1.12.2
edge2 Ready edge 5h21m v1.22.6-kubeedge-v1.12.2
master Ready master 5h29m v1.22.5
node1 Ready connector 5h23m v1.22.5
$ kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-8b5ff5d58-lqg66 1/1 Running 0 17h
calico-node-7dkwj 1/1 Running 0 16h
calico-node-q95qp 1/1 Running 0 16h
coredns-86978d8c6f-qwv49 1/1 Running 0 17h
kube-apiserver-master 1/1 Running 0 17h
kube-controller-manager-master 1/1 Running 0 17h
kube-proxy-ls9d7 1/1 Running 0 17h
kube-proxy-wj8j9 1/1 Running 0 17h
kube-scheduler-master 1/1 Running 0 17h
metrics-server-894c64767-f4bvr 2/2 Running 0 17h
nginx-proxy-node1 1/1 Running 0 17h
$ kubectl get po -n fabedge
NAME READY STATUS RESTARTS AGE
fabdns-7dd5ccf489-5dc29 1/1 Running 0 24h
fabedge-agent-bvnvj 2/2 Running 2 (23h ago) 24h
fabedge-agent-c9bsx 2/2 Running 2 (23h ago) 24h
fabedge-cloud-agent-lgqkw 1/1 Running 3 (24h ago) 24h
fabedge-connector-54c78b5444-9dkt6 2/2 Running 0 24h
fabedge-operator-767bc6c58b-rk7mr 1/1 Running 0 24h
service-hub-7fd4659b89-h522c 1/1 Running 0 24h
为需要通讯的边缘节点创建Community
$ cat > all-edges.yaml << EOF
apiVersion: fabedge.io/v1alpha1
kind: Community
metadata:
name: beijing-edge-nodes
spec:
members:
- beijing.edge1
- beijing.edge2
EOF
$ kubectl apply -f all-edges.yaml
根据使用的边缘计算框架修改相关配置
根据使用的CNI修改相关配置
如果有成员集群,先在主集群注册所有的成员集群,然后在每个成员集群部署FabEdge。在部署前,要注意确保各个集群的主机网络地址及容器网络地址不要重叠。
在主集群添加一个名字叫“shanghai”的成员集群,获取Token供注册使用
$ cat > shanghai.yaml << EOF
apiVersion: fabedge.io/v1alpha1
kind: Cluster
metadata:
name: shanghai # 集群名字
EOF
$ kubectl apply -f shanghai.yaml
$ kubectl get cluster shanghai -o go-template --template='{{.spec.token}}' | awk 'END{print}'
eyJ------省略内容-----9u0
用helm添加fabedge repo:
helm repo add fabedge https://fabedge.github.io/helm-chart
在成员集群安装FabEdage
curl https://fabedge.github.io/helm-chart/scripts/quickstart.sh | bash -s -- \
--cluster-name shanghai \
--cluster-role member \
--cluster-zone shanghai \
--cluster-region china \
--connectors node1 \
--edges edge1,edge2 \
--edge-pod-cidr 10.233.0.0/16 \
--connector-public-addresses 10.22.46.26 \
--chart fabedge/fabedge \
--service-hub-api-server https://10.22.46.47:30304 \
--operator-api-server https://10.22.46.47:30303 \
--init-token ey...Jh
说明:
--connectors: connector所在节点主机名,指定的节点会被打上node-role.kubernetes.io/connector标签
--edges: 边缘节点名称,指定的节点会被打上node-role.kubernetes.io/edge标签
--edge-pod-cidr: 用来分配给边缘Pod的网段, 使用Calico时必须配置。在v1.0.0版本前,这个值不能跟集群的cluster-cidr参数重叠,从v1.0.0起,建议该值是cluster-cidr的子集,但不要跟CALICO_IPV4POOL_CIDR/里的值重叠。
--connector-public-addresses: member集群connectors所在节点的ip地址
--service-hub-api-server: host集群serviceHub服务的地址和端口
--operator-api-server: host集群operator-api服务的地址和端口
--init-token: host集群获取的token
确认部署正常
$ kubectl get no
NAME STATUS ROLES AGE VERSION
edge1 Ready edge 5h22m v1.22.6-kubeedge-v1.12.2
edge2 Ready edge 5h21m v1.22.6-kubeedge-v1.12.2
master Ready master 5h29m v1.22.5
node1 Ready connector 5h23m v1.22.5
$ kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-8b5ff5d58-lqg66 1/1 Running 0 17h
calico-node-7dkwj 1/1 Running 0 16h
calico-node-q95qp 1/1 Running 0 16h
coredns-86978d8c6f-qwv49 1/1 Running 0 17h
kube-apiserver-master 1/1 Running 0 17h
kube-controller-manager-master 1/1 Running 0 17h
kube-proxy-ls9d7 1/1 Running 0 17h
kube-proxy-wj8j9 1/1 Running 0 17h
kube-scheduler-master 1/1 Running 0 17h
metrics-server-894c64767-f4bvr 2/2 Running 0 17h
$ kubectl get po -n fabedge
NAME READY STATUS RESTARTS AGE
fabdns-7b768d44b7-bg5h5 1/1 Running 0 9m19s
fabedge-agent-m55h5 2/2 Running 0 8m18s
fabedge-cloud-agent-hxjtb 1/1 Running 4 9m19s
fabedge-connector-8c949c5bc-7225c 2/2 Running 0 8m18s
fabedge-operator-dddd999f8-2p6zn 1/1 Running 0 9m19s
service-hub-74d5fcc9c9-f5t8f 1/1 Running 0 9m19s
在主集群,把所有须要通讯的集群加入一个Community
# 在master节点操作
$ cat > all-edges.yaml << EOF
apiVersion: fabedge.io/v1alpha1
kind: Community
metadata:
name: all-edges
spec:
members:
- shanghai.connector # {集群名称}.connector
- beijing.connector # {集群名称}.connector
EOF
$ kubectl apply -f all-edges.yaml
修改集群的coredns配置:
$ kubectl -n kube-system edit cm coredns
# 添加该配置
global {
forward . 10.109.72.43 # fabdns的service IP地址
}
.:53 {
...
}
启动cloudcore的dynamicController:
dynamicController:
enable: true
该配置项在cloudcore的配置文件cloudcore.yaml中,请根据您的环境自行寻找该文件。
确保cloudcore有访问endpointslices资源的权限(仅限于以Pod方式运行的cloudcore):
kubectl edit clusterrole cloudcore
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/managed-by: Helm
k8s-app: kubeedge
kubeedge: cloudcore
name: cloudcore
rules:
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- get
- list
- watch
重启cloudcore
在每个边缘节点上修改edgecore配置 ( kubeedge < v.1.12.0)
$ vi /etc/kubeedge/config/edgecore.yaml
edged:
enable: true
...
networkPluginName: cni
networkPluginMTU: 1500
clusterDNS: 169.254.25.10
clusterDomain: "cluster.local" # get_cluster_info脚本输出的clusterDomain
metaManager:
metaServer:
enable: true
或者 ( kubeedge >= v.1.12.2)
$ vi /etc/kubeedge/config/edgecore.yaml
edged:
enable: true
...
networkPluginName: cni
networkPluginMTU: 1500
tailoredKubeletConfig:
clusterDNS: ["169.254.25.10"]
clusterDomain: "cluster.local" # get_cluster_info脚本输出的clusterDomain
metaManager:
metaServer:
enable: true
在每个边缘节点上重启edgecore
$ systemctl restart edgecore
自v0.7.0起,fabedge提供了自动维护calico ippools功能,使用quickstart.sh
安装fabedge时,会自动启动这个功能。如果您希望自己管理calico ippools,可以在安装时使用--auto-keep-ippools false
配置项关闭这个功能。在启用自动维护calico ippools的情况下,以下内容可以跳过。
不论是什么集群角色, 只要集群使用Calico,就要将本集群的EdgePodCIDR其它所有集群的Pod和Service的网段加入当前集群的Calico配置, 防止Calico做源地址转换,导致不能通讯。
例如: host (Calico) + member1 (Calico) + member2 (Flannel)
在host (Calico) 集群的master节点操作,将member1 (Calico),member2 (Flannel)地址配置到host集群的Calico中。
在member1 (Calico)集群的master节点操作,将host (Calico) ,member2 (Flannel)地址配置到member1集群的Calico中。
在member2 (Flannel)无需任何操作。
$ cat > cluster-cidr-pool.yaml << EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: cluster-beijing-cluster-cidr
spec:
blockSize: 26
cidr: 10.233.64.0/18
natOutgoing: false
disabled: true
ipipMode: Always
EOF
$ calicoctl.sh create -f cluster-cidr-pool.yaml
$ cat > service-cluster-ip-range-pool.yaml << EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: cluster-beijing-service-cluster-ip-range
spec:
blockSize: 26
cidr: 10.233.0.0/18
natOutgoing: false
disabled: true
ipipMode: Always
EOF
$ calicoctl.sh create -f service-cluster-ip-range-pool.yaml
cidr参数是以下系统参数之一:
- 本集群的edge-pod-cidr
- 其他集群cluster-cidr
- 其他集群的service-cluster-ip-range
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。