安装要求
Cilium对内核版本有要求,Linux kernel >= 4.9.17,而且要想使用更高级的功能,需要的内核版本也不尽相同,需要根据具体需求来选择合适的内核版本。
安装方式
I.使用Cilium CLI
内核版本 >= 4.9.17,集群必须配置使用CNI插件。具体安装方式参考官网:https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
II.使用helm安装
我选择的是使用helm安装。我的ecs内核版本是3.10.0的,不满足内核要求,否则安装后会报错:
level=fatal msg="kernel version: NOT OK: minimal supported kernel version is >= 4.9.17; kernel version that is running is: 3.10.0" subsys=daemon
升级内核方法请看这里。
2.1 添加repo
helm repo add cilium https://helm.cilium.io/
2.2 下载解压chart
helm search repo cilium
helm pull cilium/cilium
tar xvf cilium-1.12.0.tgz
2.3 删除kube-proxy
如果不想用cilium替代kube-proxy的话,可以不执行。
注意
删除kube-proxy会中断现有的服务连接。而且会停止与服务相关的流量,直到安装了Cilium为止。
# 保存ds
ks get ds -o yaml > kube-proxy-ds.yaml
# 删除ds
ks delete ds kube-proxy
# 保存cm
ks get cm kube-proxy -o yaml > kube-proxy-cm.yaml
# 删除cm
ks delete cm kube-proxy
# 保存iptables
iptables-save | grep -v KUBE | iptables-restore
2.3 修改values.yaml
k8sServiceHost:你的apiserver地址
k8sServicePort:你的apiserver端口
ipam.operator.clusterPoolIPv4PodCIDRList:10.26.64.0/18(自定义)
ipam.operator.clusterPoolIPv4MaskSize:24
kubeProxyReplacement:strict
kubeProxyReplacement说明
- strict:完全取代kube-proxy,cilium将负责处理ClusterIP、NodePort、LoadBalancer类型的service,以及带有externalIPs和HostPort的服务。如果内核版本不满足,cilium启动就会报错。
- partial:混合配置。cilium替换和优化部分的kube-proxy功能。该选项要求用户手动指定应该使用哪些组件用于eBPF库-代理替换。需要确保将enableHealthCheckNodeport也设置为false,以便cilium代理不启动NodePort健康检查服务器。
- disabled:默认选项。完全依赖kube-proxy处理外部服务,仅启用ClusterIP类型的集群内负载均衡。
还有非常多的选项可以设置,详见https://docs.cilium.io/en/stable/gettingstarted/kubeproxy-free/
2.4 下载镜像
由于cilium的镜像都在quay.io上,无法下载,采用这里的方法下载镜像。
这里直接提供一下镜像地址,可以直接下载
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/cilium:v1.12.0
docker tag 475d0d583bd2 quay.io/cilium/cilium:v1.12.0
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/certgen:v0.1.8
docker tag a283370c8d83 quay.io/cilium/certgen:v0.1.8
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/hubble-relay:v1.12.0
docker tag b207788d31be quay.io/cilium/hubble-relay:v1.12.0
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/hubble-ui-backend:v0.9.0
docker tag 26654cca0242 quay.io/cilium/hubble-ui-backend:v0.9.0
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/hubble-ui:v0.9.0
docker tag 6be14ecb7b34 quay.io/cilium/hubble-ui
docker pull registry.cn-hangzhou.aliyuncs.com/wgh9626/operator:v1.12.0
docker tag e03339b102ae quay.io/cilium/operator:v1.12.0
2.5 再次修改values.yaml
将镜像修改为对应的tag,useDigest改为false
sed -i 's/useDigest: true/useDigest: false/g' values.yaml
3.安装cilium
helm install cilium . -n kube-system
4.1 删除podAntiAffinity
在cilium没起来的时候,执行kubectl命令会很慢,等cilium起来就好了。
ks edit deploy cilium-operator
4.2 查看pod
全部组件图
4.3 查看cilium的状态
ks exec -it cilium-twg7k -- cilium status --verbose
5.1 部署nginx服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
可以看到pod的ip是由cilium分配的。
5.2 创建nodePort svc
k expose deployment my-nginx --type=NodePort --port=80
5.3 确认svc是由cilium创建的
ks exec -it cilium-twg7k -- cilium service list
5.4 测试svc
node_port=$(kubectl get svc my-nginx -o=jsonpath='{@.spec.ports[0].nodePort}')
curl 127.0.0.1:$node_port
curl 172.17.88.228:$node_port
curl 10.96.80.211:80
6.查看KUBE-SVC的iptables
iptables-save | grep KUBE-SVC
返回为空。
综合以上,可以证明cilium已经完全替代了kube-proxy的功能。
III.使用rancher安装
我的rancher版本是v2.6.3。点击应用市场--Chart仓库--创建。
同步成功后,选择charts,搜索cilium,安装。