准备calico.yaml
进入calico网站:
Install Calico networking and network policy for on-premises deployments
找到 Install Calico > Kubernetes > Self-managed on-premises > Install Calico networking and network policy for on-premises deployments
往下滑动页面,找到Install Calico步骤下的Manifest > Install Calico with etcd datastore:
点击Install Calico with etcd datastore然后跳转:
如下找到Calico.yaml的下载连接,在k8s环境执行:
这个是比较新的版本v3.25.1的 calico:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico-etcd.yaml -o calico.yaml
也可以根据自己的需要,在calico网站找到以前的版本下载。
下载好calico.yaml.
编辑calico.yaml里的Secret段,data下定义的证书base64加密数据
- etcd-ca:
- etcd-key:
- etcd-cert:
====================================
- 这3个分别是:
- etcd的ca证书数据
- etcd的证书key数据
- etcd的证书数据
把这三个证书数据经过base64 方式加密,然后把加密后的数据粘贴到yaml中,但是注意负值加密后的数据不要把shell的提示符复制进去:
如:cat /opt/etcd/certs/ca.pem | base64 | tr -d '\n'
修改好后内容如下:
编辑etcd_endpoints:
我的k8s集群3个节点的etcd 的url分别是如下,编辑加到etcd_endpoints:后面
编辑etcd证书在calico pod中的挂载路径
这个可以自己设置,我的设置是:
- etcd_ca: "/calico-secrets/etcd-ca"
- etcd_cert: "/calico-secrets/etcd-cert"
- etcd_key: "/calico-secrets/etcd-key"
编辑自己环境中的pod IP段参数CALICO_IPV4POOL_CIDR
把CALICO_IPV4POOL_CIDR 和其value字段注释放开;
value设置成自己环境上kube-controoller-server中参数--cluster-cidr设置的值,比如我环境上的这个参数设置如下是:
--cluster-cidr=172.17.0.0/16
编辑value和kube-controller-server的参数值一样:
友情提示:
不知道如何设置这个参数的检查一下自己环境上kube-contrller-manager的systemd配置文件,找到相关配置项--cluster-cidr 把其赋值拷贝过来即可;
或者是kubelet的kubelet-conf.yaml,里面的配置项podCIDR。其值应该和kube-controller-manager的--cluster-codr 值是一致的,复制过来即可。
添加apiserver环境参数
在calico-node的DaemonSet 中添加env环境变量参数:
- - name: KUBERNETES_SERVICE_HOST
- value: "192.168.1.10" # master apiserver 地址
- - name: KUBERNETES_SERVICE_PORT
- value: "6443"
- - name: KUBERNETES_SERVICE_PORT_HTTPS
- value: "6443"
添加这几个参数据的目的是给calico添加访问apiserver的环境变量(apiserver的masterIP和端口6443),为了解决在拉起calico后calico-node的报错Failed to reach apiserver error=<nil>,有这个错calico-node会反复重启CrashBackoff
修改IP_AUTODETECTION_METHOD 参数
修改IP_AUTODETECTION_METHOD参数,这个根据自己环境上的实际情况修改,我的环境中:
网卡设备名称是ens开头如ens33这种,那就修改成interface=ens.*,如果你的环境上的网卡设备是eth那么改成interface=eth.*即可;
calico-controller添加apiserver环境参数
如果在使用kubectl apply -f calico.yaml后,caloco-contller一直重启CrashBackoff,检查日志报错Failed to reach apiserver error=<nil>,那么和calico-node同理,需要添加apiserver环境参数,在calico-controller的Deployment中添加env段中参数项:
- - name: KUBERNETES_SERVICE_HOST
- value: "192.168.1.10" # master apiserver 地址
- - name: KUBERNETES_SERVICE_PORT
- value: "6443"
- - name: KUBERNETES_SERVICE_PORT_HTTPS
- value: "6443"
启动calico部署:
kubectl apply -f calico.yaml
启动成功!
注意查看READY列,需要保证健康状态都是1/1 ,否则说明calico工作不正常。