不止一个Master节点
etcd集群数据库的高可用多Master节点下的kube-scheduler, kube-controller-manager的运行机制问题多Master节点上的kube-apiserver对外要暴露唯一入口,负载均衡基于kubeadm引导的集群
至少要有3个或3个以上的节点用于部署master组件建议master节点不承担工作负载建议etcd集群单独部署在3个干净独立的节点上etcd集群搭建步骤
创建etcd专用CA创建peer.crt, peer.key, server.crt, server.key ref: https://www.centos.bz/2017/09/k8s部署之使用cfssl创建证书/ $ cat config.json { "CN": "$HOSTNAME", "hosts": [ "$HOSTNAME", "PRIVATE_IP" ], "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "US", "ST": "CA", "L": "San Francisco" } ] } # 安装 cfssl 相关工具 ref: https://blog.51cto.com/11448017/2048609 $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 $ chmod +x cfssl_linux-amd64 $ mv cfssl_linux-amd64 /usr/local/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 $ chmod +x cfssljson_linux-amd64 $ mv cfssljson_linux-amd64 /usr/local/bin/cfssljson $ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 $ chmod +x cfssl-certinfo_linux-amd64 $ mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo # 生成默认证书 $ cfssl print-defaults config > ca-config.json # 修改内容如下 { "signing": { "default": { "expiry": "43800h" }, "profiles": { "server": { "expiry": "43800h", "usages": [ "signing", "key encipherment", "server auth" ] }, "client": { "expiry": "43800h", "usages": [ "signing", "key encipherment", "client auth" ] }, "peer": { "expiry": "43800h", "usages": [ "signing", "key encipherment", "server auth", "client auth" ] } } } } $ cfssl print-defaults csr > ca-csr.json # 修改内容如下 { "CN": "k8s-node-01", "hosts": [ "$HOST", "www.k8s-node-01.net" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "SH", "O": "Netease", "ST": "San Francisco", "OU": "OT" } ] } ## 生成CA证书和私钥 ### 生成ca.pem、ca.csr、ca-key.pem(CA私钥,需妥善保管) $ cfssl gencert -initca ca-csr.json | cfssljson -bare ca - # 签发Server Certificate $ cfssl print-defaults csr > server.json # 修改内容如下 { "CN": "Server", "hosts": [ "172.16.81.162" ], "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "US", "L": "CA", "ST": "San Francisco" } ] } # 生成服务端证书和私钥 $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server.json | cfssljson -bare server # 为节点member1生成证书和私钥: $ cfssl print-defaults csr > member1.json # 修改内容如下 { "CN": "Member1", "hosts": [ "172.16.81.163" ], "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "US", "L": "CA", "ST": "San Francisco" } ] } $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer member1.json | cfssljson -bare member1$ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server config.json | cfssljson -bare server $ cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer config.json | cfssljson -bare peer
同步证书文件,并启动etcd集群常用的负载均衡方式有多种,如lvs + keepalived,这里就略过了