目前,已部署的flannel
从configmap
读取网络配置(https://github.com/coreos/flannel/blob/master/Documentation/configuration.md
),根据已知bug
(https://github.com/coreos/flannel/issues/1328
)这种情况下修改SubnetLen
不成功。因此需要flannel
切换到读取etcd
配置。
1)修改/etc/kubernetes/cni-flannel.yml
修改flannel
的daemonset
启动命令为
...
command: ["/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr=false", "--etcd-cafile=/etc/kube-flannel/ca.pem", "--etcd-certfile=/etc/kube-flannel/admin-arm-a1.pem","--etcd-keyfile=/etc/kube-flannel/admin-arm-a1-key.pem", "--etcd-endpoints=https://192.192.190.163:2379/"]
...
注: 192.192.190.163
换成Rong
环境的etcd
集群中其中一个节点ip
。
注:etcd
证书存在于etcd
节点的/etc/ssl/etcd/ssl
目录,ca.pem
是固定存在的,额外寻找一对证书,例如上面例子选择admin-arm-a1.pem
和admin-arm-a1-key.pem
。
2)修改flannel
的configmap
,加入etcd
的认证证书
首先创建名为etcd-key
的configmap
保存etcd
证书。
# cd /etc/ssl/etcd/ssl
# kubectl create configmap etcd-key -n kube-system --from-file=ca.pem --from-file=admin-arm-a1.pem --from-file=admin-arm-a1-key.pem
然后将configmap
为etcd-key
的data
数据内容拷贝追加到/etc/kubernetes/cni-flannel.yml
文件中configmap
的data
内容中。
---
kind: ConfigMap
...
data:
cni-conf.json: |
...
net-conf.json: |
...
admin-arm-a1-key.pem: |
-----BEGIN RSA PRIVATE KEY-----
...
admin-arm-a1.pem: |
-----BEGIN CERTIFICATE-----
...
ca.pem: |
-----BEGIN CERTIFICATE-----
...
...
首先,etcd
数据库集群中其中一个节点需要开启v2
版本api
支持,具体修改方法如下
在部署了etcd
的节点上修改文件/usr/local/bin/etcd
文件,增加--enable-v2
内容。
...
/usr/local/bin/etcd \
--enable-v2 \
"$@"
重启etcd
服务
systemctl restart etcd
修改etcd
数据库,创建flannel
的网络配置。
# export ETCDCTL_API=2 etcdctl --endpoints=https://127.0.0.1:2379/ --cert-file=/etc/ssl/etcd/ssl/admin-arm-a1.pem --key-file=/etc/ssl/etcd/ssl/admin-arm-a1-key.pem --ca-file=/etc/ssl/etcd/ssl/ca.pem mkdir /coreos.com
# export ETCDCTL_API=2 etcdctl --endpoints=https://127.0.0.1:2379/ --cert-file=/etc/ssl/etcd/ssl/admin-arm-a1.pem --key-file=/etc/ssl/etcd/ssl/admin-arm-a1-key.pem --ca-file=/etc/ssl/etcd/ssl/ca.pem mkdir /coreos.com/network
# export ETCDCTL_API=2 etcdctl --endpoints=https://127.0.0.1:2379/ --cert-file=/etc/ssl/etcd/ssl/admin-arm-a1.pem --key-file=/etc/ssl/etcd/ssl/admin-arm-a1-key.pem --ca-file=/etc/ssl/etcd/ssl/ca.pem set /coreos.com/network/config '{"Network":"10.233.64.0/18","SubnetLen": 25,"Backend":{"Type": "vxlan","VNI": 1,"Port": 8472}}'
注: 网段10.233.64.0/18
必须与Rong
安装时配置的pod cidr
保持一致,Rong
的pod cidr
配置由文件rong-var.yml
的配置项kube_pods_subnet
指定。
SubnetLen
根据实际环境配置。
在部署节点执行以下命令重新部署flannel
。
kubectl delete -f /etc/kubernetes/cni-flannel.yml && kubectl create -f /etc/kubernetes/cni-flannel.yml
重启每台机器,使节点上的pod
重启获取新的分配ip
。