高可用源文档中的坑

1、kube-apiserver、kube-controller-manager启动文件里面的公钥文件、私钥文件竟然是一样的,还怎么配对,这是源文档的大坑


查看源文档kube-apiserver启动文件中公钥

cat etc/systemd/system/kube-apiserver.service

--service-account-key-file=/etc/kubernetes/cert/ca-key.pem


查看源文档kube-controller-manager启动文件中私钥

cat /etc/systemd/system/kube-controller-manager.service

--service-account-private-key-file=/etc/kubernetes/cert/ca-key.pem

发现公钥和私钥都是用的一个私钥,这是不可能配对的,而且原文中已经说明需要配对,说明如下:


原版文件在apiserver启动文字中已经说明 >

--service-account-key-file:签名 ServiceAccount Token 的公钥文件,kube-controller-manager 的 --service-account-private-key-file 指定私钥文件,两者配对使用;

但是原版中apiserver、controller-manager这两个启动文字里面用的私有、公钥都是一个,所以怀疑出错,

按照另一篇对照修改的:https://www.cnblogs.com/effortsing/p/10312081.html,需要修改如下:


生成 service account key

cd /etc/kubernetes/
openssl genrsa -out /etc/kubernetes/sa.key 2048
openssl rsa -in /etc/kubernetes/cert/sa.key -pubout -out /etc/kubernetes/cert/sa.pub
ls /etc/kubernetes/pki/sa.*
cd $HOME

分发service account key到所有master节点

subprocess.call(["ansible k8s -m copy -a 'src=/etc/kubernetes/sa.key dest=/etc/kubernetes/cert/ force=yes'"], shell=True)
subprocess.call(["ansible k8s -m copy -a 'src=/etc/kubernetes/sa.pub dest=/etc/kubernetes/cert/ force=yes'"], shell=True)


修改kube-apiserver启动文件中公钥为sa.pub

cat etc/systemd/system/kube-apiserver.service

--service-account-private-key-file=/etc/kubernetes/cert/sa.pub


修改kube-controller-manager启动文件中私钥为sa.key

cat /etc/systemd/system/kube-controller-manager.service

--service-account-private-key-file=/etc/kubernetes/cert/sa.key




2、源文档kube-controller-manager启动文件里面少两个致命参数,导致flannel启动失败,缺少 --allocate-node-cidrs=true --cluster-cidr=172.30.0.0/16

flannel启动失败,报错如下

Error registering network: failed to acquire lease: node "test4" pod cidr not assigned


查看pod

[root@test4 profile]# kubectl get pods -n kube-system
NAME                    READY   STATUS   RESTARTS   AGE
kube-flannel-ds-gzvrh   0/1     Error    0          <invalid>


通过docker查看flannel日志


[root@test4 profile]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f7be3ebe77fd        b949a39093d6        "/opt/bin/flanneld -…"   1 second ago        Created                                 k8s_kube-flannel_kube-flannel-ds-7cqww_kube-system_26fab004-2b88-11e9-9085-000c2935f634_0

[root@test4 profile]# docker logs f7be3ebe77fd 
I0208 09:58:34.068723       1 main.go:488] Using interface with name ens33 and address 192.168.0.94
I0208 09:58:34.069094       1 main.go:505] Defaulting external address to interface address (192.168.0.94)
I0208 09:58:34.376952       1 kube.go:131] Waiting 10m0s for node controller to sync
I0208 09:58:34.466001       1 kube.go:294] Starting kube subnet manager
I0208 09:58:35.481478       1 kube.go:138] Node controller sync successful
I0208 09:58:35.481666       1 main.go:235] Created subnet manager: Kubernetes Subnet Manager - test4
I0208 09:58:35.481694       1 main.go:238] Installing signal handlers
I0208 09:58:35.482001       1 main.go:353] Found network config - Backend type: vxlan
I0208 09:58:35.482255       1 vxlan.go:120] VXLAN config: VNI=1 Port=0 GBP=false DirectRouting=false
E0208 09:58:35.483159       1 main.go:280] Error registering network: failed to acquire lease: node "test4" pod cidr not assigned
I0208 09:58:35.483433       1 main.go:333] Stopping shutdownHandler...


看到:Error registering network: failed to acquire lease: node "test4" pod cidr not assigned

原因:是因为按照二进制高可用文档安装配置kube-controller-manager启动文件的时候,有坑,当时没有发现,

解决:

启动文件加上下面两句话,那篇文档没有加,所以报错;下面这个cluster-cidr要和kube-flannel.yml里面的地址一致,要和kube-proxy.config.yaml里面的clusterCIDR一致

  --allocate-node-cidrs=true \
  --cluster-cidr=172.30.0.0/16 \


3、源文档中没有安装cni网络插件。这是不可以的,


4、源文档中的kubelet启动参数中都没有带cadvisor监控服务参数,源文档中就可以访问cadvisor监控了。明摆着安装完把cadvisor参数去掉了,这是大坑

猜你喜欢

转载自www.cnblogs.com/effortsing/p/10356699.html
今日推荐