calico官方地址:
https://docs.projectcalico.org/getting-started
自定义安装说明页面
https://docs.projectcalico.org/getting-started/kubernetes/installation/config-options
准备工作:
1、下载文件:
#wget https://docs.projectcalico.org/manifests/calico-etcd.yaml
准备好配置文件中提到的镜像,如下,自己本地下载好之后,传到自己的私有仓库中,然后修改文件中的镜像地址,如果不这样的话,每个node会从官方镜像仓库下载镜像,启动过程异常缓慢,甚至安装失败
2、下载镜像:
docker pull calico/cni:v3.13.3
docker pull calico/pod2daemon-flexvol:v3.13.3
docker pull calico/node:v3.13.3
docker pull image: calico/kube-controllers:v3.13.3
#在本地启动一个镜像仓库(也可以传到自己现有的私有仓库,如habor):
docker run -itd -p 5000:5000 -v /opt/data/registry:/var/lib/registry --name private_registry registry
3、修改镜像tag,并上传在本地的私有仓库
#修改tag
docker tag calico/node:v3.13.3 192.168.1.111:5000/calico/node:v3.13.3
docker tag calico/pod2daemon-flexvol:v3.13.3 192.168.1.111:5000/calico/pod2daemon-flexvol:v3.13.3
docker tag calico/cni:v3.13.3 192.168.1.111:5000/calico/cni:v3.13.3
docker tag calico/kube-controllers:v3.13.3 192.168.1.111:5000/calico/kube-controllers:v3.13.3
#上传
docker push 192.168.1.111:5000/calico/node:v3.13.3
docker push 192.168.1.111:5000/calico/pod2daemon-flexvol:v3.13.3
docker push 192.168.1.111:5000/calico/cni:v3.13.3
docker push 192.168.1.111:5000/calico/kube-controllers:v3.13.3
修改每个node上信任的仓库地址,然后重启docker:
vim /etc/docker/daemon.json
如下:
1 ##egistry-mirror是docker国内加速地址
2
3 ##insecure-registries 是docker信任的没有走https的仓库地址
4
5 { "registry-mirrors": ["https://registry.docker-cn.com",
6
7 "http://f1361db2.m.daocloud.io",
8
9 "http://hub-mirror.c.163.com"],
10
11 "insecure-registries":["192.168.1.111:5000"]
12
13 }
14
重启docker服务,并查看配置是否生效,如图所示,Insecure Registries里面包含了我们设置的仓库地址
service docker restart
docker info
正式开始了:
一、修改配置文件calica-etcd.yaml文件
1、修改etcd数据库地址以及证书认证
1 etcd_endpoints: calico连接的etcd数据库,也就是k8s中的etcd集群地址,也可以单独配置calico的etcd数据库,和k8s集群的数据库分开,但是这样增加了开销,不必要
2
3 etcd_ca: "/calico-secrets/etcd-ca" 连接etcd数据库集群的认证,这里只是一个名字,宿主机上的地址会在后面数据卷中定义出来
4
5 etcd_cert: "/calico-secrets/etcd-cert"
6
7 etcd_key: "/calico-secrets/etcd-key"
设置etcd的认证文件,文件中使用是这样的挂载名字,如下图,需要我们去指定宿主机上的源文件目录
我不是用secret的方式定义的,所以要换成宿主机地址映射的方式,定义hostPath,将真实的地址写在path后面 ,如下图
注意,每个node上都需要这个目录存在,并且有相应的认证文件(/etc/etcd/etcdSSL是etcd的认证证书存放目录)
mkdir /etc/calico/calicoTSL -p
cp /etc/etcd/etcdSSL/ca.pem /etc/calico/calicoTSL/etcd-ca
cp /etc/etcd/etcdSSL/etcd-key.pem /etc/calico/calicoTSL/etcd-key
cp /etc/etcd/etcdSSL/etcd.pem /etc/calico/calicoTSL/etcd-cert
2、修改calico的镜像地址
如准备工作步骤中所说,不提前准备好镜像的话,极有可能导致节点下载镜像失败,最终安装失败,千万不要忽略。
先看一下文件中所用到的镜像名字和版本,如上图,下载并上传到自己本地仓库中,修改配置文件中镜像的名字,如下:
3、修改集群网段
默认是192.168.0.0/16网段,但是和我们的服务器本来的网段一样,会产生冲突,所以我们需要修改一下,注意,这个网段应该与kubeapi定义--service-cluster-ip-range的网段一样
修改好了如下:
4、配置calico的环境变量
在calico-node的配置中加入环境变量,注意将格式对齐,不然会报错的
1 - name: KUBERNETES_SERVICE_HOST
2 value: "192.168.1.111" #APIserver的地址
3 - name: KUBERNETES_SERVICE_PORT
4 value: "6443" ##APIserver的监听端口
5 - name: KUBERNETES_SERVICE_PORT_HTTPS
6 value: "6443" ##APIserver的监听端口
如下图:
二、修改好之后,kubectl启动:
kubectl apply -f /etc/calico/calico-etcd.yaml
稍后就可以执行kubectl get pod -A 查看pod运行情况:
三、后续如果发生异常时,可以用到的命令:
kubectl logs -f calico-node-5rgfg -n kube-system 查看pod产生的日志
kubectl describe pod calico-node-5rgfg -n kube-system 查看pod的具体描述
kubectl -n kube-system get ev 查看集群环境输出
使用calicoctl命令:
wget https://github.com/projectcalico/calicoctl/releases/download/v3.13.3/calicoctl
chmod +x calicoctl
mv calicoctl /usr/bin/
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes