做者:宋淨超linux
宋淨超(Jimmy Song),TalkingData 容器技術負責人,微服務和雲原生應用佈道者。2017 年初開始研究 Kubernetes,至目前已發表近 40 篇 Kubernetes 學習筆記。同時,他也是「K8sMeetup 中國社區」的活躍者,見證了「K8sMeetup 中國社區」的一路成長。git
經 Jimmy Song 本人受權, 從本週開始,K8sMeetup 中國將轉載他的 Kubernetes 學習筆記,由淺入深地分享他在學習過程當中的收穫。7 月 22 日,北京 K8S 2 週年Meetup,Jimmy Song 也將到現場進行分享,歡迎 Kubernetes 愛好者屆時參與。github
kubernetes master 節點包含的組件:api
kube-apiserver
kube-scheduler
kube-controller-manager
目前這三個組件須要部署在同一臺機器上。安全
kube-scheduler、kube-controller-manager 和 kube-apiserver 三者的功能緊密相關;
同時只能有一個 kube-scheduler、kube-controller-manager 進程處於工做狀態,若是運行多個,則須要經過選舉產生一個 leader;
本文檔記錄部署一個三個節點的高可用 kubernetes master 集羣步驟。(後續建立一個 load balancer 來代理訪問 kube-apiserver 的請求)微服務
暫時未實現master節點的高可用。學習
TLS 證書文件spa
pem和token.csv證書文件咱們在TLS證書和祕鑰這一步中已經建立過了。咱們再檢查一下。
代理
下載最新版本的二進制文件server
有兩種下載方式
方式一
從 github release 頁面 下載發佈版 tarball,解壓後再執行下載腳本
方式二
從 CHANGELOG頁面 下載 client 或 server tarball 文件
server 的 tarball kubernetes-server-linux-amd64.tar.gz 已經包含了 client(kubectl) 二進制文件,因此不用單獨下載kubernetes-client-linux-amd64.tar.gz文件;
配置和啓動 kube-apiserver
建立 kube-apiserver的service配置文件
serivce配置文件/usr/lib/systemd/system/kube-apiserver.service內容:
--authorization-mode=RBAC 指定在安全端口使用 RBAC 受權模式,拒絕未經過受權的請求;
kube-scheduler、kube-controller-manager 通常和 kube-apiserver 部署在同一臺機器上,它們使用非安全端口和 kube-apiserver通訊;
kubelet、kube-proxy、kubectl 部署在其它 Node 節點上,若是經過安全端口訪問 kube-apiserver,則必須先經過 TLS 證書認證,再經過 RBAC 受權;
kube-proxy、kubectl 經過在使用的證書裏指定相關的 User、Group 來達到經過 RBAC 受權的目的;
若是使用了 kubelet TLS Boostrap 機制,則不能再指定 --kubelet-certificate-authority、--kubelet-client-certificate 和 --kubelet-client-key 選項,不然後續 kube-apiserver 校驗 kubelet 證書時出現 」x509: certificate signed by unknown authority「 錯誤;
--admission-control 值必須包含 ServiceAccount;
--bind-address 不能爲 127.0.0.1;
runtime-config配置爲rbac.authorization.k8s.io/v1beta1,表示運行時的apiVersion;
--service-cluster-ip-range 指定 Service Cluster IP 地址段,該地址段不能路由可達;
缺省狀況下 kubernetes 對象保存在 etcd /registry 路徑下,能夠經過 --etcd-prefix 參數進行調整;
完整 unit 見 kube-apiserver.service
若是有組件report unhealthy請參考:https://github.com/kubernetes...
完整 unit 見 kube-controller-manager.service
啓動 kube-controller-manager