轻松部署calico

一、资源

官方文档

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,就可以指定网卡

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

原文地址:https://www.cnblogs.com/zqliu8/p/11605836.html

时间: 2024-10-08 19:30:42

轻松部署calico的相关文章

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

Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据包做额外封装,不需要 NAT 和端口映射,扩展性和性能都很好. 与其他容器网络方案相比,Calico 还有一大优势:network policy.用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求. 实验环境描述 Calico 依赖 etcd 在不同主机间共享和交换信息,存储 Cal

Gitolite轻松部署/管理git server

对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代码时,也仅仅是多一条指令而已.如果你想了解git的全貌,可以看<Pro git>,他有中文版,貌似没有维护到最近的,需要的可以google it. Git 使用者的日常流程: 1.从git server远程库上clone一个副本到本地库(git clone), 2.本地开发,然后本地提交修改(gi

Kubernetes之部署calico网络

部署calico网络 Calico组件: Felix:Calico agent     运行在每台node上,为容器设置网络信息:IP,路由规则,iptable规则等 etcd:calico后端存储 BIRD:  BGP Client: 负责把Felix在各node上设置的路由信息广播到Calico网络 , 通过BGP协议来着 BGP Route Reflector: 大规则集群的分级路由分发. calico: calico命令行管理工具 为Node节点部署calico网络,参照官方文档:htt

Kubernetes之部署calico网络Update

部署calico网络 Calico组件介绍: Felix:Calico agent 运行在每台node上,为容器设置网络信息:IP,路由规则,iptable规则等 etcd:calico后端存储 BIRD: BGP Client: 负责把Felix在各node上设置的路由信息广播到Calico网络( 通过BGP协议). BGP Route Reflector: 大规模集群的分级路由分发. calico: calico命令行管理工具 calico的部署: 参照官方文档:https://docs.p

使用RVM轻松部署Ruby环境

Ruby用得不多,但发现有业务需要部署指定的版本和插件.起初找了一些Fedora的src.rpm重新打包,发现依赖问题比较多,最终还是费劲的把el6的包编出来了. 不巧今天又有业务要求el5的包,原本不维护el5了.突然想起RVM(Ruby Version Manager),轻松搞定: # curl -L https://get.rvm.io | bash -s stable --autolibs=enabled --ruby # https://raw.github.com/wayneeseg

开源免费的文档协作系统 onlyoffice平台轻松部署

请移步至此,更详细:http://blog.csdn.net/hotqin888/article/details/79337881 ONLYOFFICE是一个免费的.开源的企业办公套件,用于在线组织团队工作.这里介绍如何在您的局域网上安装一个,然后整个网络中的团队都可以同时协作文档,极大的提高工作效率和乐趣. ONLYOFFICE document server文档服务器为用户提供的word,excel电子表格和ppt演示在线编辑器在浏览器中工作,并允许共同实时编辑,注释文档,并使用集成的聊天互

轻松部署MFS分布式文件系统 【内附源码包】

MFS概述 MFS是一种分布式文件系统,它把数据分散存放在多个物理服务器上,前面只放置一台负责"调度"元数据服务器,最终呈现给用户的则是一个统一的资源.优点:相对于集中式文件系统来说,分布式系统拥有更好的扩展性.稳定性.数据的安全性.缺点:master只能做单点,会出现单点故障 常规特征 对标准的文件操作来说,mfs用起来跟其它的类unix系统类似:1.分层次的结构(目录树)2.存储POSIX文件属性(权限.最后访问和修改时间)3.支持特殊文件(块和字符设备.管道以及套接字)4.符号连

教你如何在5分钟轻松部署squid正向代理

正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理. 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径.正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率. 正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务

Kubernetes网络组件之Calico策略实践初探(BGP、RR、IPIP)

Kubernetes网络方案之 Calico策略实践 案例:由于k8s集群部署之前的方案是flannel网络策略,所以这里将flannel策略切换成calico网络策略 Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes.OpenStack等. Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的