-
MAIN,主要的,建立介面,主要網路的實現。如:bridge、ipvlan、loopback、macvlan、ptp、vlan、host-device。
-
Windows,特用於Windows的MAIN外掛。如:win-bridge、win-overlay。
-
IPAM,僅提供IP地址分配功能。如:dhcp、host-local、static。
-
META,其他外掛,透過呼叫第三方外掛來實現網路功能。如:tuning、portmap、bandwidth、sbr、firewall、flannel。
1.Calico概述
1.1.Calico元件
1.1.1.CNI Plugin
1.1.2.Calico Node
-
Felix,Calico代理程式。執行在每個節點上的守護程序,它主要負責管理節點上網路介面、為節點建立路由資訊和ACL規則、以及報告當前節點網路的健康狀態給控制器等工作。
-
BIRD-BGP客戶端,BIRD是一個專案的簡稱,全稱為BIRD Internet Routing Daemon,BIRD是一個類UNIX系統下旨在開發一個功能齊全的IP路由守護程序,它是一個路由軟體,可以實現多種路由協議,如BGP、OSPF、RIP等。在Calico中,BIRD是一個BGP客戶端,用於使用BGP協議廣播給其他主機動態的學習路由規則。更多瞭解BIRD可參考:https://bird.network.cz/。
-
BIRD-Route Reflector(可擴充套件的元件),BGP客戶端在每個節點上執行,其隨著節點數量越來越多,一個BGP客戶端需要連線更多數量的其他BGP客戶端,其網路連線的數量非常多且網路會變得複雜。在節點之外,允許將BIRD程式配置成"Route Reflector"路由反射器工作方式,BGP客戶端可以直接連線到"Route Reflector"路由反射器,而不是很多數量的其他BGP客戶端,從而減少網路連線的數量,以提高BGP網路的效能。
1.1.3.Calico Controller
1.1.4.Calico Typha(可選的擴充套件元件)
1.2.Calico網路實現
1.2.1.動態路由模式(dynamic routing)
1.2.2.覆蓋網路模式(overlay network)
-
IPIP,使用IPIP封裝協議。當IPIP啟用的時候不允許啟用VXLAN。
-
VXLAN,使用VXLAN封裝協議。當VXLAN啟用的時候不允許啟用IPIP。
-
IPIPCrossSubnet,當物理主機是跨子網的情況下才使用IPIP覆蓋網路通訊方式,正常情況下使用BGP路由模式。
-
VXLANCrossSubnet,當物理主機是跨子網的情況下才使用VXLAN覆蓋網路通訊方式,正常情況下使用BGP路由模式。
-
None,不使用IPIP或VXLAN覆蓋網路模式。

1.3.瞭解Calico對CIDR子網的劃分(blockSize)
1.4.Calico網路策略
2.安裝Calico
-
使用calico.yaml清單檔案安裝
-
使用Tigera Calico Operator安裝Calico(官方最新指導)Tigera Calico Operator,Calico操作員是一款用於管理Calico安裝、升級的管理工具,它用於管理Calico的安裝生命週期。從Calico-v3.15版本官方開始使用此工具。Calico安裝要求:
-
x86-64, arm64, ppc64le, or s390x processor
-
2個CPU
-
2GB執行記憶體
-
10GB硬碟空間
-
RedHat Enterprise Linux 7.x+, CentOS 7.x+, Ubuntu 16.04+, or Debian 9.x+
-
確保Calico可以管理主機上的cali和tunl介面。
2.1.使用calico.yaml清單檔案安裝Calico
-
主機系統:CentOS Linux release 7.6.1810 (Core)
-
Kubernetes版本:v1.23.0Calico版本:v3.23.0其他提示:預設的calico.yaml清單檔案無需手動配置Pod子網範圍(如果需要,可透過CALICO_IPV4POOL_CIDR指定),預設使用kube-controller-manager的"–cluster-cidr"啟動項的值,即kubeadm init時指定的"–pod-network-cidr"或清單檔案中使用"podSubnet"的值。
1、配置Docker映象加速
[root@localhost ~]
# mkdir -p /etc/docker
[root@localhost ~]
# cat /etc/docker/daemon.json <<EOF
{
"registry-mirrors"
: [
"https://7mimmp7p.mirror.aliyuncs.com"
,
"https://registry.docker-cn.com"
,
"http://hub-mirror.c.163.com"
,
"https://docker.mirrors.ustc.edu.cn"
],
"exec-opts"
: [
"native.cgroupdriver=systemd"
],
"log-driver"
:
"json-file"
,
"log-opts"
: {
"max-size"
:
"100m"
},
"storage-driver"
:
"overlay2"
,
"storage-opts"
: [
"overlay2.override_kernel_check=true"
]
}
EOF
[root@localhost ~]
# sudo systemctl daemon-reload
[root@localhost ~]
# sudo systemctl restart docker
2、配置NetworkManager
[root@k8s-master01 ~]
# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali
EOF
3、下載calico.yaml
[root@k8s-master01 ~]
# wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate
4、修改calico.yaml
[root@k8s-master01 ~]
# cat calico.yaml |grep 'image:'
image: docker.io/calico/cni:v3.23.0
image: docker.io/calico/cni:v3.23.0
image: docker.io/calico/node:v3.23.0
image: docker.io/calico/kube-controllers:v3.23.0
[root@k8s-master01 ~]
# sed -i 's#docker.io/##g' calico.yaml
[root@k8s-master01 ~]
# cat calico.yaml |grep 'image:'
image: calico/cni:v3.23.0
image: calico/cni:v3.23.0
image: calico/node:v3.23.0
image: calico/kube-controllers:v3.23.0
5、應用calico.yaml
[root@k8s-master01 ~]
# kubectl apply -f calico.yaml
[root@k8s-master01 ~]
# kubectl get pod -n kube-system |grep calico
calico-kube-controllers-77d9858799-c267f 1/1 Running 0 92s
calico-node-6jw5q 1/1 Running 0 92s
calico-node-krrn6 1/1 Running 0 92s
calico-node-mgk2g 1/1 Running 0 92s
calico-node-wr2pv 1/1 Running 0 92s
2.2.使用Tigera Calico Operator安裝Calico
1、配置NetworkManager
[root@k8s-master01 ~]
# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali
EOF
2、使用tigera-operator.yaml清單檔案安裝Tigera Calico operator
[root@k8s-master01 ~]
# wget https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml -O calico-tigera-operator.yaml --no-check-certificate
[root@k8s-master01 ~]
# cat calico-tigera-operator.yaml |grep 'image:'
image: quay.io/tigera/operator:v1.27.0
[root@k8s-master01 ~]
# kubectl apply -f calico-tigera-operator.yaml
[root@k8s-master01 ~]
# kubectl get pod -n tigera-operator -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tigera-operator-566769dc67-mrnhs 1/1 Running 0 5m39s 192.168.124.132 k8s-node01 <none> <none>
3、下載並配置custom-resources.yaml清單檔案
[root@k8s-master01 ~]
# wget https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O calico-custom-resources.yaml --no-check-certificate
[root@k8s-master01 ~]
# vim calico-custom-resources.yaml
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
4、應用custom-resources.yaml清單檔案
[root@k8s-master01 ~]
# kubectl apply -f calico-custom-resources.yaml
5、檢視Calico是否執行
[root@k8s-master01 ~]
# kubectl get namespace
NAME STATUS AGE
calico-system Active 3m10s
default Active 5m55s
kube-node-lease Active 5m57s
kube-public Active 5m57s
kube-system Active 5m57s
tigera-operator Active 3m20s
[root@k8s-master01 ~]
# kubectl get pod -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7dfc6fb85-ktww2 0/1 Pending 0 8m33s
calico-node-2t4dp 0/1 Init:ImagePullBackOff 0 8m34s
calico-node-mmflx 0/1 Init:ImagePullBackOff 0 8m34s
calico-node-r94tt 0/1 Init:ImagePullBackOff 0 8m34s
calico-node-w7plh 0/1 Init:ImagePullBackOff 0 7m36s
calico-typha-5fb57458cc-g89qp 0/1 ImagePullBackOff 0 8m34s
calico-typha-5fb57458cc-t5xcm 0/1 ImagePullBackOff 0 8m28s
[root@k8s-master01 ~]
# kubectl describe pod calico-kube-controllers-7dfc6fb85-ktww2 -n calico-system
Normal BackOff 69s (x2 over 3m41s) kubelet Back-off pulling image
"docker.io/calico/pod2daemon-flexvol:v3.23.0"
Warning Failed 69s (x2 over 3m41s) kubelet Error: ImagePullBackOff
[root@k8s-master01 ~]
# kubectl describe pod -n calico-system |grep 'Events' -A 10 |grep -Eo '"docker.io/calico/.*"' |sort |uniq
"docker.io/calico/cni:v3.23.0"
"docker.io/calico/kube-controllers:v3.23.0"
"docker.io/calico/node:v3.23.0"
"docker.io/calico/pod2daemon-flexvol:v3.23.0"
"docker.io/calico/typha:v3.23.0"
[root@k8s-master01 ~]
# docker pull quay.io/calico/cni:v3.23.0
[root@k8s-master01 ~]
# docker pull quay.io/calico/kube-controllers:v3.23.0
[root@k8s-master01 ~]
# docker pull quay.io/calico/node:v3.23.0
[root@k8s-master01 ~]
# docker pull quay.io/calico/pod2daemon-flexvol:v3.23.0
[root@k8s-master01 ~]
# docker pull quay.io/calico/typha:v3.23.0
[root@k8s-master01 ~]
# kubectl get pod -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7dfc6fb85-vbn6q 1/1 Running 0 64m
calico-node-29h89 1/1 Running 0 64m
calico-node-9c54r 1/1 Running 1 (10m ago) 64m
calico-node-ntzvt 1/1 Running 0 64m
calico-node-s5bz9 1/1 Running 0 64m
calico-typha-5dd57768f4-79clk 1/1 Running 1 (10m ago) 27m
calico-typha-5dd57768f4-dk9ph 1/1 Running 0 64m
3.Calico清單詳解-calico.yaml(使用calico.yaml清單檔案安裝Calico安裝方式必讀)
-
使用DaemonSet在每個主機上安裝calico/node容器;
-
使用DaemonSet在每個主機上安裝Calico CNI二進位制檔案和網路配置;
-
使用Deployment執行calico/kube-controller;
-
Secert/calico-etcd-secrets提供可選的Calico連線到etcd的TLS金鑰資訊;
-
ConfigMap/calico-config提供安裝Calico時的配置引數。
3.1.配置PodIP範圍(PodCIDR)
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env
:
...
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
...
CALICO_IPV4POOL_CIDR
3.2.配置IPIP(預設)
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env
:
...
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value:
"Always"
...
CALICO_IPV4POOL_IPIP
3.3.切換IPIP為VXLAN
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
template:
spec:
containers:
- name: calico-node
image: calico/node:v3.14.2
env
:
...
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value:
"Never"
- name: CALICO_IPV4POOL_VXLAN
value:
"Always"
...
-
將"calico_backend: "bird""修改為"calico_backend: "vxlan"",這將停用BIRD。
-
從calico/node的readiness/liveness檢查中去掉"- -bird-ready"和"- -bird-live"。
livenessProbe:
exec
:
command
:
- /bin/calico-node
- -felix-live
# - -bird-live
readinessProbe:
exec
:
command
:
- /bin/calico-node
# - -bird-ready
- -felix-ready
CALICO_IPV4POOL_VXLAN
-
Always,永久啟用。
-
CrossSubnet,當物理主機是跨子網通訊的話才啟用,如果物理主機在同一2層網路中則使用BGP動態路由通訊方式。
-
Never,從不啟用,即停用。如果該項的值設定為"Never"以外的值,則不應設定"CALICO_IPV4POOL_VXLAN"。Calico覆蓋網路支援IPIP、VXLAN兩種協議,僅能啟用其中一種。VXLAN協議禁止啟用由"CALICO_IPV4POOL_VXLAN"項控制。
3.4.其他配置項
kind: ConfigMap
apiVersion: v1
metadata:
name: calico-config
namespace: kube-system
data:
typha_service_name:
"none"
calico_backend:
"bird"
veth_mtu:
"1440"
cni_network_config: |-
{
"name"
:
"k8s-pod-network"
,
"cniVersion"
:
"0.3.1"
,
"plugins"
: [
{
"type"
:
"calico"
,
"log_level"
:
"info"
,
"datastore_type"
:
"kubernetes"
,
"nodename"
:
"__KUBERNETES_NODE_NAME__"
,
"mtu"
: __CNI_MTU__,
"ipam"
: {
"type"
:
"calico-ipam"
},
"policy"
: {
"type"
:
"k8s"
},
"kubernetes"
: {
"kubeconfig"
:
"__KUBECONFIG_FILEPATH__"
}
},
{
"type"
:
"portmap"
,
"snat"
:
true
,
"capabilities"
: {
"portMappings"
:
true
}
},
{
"type"
:
"bandwidth"
,
"capabilities"
: {
"bandwidth"
:
true
}
}
]
}
typha_service_name: "none"
-
none,關閉Typha功能。
-
calico_typha,啟用Typha功能。
calico_backend: "bird"
veth_mtu: "0"
cni_network_config:
4.Calico清單詳解-custom-resources.yaml(使用Tigera Calico Operator安裝Calico安裝方式必讀)
# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
---
# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
name: default
spec: {}
spec.calicoNetwork
spec.calicoNetwork.bgp
spec.calicoNetwork.ipPools
spec.calicoNetwork.ipPools.blockSize(int32)
spec.calicoNetwork.ipPools.cidr(string)
spec.calicoNetwork.ipPools.encapsulation
-
IPIP,使用IPIP封裝協議。
-
VXLAN,使用VXLAN封裝協議。
-
IPIPCrossSubnet,當物理主機是跨子網的情況下才使用IPIP覆蓋網路通訊方式,正常情況下使用BGP路由模式。
-
VXLANCrossSubnet,當物理主機是跨子網的情況下才使用VXLAN覆蓋網路通訊方式,正常情況下使用BGP路由模式。
-
None,不使用IPIP或VXLAN封裝。
spec.calicoNetwork.ipPools.natOutgoing
spec.calicoNetwork.ipPools.nodeSelector(string)
5.完全解除安裝Calico網路外掛
1、刪除安裝清單中的所有資源物件
[root@k8s-master01 ~]
# kubectl delete -f calico.yaml
2、刪除tunl0虛擬網絡卡
[root@k8s-master01 ~]
# modprobe -r ipip
3、刪除Calico相關CNI配置檔案
[root@k8s-master01 ~]
# rm -rf /var/lib/cni/ && rm -rf /etc/cni/net.d/*
4、重啟kubelet服務
[root@k8s-master01 ~]
# systemctl restart kubelet

文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。
僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。









