前言:
1、首先说一下这篇实战系列和Cilium-ebpf系列文章为 “一文一武”,一个注重点解,一个注重实际操作。
Cilium + ebpf 系列文章-什么是ebpf?(一)_clium ebpf-CSDN博客文章浏览阅读419次。一、We Create a container be a Server.二、We Create a container be a Client.三、Them link at a Bridge.四、 Do test.一、Test-tools。3、当你执行l s操作时,会调用open的系统调用,然后open的系统调用具体是使用do_sys_open这个内核函数来具体执行!##上面的实验是为了证明你在用户空间编写的ebpf程序可以在内核中运行,并且监控系统调用和内核函数。这篇非常非常干,很有可能读不懂。_clium ebpfhttps://blog.csdn.net/weixin_46510209/article/details/142464176?spm=1001.2014.3001.5501 2、今天这篇文章两个重点:
1、安装符合部署Cilium的RKE集群。
2、部署Cililum到RKE集群中。
3、并且运行测试且通过。
一、部署环境
1、准备3台虚拟机(也可以是两台)
2、Linux- OS 内核版本必须是5.0以上,推荐Opensuse 15.5 leap
3、两台虚拟机之间网络可达且没有安全限制策略。
4、两台虚拟机安装docker 20.0X版本以上(因为使用的是rke集群)
5、关闭防火墙。(云内的虚拟机开防火墙等于脱裤子放屁哈,有分布式防火墙开开就可以了。)
二、我的环境展示
1、主机名
rke-01 rke-02 rke-03
(192.168.91.100 192.168.91.101 192.168.91.102)
2、规划
rke-01 rke-02 为Cluster A rke01-为控制面,rke02-为工作面
rke-03 为All in one 即是控制面也为工作面。
3、OS
*下载地址:
https://get.opensuse.org/leap/15.6/
4、内核5、docker版本
*下载地址:
https://docs.docker.com/get-started/get-docker/
6、rke*下载地址:
https://rke.docs.rancher.com/installation
7、cilium
helm地址:
cilium https://helm.cilium.io/
8、Kubernetes
9、Cilium-CLi
*下载地址-:
https://docs.cilium.io/en/stable/gettingstarted/k8s-install-default/
三、操作过程
1、 安装符合部署Cilium的RKE集群。
1、CPU架构-内核要求
*必须是64位的CPU。
*且OS的内核版本必须大于等于5.4
*以上是建议的OS版本号。
2、经过验证测试的k8s版本号
3、安装rke集群参考下面我另外一篇博客
Rancher-RKE-install 部署k8s集群_rancher 重新部署 rke-CSDN博客文章浏览阅读1.4k次。请注意:一定要检查你ssh的用户是否具备使用docker的权限,而且一定要启动docker.SSH第一个是集群配置的path位置,如果没有指定每个主机的私钥路径或者私钥的内容,则默认使用集群的配置.,表示成功部署集群,可以开始使用集群。在创建 Kubernetes 集群的过程中,会创建一个。5.根据当前目录的上下文中的cluster.yaml 安装rke集群。你运行的主机需要具备ssh免密登录其他主机的能力。1.下载Rancher-Rke的二进制包-下面是项目的地址。1.CNCF认证的k8s安装程序。_rancher 重新部署 rkehttps://blog.csdn.net/weixin_46510209/article/details/132356167?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522B52156FB-A26F-4B85-956F-F6AB76631638%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=B52156FB-A26F-4B85-956F-F6AB76631638&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-132356167-null-null.nonecase&utm_term=rke&spm=1018.2226.3001.4450
4、部署rke的cluster.yaml文件重点设置
请注意需要设置:
2、安装Cilium with helm
1、我们可以通过cilium-cli来安装集群也可以通过helm来安装cilium,这里选择helm.cilium作为调试和排除工具还可以,作为安装工具不怎么好用。
helm repo add cilium https://helm.cilium.io/
2、然后把helm包拉取下来修改
helm pull cilium/cilium --version 1.16.2
3、修改包的values.yaml
这里说一下:
1、默认安装的cilium是用的vxlan然后通过8472端口,各个node之间打通过隧道。
*我修改了默认端口,因为我玩的是何晨光的vxlan.
2、节点的地址池默认是cluster pool,由cilium统一分配一个大掩码,然后各个节点分配16位小掩码分配pod.
*集群范围IPAM模式将每个节点的PodCIDR分配给每个节点,并在每个节点上使用主机范围分配器分配IP
3、且不完全替换kube-proxy,kube-proxy保留Cluster-ip能力,但丧失nodeport能力。故我们就用ebpf映射来完全替换kube-proxy.
4、helm安装命令
API_SERVER_IP=<your_api_server_ip>
# Kubeadm default is 6443
API_SERVER_PORT=<your_api_server_port>
helm install cilium cilium/cilium --version 1.16.2 \--namespace kube-system \--set kubeProxyReplacement=true \--set k8sServiceHost=${API_SERVER_IP} \--set k8sServicePort=${API_SERVER_PORT}
*如果你喜欢用配置文件来部署下面这个命令也可以:
helm install cilium -n kube-system -f ./values.yaml .
3、验证安装
这里需要说一下,当你通过helm install cilium后,到底发生了什么?部署了什么?它们干什么用的?
*如图:
1、cilium 是部署在每个节点的守护进程也就是agent.
1、配套一个configmap.里面是agent配置文件。
2、sa,配套的sa
2、Envoy
检查上面的configmap,如果下面的字段是:"true",那么就会自动部署一个ds envoy.
enable-l7-proxy: "true"
*这个大家就是熟悉了吧,就是以前插入到pod到saidcar网络容器。
*不过现在cilium用它来做节点的L7路由。
扩展一下好处:
3、cilium-operator
*这个没啥说的,如果对operator的概念没理解到位可以看下我的这篇博客。
几句话明白什么是Kubernetes Operator?_数据库 operator-CSDN博客文章浏览阅读416次,点赞10次,收藏2次。答案肯定是不知道的,这个时候就需要人工干预,这个人就是操作员,也就是Operator。1、要实现软件Operator层面,Kubernetes本身的api是不能够完成这类任务的,因为Kubernetes不可能存储所有应用的控制生命周期的知识。3、那么Kubernetes设计之初就说我们是一个自动化、减少人工干预的、自动修复平台,是不是优点问题。1、有状态应用,比如数据库、复杂的集群系统(ELK),本身有选举、同步等机制的应用程序。3、这些被单独定义的CRD就是Operator的具体控制生命周期的“知识”。_数据库 operatorhttps://blog.csdn.net/weixin_46510209/article/details/139610912?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522AC684D49-0E95-41F4-86D3-4B974510AF71%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=AC684D49-0E95-41F4-86D3-4B974510AF71&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-139610912-null-null.nonecase&utm_term=operator&spm=1018.2226.3001.4450
1、通过cilium-cli验证安装
cilium status
2、检查节点是否ready
3、部署一个应用来测试Pod-Svc联通性。
1、部署测试应用
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80
2、使用Nodeport暴露
kubectl expose deployment my-nginx --type=NodePort --port=80
3、获取Nodeport端口
node_port=$(kubectl get svc my-nginx -o=jsonpath='{@.spec.ports[0].nodePort}')
4、测试
curl 127.0.0.1:$node_portcurl <your node ip>:$node_portcurl <your cluster ip>:$node_port
四、总结
1、这篇文章使用rke搭建了一个符合cilium要求的1个集群,另外1个集群安装流程就跳过了。
2、到此我们完成了集群的搭建以及联通性测试。
3、下篇文章会通过一个简单的应用来测试Cilium的一些高级特性。