集群部署
Last updated
Last updated
從 https://discovery.etcd.io/new?size=3
獲取 token 後,把 etcd.yaml
放到每臺機器的 /etc/kubernetes/manifests/etcd.yaml
,並替換掉 ${DISCOVERY_TOKEN}
, ${NODE_NAME}
和 ${NODE_IP}
,即可以由 kubelet 來啓動一個 etcd 集群。
對於運行在 kubelet 外部的 etcd,可以參考 etcd clustering guide 來手動配置集群模式。
把 kube-apiserver.yaml
放到每臺 Master 節點的 /etc/kubernetes/manifests/
,並把相關的配置放到 /srv/kubernetes/
,即可由 kubelet 自動創建並啓動 apiserver:
basic_auth.csv - basic auth user and password
ca.crt - Certificate Authority cert
known_tokens.csv - tokens that entities (e.g. the kubelet) can use to talk to the apiserver
kubecfg.crt - Client certificate, public key
kubecfg.key - Client certificate, private key
server.cert - Server certificate, public key
server.key - Server certificate, private key
apiserver 啓動後,還需要爲它們做負載均衡,可以使用雲平臺的彈性負載均衡服務或者使用 haproxy/lvs/nginx 等爲 master 節點配置負載均衡。
另外,還可以藉助 Keepalived、OSPF、Pacemaker 等來保證負載均衡節點的高可用。
注意:
大規模集群注意增加 --max-requests-inflight
(默認 400)
使用 nginx 時注意增加 proxy_timeout: 10m
controller manager 和 scheduler 需要保證任何時刻都只有一個實例運行,需要一個選主的過程,所以在啓動時要設置 --leader-elect=true
,比如
把 kube-scheduler.yaml
和 kube-controller-manager
放到每臺 Master 節點的 /etc/kubernetes/manifests/
,並把相關的配置放到 /srv/kubernetes/
,即可由 kubelet 自動創建並啓動 kube-scheduler 和 kube-controller-manager。
kube-dns 可以通過 Deployment 的方式來部署,默認 kubeadm 會自動創建。但在大規模集群的時候,需要放寬資源限制,比如
另外,也需要給 dnsmasq 增加資源,比如增加緩存大小到 10000,增加併發處理數量 --dns-forward-max=1000
等。
除了上面提到的這些配置,持久化存儲也是高可用 Kubernetes 集群所必須的。
對於公有云上部署的集群,可以考慮使用雲平臺提供的持久化存儲,比如 aws ebs 或者 gce persistent disk
對於物理機部署的集群,可以考慮使用 iSCSI、NFS、Gluster 或者 Ceph 等網絡存儲,也可以使用 RAID
在 Azure 上可以使用 AKS 或者 acs-engine 來部署 Kubernetes 集群,具體部署方法參考 這裏。
在 GCE 上可以利用 cluster 腳本方便的部署集群:
在 aws 上建議使用 kops 來部署。
在 Linux 物理機或虛擬機中,建議使用 kubeadm 或 kubespray 來部署 Kubernetes 集群。