k8s宿主机环境配置
CentOS 7 需要ElRepo提供的第三方内核, 而 CentOS 8 则附带受支持的内核。
#Systemd 245 及更高版本 ( ) 会覆盖Cilium 网络接口的设置。这引入了连接问题(有关详细信息,请参阅GitHub 问题 10645)。为避免这种情况, 请使用以下命令在 systemd 中进行查看:
systemctl --versionrp_filterrp_filter
#修复命令:
echo 'net.ipv4.conf.lxc*.rp_filter = 0' > /etc/sysctl.d/99-override_cilium_rp_filter.conf
systemctl restart systemd-sysctl
使用 systemd 挂载 BPFFS,由于 systemd挂载 文件系统的方式,挂载点路径必须在unit file中。
cat <<EOF | sudo tee /etc/systemd/system/sys-fs-bpf.mount
[Unit]
Description=Cilium BPF mounts
Documentation=https://docs.cilium.io/
DefaultDependencies=no
Before=local-fs.target umount.target
After=swap.target
[Mount]
What=bpffs
Where=/sys/fs/bpf
Type=bpf
Options=rw,nosuid,nodev,noexec,relatime,mode=700
[Install]
WantedBy=multi-user.target
EOF
在tke中初始化业务集群时添加的参数
kubenetes controller参数
- allocate-node-cidrs 自动分配和分配每个节点 IP 分配 CIDR 的能力
- network-plugin=cni
替换kube-proxy
kubectl -n kube-system delete ds kube-proxy
# Delete the configmap as well to avoid kube-proxy being reinstalled during a kubeadm upgrade (works only for K8s 1.19 and newer)
kubectl -n kube-system delete cm kube-proxy
# Run on each node with root permissions:
iptables-save | grep -v KUBE | iptables-restore
安装文档
首先用这种新东西,肯定是要看文档的,先把官方文档地址贴出来
https://docs.cilium.io/en/v1.10/gettingstarted/k8s-install-helm/
本次安装会添加的特定参数:
- 01、使用etcd作为kv store,etcd 版本 3.1.0 或更高版本。我什么时候需要使用 kvstore?— 如果您在具有超过 250 个节点、5k 个 pod 的环境中运行,或者如果您观察到 Kubernetes 事件导致的状态传播的高开销;如果您不希望 Cilium 将状态存储在 Kubernetes 自定义资源 (CRD) 中。
#创建cilium etcd证书
kubectl create secret generic -n kube-system cilium-etcd-secrets \
--from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt \
--from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
--from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt
#添加helm仓库
helm repo add cilium https://helm.cilium.io/
#部署cilium
helm install cilium-personal cilium/cilium --version 1.10.7 --namespace kube-system \
--set identityAllocationMode=kvstore \ #不希望 Cilium 将状态存储在 Kubernetes 自定义资源 (CRD) 中
--set etcd.enabled=true \
--set etcd.ssl=true \
--set "etcd.endpoints[0]=https://etcd-endpoint1:2379" \
--set "etcd.endpoints[1]=https://etcd-endpoint2:2379" \
--set "etcd.endpoints[2]=https://etcd-endpoint3:2379" \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,port-distribution,icmp,http}" \
--set hubble.listenAddress=":4244" \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set kubeProxyReplacement=strict \ #代替 kube-proxy kernel 4.19.57
--set k8sServiceHost=REPLACE_WITH_API_SERVER_IP \
--set k8sServicePort=REPLACE_WITH_API_SERVER_PORT \
--set egressGateway.enabled=true \ # kernel 5.2
--set bpf.masquerade=true \
--set nodePort.enabled=true \
--set bpf.clockProbe=true \
--set bpf.waitForMount=true \
--set bpf.preallocateMaps=true \
--set bpf.lbMapMax=131072 \
--set cni.chainingMode=portmap \
--set hostServices.enabled=true \
--set hostPort.enabled=true \
--set hostFirewall.enabled=true \
--set bpf.preallocateMaps=true \
--set bpf.waitForMount=true \
--set ipam.mode="kubernetes" \
--set ipam.operator.clusterPoolIPv4PodCIDR=10.126.0.0/16
#生成部署模板
helm template cilium ./cilium --namespace kube-system \
--set identityAllocationMode=kvstore \
--set etcd.enabled=true \
--set etcd.ssl=true \
--set "etcd.endpoints[0]=https://etcd-endpoint1:2379" \
--set "etcd.endpoints[1]=https://etcd-endpoint2:2379" \
--set "etcd.endpoints[2]=https://etcd-endpoint3:2379" \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,port-distribution,icmp,http}" \
--set hubble.listenAddress=":4244" \
--set hubble.relay.enabled=true \
--set operator.replicas=3 \
--set ipam.operator.clusterPoolIPv4PodCIDR=10.126.0.0/16 \
--set ipam.mode="kubernetes"
--set kubeProxyReplacement=strict \
--set k8sServiceHost=10.12.3.3 \
--set hostPort.enabled=true \
--set hostFirewall.enabled=true \
--set k8sServicePort=6443 \
--set bpf.masquerade=true \
--set nodePort.enabled=true \
--set bpf.clockProbe=true \
--set bpf.waitForMount=true \
--set bpf.preallocateMaps=true \
--set bpf.lbMapMax=131072 >cilium.yaml**
注意:
1、重新部署cilium的时候,需要单独删除cilium的crd;
for i in `kubectl get crd | grep cilium`;do kubectl delete crd $i;done
2、在使用bfp.masquerade=true 的时候,需要配合使用 nodePort.enabled=true一起用
文档更新时间: 2022-06-29 10:44 作者:张尚