百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

轻松部署calico

bigegpt 2024-09-01 15:24 7 浏览

一、资源

官方文档

https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration

二、Calico 部署注意事项

在使用 Calico 前当然最好撸一下官方文档,地址在这里 http://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/,其中部署前需要注意以下几点

  • 官方文档中要求 kubelet 配置必须增加 --network-plugin=cni 选项
  • kube-proxy 组件必须采用 iptables proxy mode 模式(1.2 以后是默认模式)
  • kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico policy 冲突
  • NetworkPolicy API 只要需要 Kubernetes 1.3 以上
  • 启用 RBAC 后需要设置对应的 RoleBinding,参考 官方文档 RBAC 部分

官方文档rbac

https://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/hosted/

三、系统要求

  1. redhat、centos 7系列
  2. 默认情况下,NetworkManager不允许Calico管理接口。提前关闭NetworkManager
  3. Calico v3.8目前支持:1.13、1.14、1.15
  4. Calico作为CNI插件安装。必须通过传递--network-plugin=cni参数将kubelet配置为使用CNI网络
  5. 支持的kube-proxy模式:iptables(默认)和 ipvs(Kubernetes> = v1.9.3)
  6. 内核依赖

nf_conntrack_netlink 子系统

ip_tables (对于IPv4)

ip6_tables (对于IPv6)

ip_set

xt_set

ipt_set

ipt_rpfilter

ipt_REJECT

ipip (如果使用Calico网络)

查看内核是否加载:

lsmod |egrep "nf_conntrack_netlink|ip_tables|ip6_tables|ip_set|xt_set|ipt_set|ipt_rpfilter|ipt_REJECT|ipip"

lsmod 查看目前内核加载了哪些模块。

modprobe [-lcfr] module_name

-c: 列出目前系统所有的模块。

-l: 列出目前在/lib/modules/$(uname -r)/kernel/中的所有模块的完整文件名。

-f: 强制加载指定模块。

-r: 删除指定模块。

modprobe ipv6.ko // 加载ipv6模块。不需要指定模块的完整路径名

modprobe -r ipv6.ko // 删除ipv6模块。

7、Linux conntrack表空间不足

sysctl -w net.netfilter.nf_conntrack_max=1000000

echo "net.netfilter.nf_conntrack_max=1000000" >> /etc/sysctl.conf

四、安装calicoctl

1、编译calicoctl配置文件

mkdir /etc/calicoctl

cat >/etc/calico/calicoctl.cfg <<EOF

apiVersion: projectcalico.org/v3

kind: CalicoAPIConfig

metadata:

spec:

datastoreType: "etcdv3"

etcdEndpoints: "https://10.39.7.51:2379,https://10.39.7.52:2379,https://10.39.7.57:2379"

etcdKeyFile: "/etc/kubernetes/ssl/etcd-key.pem"

etcdCertFile: "/etc/kubernetes/ssl/etcd.pem"

EOF

备注:

使用etcd如果没有tls认证,则去除etcdKeyFile和etcdCertFile俩个选项

五、安装Calico

1、使用systemd unit管理calico

[Unit]

Description=calico-node

After=docker.service

Requires=docker.service

[Service]

User=root

PermissionsStartOnly=true

ExecStart=/usr/bin/docker run --net=host --privileged \

--name=calico-node \

-e NODENAME=${CALICO_NODENAME} \

-e IP=${CALICO_IP} \

-e IP6=${CALICO_IP6} \

-e CALICO_NETWORKING_BACKEND=${CALICO_NETWORKING_BACKEND} \

-e AS=${CALICO_AS} \

-e NO_DEFAULT_POOLS=${CALICO_NO_DEFAULT_POOLS} \

-e ETCD_ENDPOINTS=${ETCD_ENDPOINTS} \

-e ETCD_CA_CERT_FILE=${ETCD_CA_CERT_FILE} \

-e ETCD_CERT_FILE=${ETCD_CERT_FILE} \

-e ETCD_KEY_FILE=${ETCD_KEY_FILE} \

-v /lib/modules:/lib/modules \

-v /run/docker/plugins:/run/docker/plugins \

-v /data/calico:/var/run/calico \

-v /data/calico:/var/log/calico \

-v /data/calico:/var/lib/calico \

calico/node:v3.8.2

ExecStop=/usr/bin/docker rm -f calico-node

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

2、安装Calico CNI插件

下载Calico

wget -N https://github.com/projectcalico/cni-plugin/releases/download/v3.8.2/calico-amd64

wget -N https://github.com/projectcalico/cni-plugin/releases/download/v3.8.2/calico-ipam-amd64

mv ./calico-amd64 /usr/local/bin/calico

mv ./calico-ipam-amd64 /usr/local/bin/calico-ipam

chmod +x /usr/local/bin/calico /usr/local/bin/calico-ipam

mkdir -p /etc/cni/net.d

cat >/etc/cni/net.d/10-calico.conf <<EOF

{

"name": "calico-k8s-network",

"cniVersion": "0.6.0",

"type": "calico",

"etcd_endpoints": "http://<ETCD_IP>:<ETCD_PORT>",

"log_level": "info",

"ipam": {

"type": "calico-ipam"

},

"policy": {

"type": "k8s"

},

"kubernetes": {

"kubeconfig": "</PATH/TO/KUBECONFIG>"

}

}

EOF

备注:

替换 : 为您的etcd配置。替换为您的kubeconfig文件

3、安装标准CNI环回插件

除了CNI配置文件指定的CNI插件外,Kubernetes还需要标准的CNI环回插件。

下载该文件loopback并将其复制到CNI二进制目录。

wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz

tar -zxvf cni-plugins-amd64-v0.7.1.tgz

sudo cp loopback /opt/cni/bin/

4、安装Calico Kubernetes控制器

该calico/kube-controllers容器使Calico的数据存储与Kubernetes保持同步。它作为由部署管理的单个pod运行。

wget https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/calico-kube-controllers.yaml

修改添加,在最后几行添加环境变量,支持tls认证的etcd

image: calico/kube-controllers:v3.8.2

env:

# Configure the location of your etcd cluster.

- name: ETCD_ENDPOINTS

value: "<ETCD_ENDPOINTS>"

- name: ETCD_CA_CERT_FILE

value: "path"

- name: ETCD_CERT_FILE

value: "path"

- name: ETCD_KEY_FILE

value: "path"

  • 修改为指向您的etcd群集。
  • 使用安装它kubectl。

环境

描述

架构

ETCD_ENDPOINTS

以逗号分隔的要连接的etcd端点列表。示例:http://10.0.0.1:2379,http://10.0.0.2:2379。 string ETCD_DISCOVERY_SRV 通过SRV记录发现etcd端点的域名。与...互斥ETCD_ENDPOINTS。例:example.com string ETCD_CA_CERT_FILE

包含颁发etcd服务器证书的CA的根证书的文件的路径。配置Kubernetes控制器以信任etcd服务器提供的证书上的签名。要禁用Kubernetes控制器对服务器的身份验证,请将值设置为none。 路径

ETCD_CERT_FILE

包含颁发给Kubernetes控制器的客户端证书的文件的路径。使Kubernetes控制器能够参与相互TLS身份验证并向etcd服务器标识自己。例:/etc/kube-controllers/cert.pem 路径

ETCD_KEY_FILE

包含Kubernetes控制器客户端证书私钥的文件的路径。使Kubernetes控制器能够参与相互TLS身份验证并向etcd服务器标识自己。例:/etc/kube-controllers/key.pem

备注:

控制器官网

https://docs.projectcalico.org/v3.8/reference/kube-controllers/configuration

5、基于角色的访问控制(RBAC)

在启用了RBAC的Kubernetes群集上安装Calico时,必须为某些Kubernetes API提供Calico访问权限。为此,必须在Kubernetes API中配置主题和角色,并且必须为Calico组件提供相应的令牌或证书,以将其标识为已配置的API用户。

使用Calico网络的Kubernetes API数据存储区

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/rbac/rbac-kdd-calico.yaml

带有Calico网络的etcd数据存储

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/rbac/rbac-etcd-calico.yaml

六、DaemonSet和ConfigMap方式安装calico

1、安装etcdv3

备注

故障一

检查

删除nodename文件,然后重新分配pods即可

/var/lib/calico/nodename

故障二

报错原因:由于calico自动检测IP和子网,由于主机上有多个网卡,选择错误的网卡不能和其他calico node节点正常通信,从而bgp邻居建立失败

解决方法:

? 在“ # Auto-detect the BGP IP address ” 下添加- name: IPAUTODETECTIONMETHOD和value: "can-reach=8.8.8.8",通过检测8.8.8.8dns,判断正确的网卡,

下图,是正确找到我们需要指定的网卡

备注:

? 如果一个服务器上有多个通公网的网卡,此时8.8.8.8这个dns就不行了,可以寻找本身内网的dns,就可以指定网卡

没有经过作者同意,禁止转载

相关推荐

LangChain4j如何自定义文档转换器实现数据清洗?

LangChain4j提供了3种RAG(Retrieval-AugmentedGeneration,检索增强生成)实现,我们通常在原生或高级的RAG实现中,要对数据进行清洗,也就是将外接...

Java 8 Stream API 详解(java stream.)

Java8StreamAPI详解一、概述在Java8中,StreamAPI是一个重要的新特性。它为处理集合(如List、Set等)中的元素提供了一种高效且富有表现力的方式。Str...

Java修炼终极指南:185 使用 Stream 过滤嵌套集合

这是面试中的一个经典问题,通常从一个模型开始,如下所示(我们假设集合是一个List):publicclassAuthor{privatefinalStringname;pri...

java8的stream使用小示例(java stream())

据JetBrains发布的2021年开发者生态系统调查,Java8在java使用的版本中仍然是当前最流行的版本。72%的专业开发人员使用Java8作为其在java开发中主要编程语言版本。现...

Node.js Stream - 实战篇(node.js in action)

本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...

Java Stream:集合处理的api(java 集合操作)

JavaStream流:高效集合处理的函数式编程利器一、什么是JavaStream?Java8引入的StreamAPI是一套用于处理集合数据的流式编程接口,通过函数式风格(无副作用的...

去除 List 中的重复元素,你知道几种实现方法?

去除List中重复元素,这在实际编程或面试中经常遇到,每个人都有习惯的写法吧,这里抛砖引玉,汇总了一些实现方案,开拓思路。准备数据假设数组中有10个数据,可能有重复,需要将重复的数据从数组中去掉。pu...

Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起

为什么你的Java代码总像拧巴的麻绳?掌握这10个Stream实战技巧,代码效率与优雅度将产生质的飞跃。以下案例均来自真实电商系统场景,带你感受流式编程的降维打击!一、过滤与映射组合拳(Filter...

leetcode每日一题之存在重复元素(存在重复元素 iii)

题:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。比如:输入:[1,2,3,1]输出:true...

告别for循环!揭秘Stream API如何让你的代码简洁度提升300%

一、当传统循环遇上现代需求真实场景复现:某电商平台需要处理10万条订单数据,要求:筛选出金额>500的订单提取用户ID并去重统计VIP用户数量传统实现方案://常规写法Set<Long...

Java中List去重的N种方法:从基础到优雅

Java中List去重的N种方法:从基础到优雅在日常的Java开发中,我们经常会遇到需要对List集合去重的情况。无论是为了清理重复的数据,还是为了优化算法性能,掌握多种去重方式都是一项非常实用的技能...

Java Stream流没用过?常用高频方法

概念Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点代码简洁链式调用Stream常用方法1.将数组变为当作List操作String[]strArr=...

核医学专业名词索引(M-R)(核医学重点归纳)

M吗啡(morphia)埋藏式心律转复除颤器(implantablecardioverterdefibrillator,ICD)麦角骨化醇(VD2,calciferol)脉冲堆积(pulsepi...

CodeMeter 新版发布(codesigner下载)

威步于2022年8月4日发布CodeMeter7.50及CodeMeter软件保护套装11.10,以下为新版内容。CodeMeterRuntime7.50StreamingSIMDExten...

世界上最小的五轴铣床Pocket NC(最小的五轴加工中心)

PocketNC,由MIT学生研制,还有说法是这款产品的设计者是来自美国蒙大拿州的一对极客夫妻。目前主要有两款产品:PocketNCV2-50,9000美元;PocketNCV2-10,60...