k8s

Cilium部署

安装要求

Cilium对内核版本有要求,Linux kernel >= 4.9.17,而且要想使用更高级的功能,需要的内核版本也不尽相同,需要根据具体需求来选择合适的内核版本。
file

安装方式

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

file

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

file

4.1 删除podAntiAffinity

在cilium没起来的时候,执行kubectl命令会很慢,等cilium起来就好了。

ks edit deploy cilium-operator

4.2 查看pod

file

file

全部组件图

file

4.3 查看cilium的状态

ks exec -it cilium-twg7k -- cilium status --verbose

file

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分配的。

file

5.2 创建nodePort svc

k expose deployment my-nginx --type=NodePort --port=80

file

5.3 确认svc是由cilium创建的

ks exec -it cilium-twg7k -- cilium service list

file

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

file

file

6.查看KUBE-SVC的iptables

iptables-save | grep KUBE-SVC

返回为空。

file

综合以上,可以证明cilium已经完全替代了kube-proxy的功能。

III.使用rancher安装

我的rancher版本是v2.6.3。点击应用市场–Chart仓库–创建。

file

同步成功后,选择charts,搜索cilium,安装。

file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x