2 本地部署安装Calico网络
(1) 官方文档: https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
(2) 我这里集群使用的calico版本为v3.20.1。
(3) Kubernetes API datastore是Kubernetes工作负载推荐的数据存储。不建议将etcd数据库用于新安装。
但是,如果您将Calico 作为 OpenStack 和 Kubernetes 的网络插件运行,则它是一个选项。
在172.16.1.81(k8s-master1)节点上操作
2.1 文件配置
1 方式一: 使用Kubernetes API datastore安装Calico,50个或更少节点
(1)
下载
#
wget https://docs.projectcalico.org/manifests/calico.yaml
(2)
修改配置文件
# vim
calico.yaml
1) 修改pod
CIDR,与集群配置保持一致
2) 配置calico选择某网卡进行通信
-
name: IP_AUTODETECTION_METHOD
value:
"interface=eth1"
注: eth1为指定的通信网卡
3) 备注: CALICO_IPV4POOL_IPIP
Always # 为IPIP模式(默认)
Never
# 为BGP模式
(3)
初始化calico网络
# kubectl apply -f calico.yaml
2 方式二: 使用Kubernetes API datastore安装Calico,超过50个节点
(1)
下载
# wget https://docs.projectcalico.org/manifests/calico-typha.yaml
(2)
修改配置文件
# vim
calico-typha.yaml
1) 修改pod
CIDR,与集群配置保持一致
2) 配置calico选择某网卡进行通信
-
name: IP_AUTODETECTION_METHOD
value:
"interface=eth1"
注: eth1为指定的通信网卡
3) 修改Deployment命名为calico-typha的副本数
我们建议每200个节点至少有一个副本,并且不超过20个副本。在生产中,我们建议至少3个副本,以减少
滚动升级和故障的影响。副本数应始终小于节点数,否则滚动升级将停滞。
4) 备注: CALICO_IPV4POOL_IPIP
Always # 为IPIP模式(默认)
Never
# 为BGP模式
(3)
初始化calico网络
# kubectl apply -f calico-typha.yaml
3 方式三: 使用etcd datastore安装Calico
Calico使用etcd来保存网络拓扑和状态
(1)
下载
# wget
https://docs.projectcalico.org/manifests/calico-etcd.yaml
(2)
修改配置文件
# vim
calico-etcd.yaml
1) 填入etcd证书
# cat
/usr/local/etcd/ssl/etcd-key.pem | base64 -w 0 > ETCD-KEY
# cat
/usr/local/etcd/ssl/ca.pem | base64 -w 0 > ETCD-CA
# cat
/usr/local/etcd/ssl/etcd.pem | base64 -w 0 > ETCD-CERT
#
sed -i "s?# etcd-key: null?etcd-key: $(cat ETCD-KEY)?"
calico-etcd.yaml
#
sed -i "s?# etcd-ca: null?etcd-ca: $(cat ETCD-CA)?" calico-etcd.yaml
#
sed -i "s?# etcd-cert: null?etcd-cert: $(cat ETCD-CERT)?"
calico-etcd.yaml
2) 填入etcd的地址
# sed
-i \
's?http://<ETCD_IP>:<ETCD_PORT>?https://172.16.1.81:2379,https://172.16.1.82:2379,https://172.16.1.83:2379?'
\
calico-etcd.yaml
3) 开启etcd证书路径
#
sed -i 's?etcd_ca: ""?etcd_ca: "/calico-secrets/etcd-ca"?'
calico-etcd.yaml
#
sed -i 's?etcd_cert: ""?etcd_cert: "/calico-secrets/etcd-cert"?'
calico-etcd.yaml
#
sed -i 's?etcd_key: ""?etcd_key: "/calico-secrets/etcd-key"?'
calico-etcd.yaml
4) 修改pod
CIDR,与集群配置保持一致
5) 配置calico选择某网卡进行通信
-
name: IP_AUTODETECTION_METHOD
value:
"interface=eth1"
注: eth1为指定的通信网卡
6) 备注: CALICO_IPV4POOL_IPIP
Always # 为IPIP模式(默认)
Never
# 为BGP模式
(3)
初始化calico网络
# kubectl apply -f calico-etcd.yaml
4 查看网络(方式三环境)
(1) 查看所有pod的状态
(2)
calico本地文件存储(每个安装kubelet的节点上都有)
/opt/cni/bin/、/etc/cni/net.d/、/var/lib/cni/
(3) calico-kubeconfig认证文件
2.2 将calicoctl作为二进制文件安装在单个主机上
calicoctl用于管理Calico策略和配置,以及查看详细的集群状态,比如查看IP池利用率和BGP状态。
保始终安装calicoctl与集群上运行的 Calico 版本匹配的版本。
官方文档: https://docs.projectcalico.org/getting-started/clis/calicoctl/install
1 下载插件
# wget https://github.com/projectcalico/calicoctl/releases/download/v3.20.1/calicoctl-linux-amd64
#
mv calicoctl-linux-amd64 /usr/bin/calicoctl
# chmod +x /usr/bin/calicoctl
2 验证
默认通过/root/.kube/config访问api-server
(1)
获取calico节点
#
calicoctl get node
(2)
获取calico节点状态
# calicoctl node status
提示:
在节点上查看calico状态时,不显示当前节点的calico状态。
比如在172.16.1.82(k8s-master2)节点上查看calico的状态如下:
(3) 查看工作中的负载节点
#
calicoctl get workloadendpoints
(4)
查看当前集群状态
#
kubectl get nodes
# kubectl get pod -A -o wide
2.3 下线节点
1 驱除异常节点上的服务
# kubectl
drain <异常节点的nodename> --delete-local-data
--force --ignore-daemonsets
# kubectl
drain k8s-node1 --delete-local-data --force --ignore-daemonsets
#
驱除后查看Pod是否成功迁移到其他节点
2 删除node
# kubectl
delete node <异常节点的nodename>
#
kubectl delete node k8s-node1
# 删除后查看该node是否去除
3 清除节点信息(防止重新加入集群报错)
在172.16.1.83(k8s-node1)节点上操作
# iptables -nL
#
iptables -F
#
iptables -X
# iptables -Z
注: kubeadm还需要使用如下步骤
# kubeadm reset
4 删除多余网卡(正常网卡和docker0桥除外)
在172.16.1.83(k8s-node1)节点上操作
# systemctl
restart docker
# ifconfig
<网卡名>
down <=> ip
link set <网卡名>
down
# ip
link delete <网卡名>
#
rm -rf
/opt/cni/bin/*
#
rm -rf /etc/cni/net.d/*
# rm -rf /var/lib/cni/*
5 重新加入集群
(1)
二进制
# 重启kubelet服务
[root@k8s-node1
~]# systemctl restart kubelet.service
(2)
kubeadm方式
# 重新生成node加入集群的token,有效时间24小时
[root@k8s-master1 ~]# kubeadm token create
--print-join-command
6 查看是否加入集群
[root@k8s-master1 ~]# calicoctl node status