安装calico
安装docker:https://www.cnblogs.com/cjsblogs/p/8717304.html
安装etcd集群:https://www.cnblogs.com/cjsblogs/p/8716976.html
注意:
(1) 这里要说明下,因为后期需要固定nginx-ingress的容器IP地址。实验在创建calico网络之后会有个BUG,即2.6.2之后版本在创建指定IP的容器的时候会报错,所以calico的版本必须为<=2.6.2。
(2) 因为需要针对nginx-ingress容器单独做端口打通,所以需要在calico的calico.env和calico-node.service添加参数CALICO_LIBNETWORK_LABEL_ENDPOINTS=true,允许calico策略读取docker容器的label标签。
(3)calico版本需要选择v1.6.2, 如v1.6.4会有bug,不建议使用,其余版本需要测试
先安装docker以及etcd集群
将etcd集群的/opt/ssl/*.pem全部拷贝到对应的docker宿主机的/opt/ssl下
daemon.json添加etcd相关配置
"cluster-store": "etcd://172.16.150.25:2379",
"cluster-store-opts": {
"kv.cacertfile": "/opt/ssl/ca.pem",
"kv.certfile": "/opt/ssl/etcd.pem",
"kv.keyfile": "/opt/ssl/etcd-key.pem"
}
}
重启docker
systemctl daemon-reload && systemctl restart docker
搭建配置calico
配置准备:创建calico目录(以下路径均为自定义方便管理,在配置的时候跟官网有些区别,注意修改配置文件)
mkdir -p /opt/platform/calico/certs /opt/platform/calico/log
创建证书:由于搭建etcd集群中已经创建了etcd的证书,calico只需要复用即可
cp -a /opt/ssl/*.pem /opt/platform/calico/certs/
安装配置calico
安装calicoctl
wget -O /opt/platform/calico/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v1.6.2/calicoctl
chmod +x /opt/platform/calico/calicoctl
下载calicoctl镜像,如果下载不了,需要翻墙
docker pull quay.io/calico/node:v2.6.2
配置calico系统服务
vim /lib/systemd/system/calico-node.service
[Unit]
Description=calico-node
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=/opt/platform/calico/calico.env
ExecStartPre=-/usr/bin/docker rm -f calico-node
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 CALICO_LIBNETWORK_ENABLED=${CALICO_LIBNETWORK_ENABLED} \
-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 /opt/platform/calico/certs:/etc/calico/certs \
-v /opt/platform/calico/log:/var/log/calico \
-v /run/docker/plugins:/run/docker/plugins \
-v /lib/modules:/lib/modules \
-v /var/run/calico:/var/run/calico \
-v /var/run/docker.sock:/var/run/docker.sock \
quay.io/calico/node:v2.6.2
ExecStop=-/usr/bin/docker stop calico-node
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
这里需要注意的是,官方的service配置中没有certs及docker.sock的映射路径,会导致calico找不到证书及无法启动容器
配置环境变量
vim /opt/platform/calico/calico.env
ETCD_ENDPOINTS="https://172.16.150.25:2379,https://172.16.150.26:2379,https://172.16.150.27:2379"
ETCD_CA_CERT_FILE="/etc/calico/certs/ca.pem"
ETCD_CERT_FILE="/etc/calico/certs/etcd.pem"
ETCD_KEY_FILE="/etc/calico/certs/etcd-key.pem"
CALICO_NODENAME=""
CALICO_NO_DEFAULT_POOLS=""
CALICO_IP=""
CALICO_IP6=""
CALICO_AS=""
CALICO_LIBNETWORK_ENABLED=true
CALICO_NETWORKING_BACKEND=bird
这里需要注意的是,此配置为容器内部读取的变量,所以证书路径为容器路径,而不是宿主机路径。
配置calicoctl的etcd存储
mkdir -p /etc/calico/
vim /etc/calico/calicoctl.cfg
apiVersion: v1
kind: calicoApiConfig
metadata:
spec:
etcdEndpoints: https://172.16.150.25:2379,https://172.16.150.26:2379,https://172.16.150.27:2379
etcdKeyFile: /opt/platform/calico/certs/etcd-key.pem
etcdCertFile: /opt/platform/calico/certs/etcd.pem
etcdCACertFile: /opt/platform/calico/certs/ca.pem
这里需要注意的是,这是配置calicoctl调用etcd接口的环境变量,所以证书路径为宿主机路径。calicoctl 默认读/etc/calico/下的calicoctl.cfg
启动calico
systemctl daemon-reload && systemctl enable calico-node && systemctl start calico-node
以上配置均需要在每个node节点上操作
创建calico网络
docker network create --driver calico --ipam-driver calico-ipam --subnet=10.233.0.0/16 calico
docker network ls #查看docker所有网络
--driver calico:网络使用calico驱动
--ipam-driver calico-ipam:指定使用calico的IPAM驱动管理IP
--subnet:如果需要指定容器IP的话,需要指定calico网络的IP段calico是global网络,etcd会将calico-net1同步到所有主机
创建calico网络IP池
calicoctl apply -f ipPool.yaml
apiVersion: v1
kind: ipPool
metadata:
cidr: 10.233.0.0/16
spec:
ipip:
enabled: true
mode: always
nat-outgoing: true
disabled: false
查看calico IPAM配置
ln -s /opt/platform/calico/calicoctl /usr/local/sbin/calicoctl #创建命令快捷方式
calicoctl get ipPool
cidr:IP地址段,docker默认为192.168.0.0/16
ipip:IP 地址封装,能实现不同网段的宿主机同docker网络通信,mode有always和cross-subnet 2种模式,实测cross-subnet模式下容器之间无法ping通,github上有类似的问题,貌似是BUG。
网络验证:
分别在node1和node2创建job
node1
docker run --net calico --name workload-a -tid busybox
docker run --net calico --name workload-b -tid busybox
node2
docker run --net calico --name workload-c -tid busybox
docker run --net calico --name workload-d -tid busybox
ping测试
docker exec workload-a ping -c 4 workload-b
docker exec workload-a ping -c 4 workload-c
docker exec workload-c ping -c 4 workload-d
正常情况下,
同网络下能互相ping通,比如a和c(跨宿主)及a和b(同宿主)。
相关参考命令
查看网络
docker network ls
查看具体信息
docker network inspect b69fb4a79dfb
其中在Containers下就有容器的信息,其中EndpointID就是下面提到的workloadEndpoint
查看workloadEndpoint
calicoctl get workloadEndpoint
删除workloadEndpoint容器在calico服务停止的情况下被删除了,calico服务再次启动的时候注册到etcd里的数据并没会刷新掉被删除容器的信息,如果你启动的是固定IP的容器,则会提示workloadEndpoint信息冲突,需要手动去删除
calicoctl delete workloadEndpoint
8173e77ea4b8dd69f68d21d846e99b27e57140dfdca28346ceeea50d4abc7e84 --node=W708-
ATMQZLPR-1 --orchestrator=libnetwork --workload=libnetwork
安装calico的更多相关文章
- kubernetes(k8s)集群安装calico
添加hosts解析 cat /etc/hosts 10.39.7.51 k8s-master-51 10.39.7.57 k8s-master-57 10.39.7.52 k8s-master-52 ...
- 修复tunl0-二进制安装calico
这篇博文很重要,出现这个问题导致pod之间无法通讯,pod无法连接外网. 出现的问题是二进制方式安装了节点之后, tunl0没有显示,通过ifconfig tunl0 up 启动tunl0 没有意义, ...
- centos7下安装docker(15.7容器跨主机网络---calico)
Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...
- 在Kubernetes集群中使用calico做网络驱动的配置方法
参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...
- centos7使用kubeadm安装部署kubernetes 1.14
应用背景: 截止目前为止,高热度的kubernetes版本已经发布至1.14,在此记录一下安装部署步骤和过程中的问题排查. 部署k8s一般两种方式:kubeadm(官方称目前已经GA,可以在生产环境使 ...
- k8s网络之Calico网络
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Calico 是一种容器之间互通的网络方案.在虚拟化平台中,比如 Open ...
- 使用kubeadm安装kubenetes
一.环境 关闭防火墙和selinux 禁用swap master节点安装 #1.配置源 cd /etc/yum.repos.d/wget https://mirrors.aliyun.com/dock ...
- 067、如何部署Calico网络 (2019-04-10 周三)
参考https://www.cnblogs.com/CloudMan6/p/7509975.html Calico 是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是 ...
- Kubernetes实战(一):k8s v1.11.x v1.12.x 高可用安装
说明:部署的过程中请保证每个命令都有在相应的节点执行,并且执行成功,此文档已经帮助几十人(仅包含和我取得联系的)快速部署k8s高可用集群,文档不足之处也已更改,在部署过程中遇到问题请先检查是否遗忘某个 ...
随机推荐
- oracle面试题1
1.题目要求 已知关系模式:S (SNO,SNAME)学生关系.SNO 为学号,SNAME 为姓名C (CNO,CNAME,CTEACHER)课程关系.CNO 为课程号,CNAME 为课程名,CTEA ...
- mysql delete别名
有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:ELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 ...
- Linux 上的Tomcat配置输入域名直接访问项目
申请的域名备案通过了,域名是在阿里云上面的买的,一块钱,当初买服务器是买着来玩玩的. 既然申请的域名已经备案通过了,也配置了域名解析 ,服务器上也装了Tomcat,部署了web项目,下面来配置下通过域 ...
- Go http包执行流程
Go 语言实现的 Web 服务工作方式与其他形式下的 Web 工作方式并没有什么不同,具体流程如下: -- http包执行流程 Request:来自用户的请求信息,包括 post.get.Cookie ...
- PowerShell入门学习
一.概要 Powershell是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境. powershell需要.NET环境的支持,同时支持.NET对象.之所以将Powershell ...
- Linux设备驱动程序 之 信号量和互斥体
概念 一个信号量本质是一个整数值,它和一堆函数联合使用,这一对函数通常称为P和V:希望进入临界区的进程将在相关信号量上调用P:如果信号量的值大于零,则该值会减少1,进程可以继续执行:相反,如果信号量的 ...
- Centos7 yum安装mysql(完整版)
1.下载mysql 地址:https://dev.mysql.com/downloads/repo/yum/.选择对应版本下载.
- Django admin site应用
django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便.其使用和配置主要分为三个步骤: 1,创建超级用户 需要创建超级用户来登陆admin后台系统,在命令行中输入 pyth ...
- P1115 最大子段和&P1719 最大加权矩形
上接:DP&图论 DAY 1 上午 这两个题本质是一个亚子,所以放一起啦 DPDPDPDPDPDPDPDP P1115 最大子段和 题解 因为题目要求的是一段连续的区间,所以前缀和搞暴力??? ...
- .SpringIOC容器
创建对象 SpringIOC容器,是spring核心内容. 作用: 创建对象 & 处理对象的依赖关系 IOC容器创建对象: 创建对象, 有几种方式: 1) 调用无参数构造器 2) 带参数构造器 ...