k8s宿主机环境配置

CentOS 7 需要ElRepo提供的第三方内核, 而 CentOS 8 则附带受支持的内核。

  1. #Systemd 245 及更高版本 ( ) 会覆盖Cilium 网络接口的设置。这引入了连接问题(有关详细信息,请参阅GitHub 问题 10645)。为避免这种情况, 请使用以下命令在 systemd 中进行查看:
  2. systemctl --versionrp_filterrp_filter
  3. #修复命令:
  4. echo 'net.ipv4.conf.lxc*.rp_filter = 0' > /etc/sysctl.d/99-override_cilium_rp_filter.conf
  5. systemctl restart systemd-sysctl

使用 systemd 挂载 BPFFS,由于 systemd挂载 文件系统的方式,挂载点路径必须在unit file中。

  1. cat <<EOF | sudo tee /etc/systemd/system/sys-fs-bpf.mount
  2. [Unit]
  3. Description=Cilium BPF mounts
  4. Documentation=https://docs.cilium.io/
  5. DefaultDependencies=no
  6. Before=local-fs.target umount.target
  7. After=swap.target
  8. [Mount]
  9. What=bpffs
  10. Where=/sys/fs/bpf
  11. Type=bpf
  12. Options=rw,nosuid,nodev,noexec,relatime,mode=700
  13. [Install]
  14. WantedBy=multi-user.target
  15. EOF

在tke中初始化业务集群时添加的参数

  • kubenetes controller参数

    • allocate-node-cidrs 自动分配和分配每个节点 IP 分配 CIDR 的能力
    • network-plugin=cni
  • 替换kube-proxy

    1. kubectl -n kube-system delete ds kube-proxy
    2. # Delete the configmap as well to avoid kube-proxy being reinstalled during a kubeadm upgrade (works only for K8s 1.19 and newer)
    3. kubectl -n kube-system delete cm kube-proxy
    4. # Run on each node with root permissions:
    5. 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) 中。
  1. #创建cilium etcd证书
  2. kubectl create secret generic -n kube-system cilium-etcd-secrets \
  3. --from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt \
  4. --from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
  5. --from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt
  6. #添加helm仓库
  7. helm repo add cilium https://helm.cilium.io/
  8. #部署cilium
  9. helm install cilium-personal cilium/cilium --version 1.10.7 --namespace kube-system \
  10. --set identityAllocationMode=kvstore \ #不希望 Cilium 将状态存储在 Kubernetes 自定义资源 (CRD) 中
  11. --set etcd.enabled=true \
  12. --set etcd.ssl=true \
  13. --set "etcd.endpoints[0]=https://etcd-endpoint1:2379" \
  14. --set "etcd.endpoints[1]=https://etcd-endpoint2:2379" \
  15. --set "etcd.endpoints[2]=https://etcd-endpoint3:2379" \
  16. --set prometheus.enabled=true \
  17. --set operator.prometheus.enabled=true \
  18. --set hubble.enabled=true \
  19. --set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,port-distribution,icmp,http}" \
  20. --set hubble.listenAddress=":4244" \
  21. --set hubble.relay.enabled=true \
  22. --set hubble.ui.enabled=true \
  23. --set kubeProxyReplacement=strict \ #代替 kube-proxy kernel 4.19.57
  24. --set k8sServiceHost=REPLACE_WITH_API_SERVER_IP \
  25. --set k8sServicePort=REPLACE_WITH_API_SERVER_PORT \
  26. --set egressGateway.enabled=true \ # kernel 5.2
  27. --set bpf.masquerade=true \
  28. --set nodePort.enabled=true \
  29. --set bpf.clockProbe=true \
  30. --set bpf.waitForMount=true \
  31. --set bpf.preallocateMaps=true \
  32. --set bpf.lbMapMax=131072 \
  33. --set cni.chainingMode=portmap \
  34. --set hostServices.enabled=true \
  35. --set hostPort.enabled=true \
  36. --set hostFirewall.enabled=true \
  37. --set bpf.preallocateMaps=true \
  38. --set bpf.waitForMount=true \
  39. --set ipam.mode="kubernetes" \
  40. --set ipam.operator.clusterPoolIPv4PodCIDR=10.126.0.0/16
  1. #生成部署模板
  2. helm template cilium ./cilium --namespace kube-system \
  3. --set identityAllocationMode=kvstore \
  4. --set etcd.enabled=true \
  5. --set etcd.ssl=true \
  6. --set "etcd.endpoints[0]=https://etcd-endpoint1:2379" \
  7. --set "etcd.endpoints[1]=https://etcd-endpoint2:2379" \
  8. --set "etcd.endpoints[2]=https://etcd-endpoint3:2379" \
  9. --set prometheus.enabled=true \
  10. --set operator.prometheus.enabled=true \
  11. --set hubble.enabled=true \
  12. --set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,port-distribution,icmp,http}" \
  13. --set hubble.listenAddress=":4244" \
  14. --set hubble.relay.enabled=true \
  15. --set operator.replicas=3 \
  16. --set ipam.operator.clusterPoolIPv4PodCIDR=10.126.0.0/16 \
  17. --set ipam.mode="kubernetes"
  18. --set kubeProxyReplacement=strict \
  19. --set k8sServiceHost=10.12.3.3 \
  20. --set hostPort.enabled=true \
  21. --set hostFirewall.enabled=true \
  22. --set k8sServicePort=6443 \
  23. --set bpf.masquerade=true \
  24. --set nodePort.enabled=true \
  25. --set bpf.clockProbe=true \
  26. --set bpf.waitForMount=true \
  27. --set bpf.preallocateMaps=true \
  28. --set bpf.lbMapMax=131072 >cilium.yaml**

注意:

1、重新部署cilium的时候,需要单独删除cilium的crd;

  1. 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   作者:张尚