一、资源

官方文档

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

二、Calico 部署注意事项

在使用 Calico 前当然最好撸一下官方文档,地址在这里 Calico 官方文档,其中部署前需要注意以下几点

  • 官方文档中要求 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_IP>:<ETCD_PORT>为您的etcd配置。替换</PATH/TO/KUBECONFIG>为您的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_ENDPOINTS>为指向您的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: IP_AUTODETECTION_METHOD和value: "can-reach=8.8.8.8",通过检测8.8.8.8dns,判断正确的网卡,

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

备注:

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

为经作者同意,禁止转载,写作不易

轻松部署calico的更多相关文章

  1. 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)

    Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据 ...

  2. 第 8 章 容器网络 - 067 - 如何部署 Calico 网络?

    0.准备工作 Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来. 与 VxLAN 不同的是,Cal ...

  3. 65-如何部署 Calico 网络?

    Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据 ...

  4. 使用RVM轻松部署Ruby环境

    Ruby用得不多,但发现有业务需要部署指定的版本和插件.起初找了一些Fedora的src.rpm重新打包,发现依赖问题比较多,最终还是费劲的把el6的包编出来了. 不巧今天又有业务要求el5的包,原本 ...

  5. 067、如何部署Calico网络 (2019-04-10 周三)

    参考https://www.cnblogs.com/CloudMan6/p/7509975.html   Calico 是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是 ...

  6. 通过ICE轻松部署WES7镜像

    作者:雷志刚 转自:http://lzg-ad.blog.sohu.com/156323256.html 注:该文转自Happymy,感谢他的技术提供和分享. 本文适合的软件版本:CTP,RC 如果大 ...

  7. 免费的协作和协同办公软件平台onlyoffice轻松部署

    一般说,协同和协作是不同的,协同是指文档基于一个版本,大家都是基于这个版本来添加,而且大家只能引用这个文档,却不能在上面直接添加,而且只能一个人添加,即锁住,不让其他人添加了. 而协作就不同了,大家同 ...

  8. Webstorm轻松部署项目至服务器

    wo大前端在开发环境下,需要将项目部署到测试环境,webstorm进行基础配置操作就可实现. 一.在Deployment选项下配置远程服务器地址 点击加号,选择type类型,Name自己填,帮你找到这 ...

  9. Tomcat 服务器轻松部署 SSL 证书

    Tomcat 服务器 SSL 证书安装部署 1准备服务器 购买网上各个产家的云服务器 或者在自己的电脑上装虚拟机 二者皆可,建议选择第一种,因为操作起来相对方便 2安装JDK 2.1上传JDK到Lin ...

随机推荐

  1. 读书分享全网学习资源大合集,推荐Python3标准库等五本书「02」

    0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code使 ...

  2. [Python] 将视频转成ASCII符号形式、生成GIF图片

    一.简要说明 简述:本文主要展示将视频转成ASCII符号形式展示出来,带音频. 运行环境:Win10/Python3.5. 主要模块: PIL.numpy.shutil. [PIL]: 图像处理 [n ...

  3. MSIL实用指南-逻辑运算

    逻辑运算有三种:与.或.非.实现它们可以用位运算指令And.Or.Not等三个指令.它们的使用方法和位运算一致. 完整的程序如下: using System; using System.Reflect ...

  4. gin-jwt对API进行权限控制

    前言 之前文章简单介绍了如何运行gin+vue的前后端分离开源项目,该项目是学习了Gin实践教程后结合vue-element-admin写的,该教程讲得很详细,适合入门Gin.本篇文章将介绍gin+v ...

  5. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  6. 传入值参数&传入引用参数的区别

    传值&传引用 1.传值 是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 2.传地址 是传值的一种特殊方式,只是他传递的是地址 那么传地址以后,实参和行参都指向同一个对象 3.传引用 ...

  7. P4570 [BJWC2011]元素 线性基 + 贪心

    题意 给定n个物品,每个物品有一个编号和价值,问如何取使得拿到的物品价值总和最大,并且取得物品的编号的子集异或和不能为0. 思路 这是个贪心,我们先按照价值从大到小排序,然后贪心地取,如果当前要取的物 ...

  8. Timus-1005. Stone Pile-01背包

    传送门:http://acm.timus.ru/problem.aspx?space=1&num=1005 参考:https://www.cnblogs.com/yinzm/p/6629222 ...

  9. HDU2485Destroying the bus stations 拆点网络流求割点个数

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题目要求:删除最少的点,使得源点到汇点的距离大于k 思路:拆点.建图求费用小于等于k的最大流 # ...

  10. CF1028D Order book 思维

    Order book time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...