calico typha 部署

发布 : 2022-06-09 分类 : 运维 浏览 :

需求

公司部署的kubernetes 尝试替换kube-ovn 使用calico,使用kubernetes api数据存储库安装calico 超过50节点的方式

1. 下载calico 部署文件

1
curl https://docs.projectcalico.org/manifests/calico-typha.yaml -o calico.yaml

2. 修改对应的 CIDR

如果您使用的是pod CIDR 192.168.0.0/16,请跳至下一步.如果您在kubeadm上使用其他Pod CIDR,则无需进行任何更改-Calico将根据正在运行的配置自动检测CIDR。对于其他平台,请确保在清单中取消对CALICO_IPV4POOL_CIDR变量的注释,并将其设置为与所选Pod CIDR相同的值。

3. 将副本计数修改为所需的Deployment名称,即calico-typha。

1
2
3
4
5
6
7
8
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: calico-typha
...
spec:
...
replicas: <number of replicas>

我们建议每200个节点至少一个副本,并且不超过20个副本。在生产中,我们建议至少使用三个副本,以减少滚动升级和故障的影响。副本数应始终小于节点数,否则滚动升级将停止。此外,只有在Typha实例少于节点的情况下,Typha才有助于扩展。

警告:如果typha_service_name将Typha部署副本计数设置为0,则Felix将不会启动。

4. 根据需求修改其它配置

因为我所有的节点都在同一个二层网络环境,所以我将IPIP模式关闭

1
2
3
4
5
3785             - name: CALICO_IPV4POOL_IPIP
3786 value: "Never"
3787 # Enable or Disable VXLAN on the default IP pool.
3788 - name: CALICO_IPV4POOL_VXLAN
3789 value: "Never"

5. 部署服务

1
kubectl apply -f calico.yaml

6. 验证部署结果

全部启动则说明成功,可以创建个pod,测试pod间网络是否互通,互通则无问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6486649bf8-9j9df 1/1 Running 0 2d20h
calico-kube-controllers-6486649bf8-fwpnc 1/1 Running 0 2d20h
calico-kube-controllers-6486649bf8-hs44f 1/1 Running 0 2d20h
calico-node-2pzzt 1/1 Running 0 2d21h
calico-node-4q2v7 1/1 Running 0 2d20h
calico-node-52b69 1/1 Running 1 2d20h
calico-node-7znch 1/1 Running 0 2d21h
calico-node-f8rqz 1/1 Running 0 2d21h
calico-node-ktt7s 1/1 Running 0 2d21h
calico-node-l7js2 1/1 Running 0 2d21h
calico-node-q5v22 1/1 Running 0 2d21h
calico-node-tkz7b 1/1 Running 0 2d21h
calico-node-wzckh 1/1 Running 0 2d21h
calico-typha-694ccd9cbd-59gfs 1/1 Running 0 2d20h
calico-typha-694ccd9cbd-nnx9s 1/1 Running 0 2d20h
calico-typha-694ccd9cbd-xq8kw 1/1 Running 0 2d20h

7. 配置BGP

默认calico 使用nodeToNodeMesh的方式获取路由,此方式在节点较少时影响不大,但是在大规模使用时,由于每个节点上的路由获取都需要节点间互相连接以获取正确的更新,节点越多,消耗的链接越大,所以大规模使用时,推荐构建内部的BGP路由反射器,以减少节点使用的BGP对等体数量,某些节点充当路线反射器,并配置为在它们之间建立完整的网格。然后,将其他节点配置为与这些路由反射器的子集(通常为冗余,通常为2个)进行对等,与全网状网络相比,减少了BGP对等连接的总数。

8.安装 calicoctl

我使用的二进制方式,部署到k8s 某个节点,需要能读取到 kubeconfig

1
2
# curl -O -L  https://github.com/projectcalico/calicoctl/releases/download/v3.18.1/calicoctl
# chmod +x calicoctl

9. 禁用默认的BGP节点到节点网格

必须禁用默认的节点到节点BGP网格才能启用其他BGP拓扑。为此,请修改默认的BGP配置资源。

需要注意,此步骤操作完后所有节点网络都会断开,如果是线上节点,请注意修改时机

运行以下命令禁用BGP全网状:

1
calicoctl patch bgpconfiguration default -p '{"spec": {"nodeToNodeMeshEnabled": false}}'

10. 配置全局BGP对等体

全局BGP对等体适用于群集中的所有节点。如果您的网络拓扑包括将与部署中的每个Calico节点建立对等关系的BGP扬声器,这将很有用。

以下示例创建一个全局BGP对等体,该对等体将每个Calico节点配置为与AS 64512中的10.10.11.1对等。

1
2
3
4
5
6
7
8
9
# cat peer.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: my-global-peer
spec:
peerIP: 10.10.11.1
asNumber: 64512
# calicoctl create -f peer.yaml

11.配置每个节点的BGP对等体

每节点BGP对等体适用于群集中的一个或多个节点。您可以通过准确指定节点名称或使用标签选择器来选择哪些节点。

以下示例创建一个BGPPeer,该BGPPeer将每个带有标签rack:rack-1的Calico节点配置为与AS 64512中的10.10.11.1对等。

1
2
3
4
5
6
7
8
9
10
# cat bgpperr.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: rack1-tor
spec:
peerIP: 192.20.30.40
asNumber: 64567
nodeSelector: rack == 'rack-1'
# calicoctl create -f bgpperr.yaml

12. 配置节点充当路由反射器

每节点BGP对等体适用于群集中的一个或多个节点。您可以通过准确指定节点名称或使用标签选择器来选择哪些节点。

以下示例创建一个BGPPeer,该BGPPeer将每个带有标签rack:rack-1的Calico节点配置为与AS 64512中的10.10.11.1对等。

1
2
3
4
5
6
7
8
9
10
11
# cat rack.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: rack1-tor
spec:
peerIP: 10.10.11.1
asNumber: 64512
nodeSelector: rack == 'rack-1'

# kubectl create -f rack.yaml

13. 配置节点充当路由反射器

可将Calico节点配置为充当路由反射器。为此,要用作路由反射器的每个节点必须具有群集ID-通常是未使用的IPv4地址。

要将节点配置为集群ID为244.0.0.1的路由反射器,请运行以下命令。

1
2
3
# calicoctl patch node 10.10.11.1 -p '{"spec": {"bgp": {"routeReflectorClusterID": "244.0.0.1"}}}'
# calicoctl patch node 10.10.11.2 -p '{"spec": {"bgp": {"routeReflectorClusterID": "244.0.0.1"}}}'
# calicoctl patch node 10.10.11.4 -p '{"spec": {"bgp": {"routeReflectorClusterID": "244.0.0.1"}}}'

通常,您将需要标记该节点以表明它是路由反射器,从而允许BGPPeer资源轻松选择它。您可以使用kubectl做到这一点。例如:

1
2
3
kubectl label node 10.10.11.1 route-reflector=true
kubectl label node 10.10.11.2 route-reflector=true
kubectl label node 10.10.11.4 route-reflector=true

现在,很容易使用标签选择器将路由反射器节点与其他非路由反射器节点配置为对等。例如:

1
2
3
4
5
6
7
8
9
# cat route-reflectors.yaml
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
name: peer-with-route-reflectors
spec:
nodeSelector: all()
peerSelector: route-reflector == 'true'
# kubectl create -f route-reflectors.yaml

14. 查看bgp对等状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+---------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+---------------+-------+----------+-------------+
| 10.10.11.2 | node specific | up | 02:25:07 | Established |
| 10.10.11.4 | node specific | up | 02:25:05 | Established |
| 10.10.11.1 | node specific | up | 02:25:44 | Established |
+--------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

查看节点连接 bir 的链接,只有我们配置的peer节点

1
2
3
4
5
# netstat -ntpla | grep bir
tcp 0 0 0.0.0.0:179 0.0.0.0:* LISTEN 9008/bird
tcp 0 0 10.10.11.104:179 10.10.11.2:53649 ESTABLISHED 9008/bird
tcp 0 0 10.10.11.104:55013 10.10.11.1:179 ESTABLISHED 9008/bird
tcp 0 0 10.10.11.104:179 10.10.11.4:43719 ESTABLISHED 9008/bird

本文作者 : WGY
原文链接 : http://geeklive.cn/2022/06/09/calico-deploy/undefined/calico-deploy/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
留下足迹