環境介紹
角色
作業系統
IP
主機名
Docker版本
master,node
CentOS 7.4
192.168.0.210
node210
17.11.0-ce
node
192.168.0.211
node211
192.168.0.212
node212
1.基礎環境配置(所有伺服器執行)
a.SELinux關閉
b.Docker安裝
c.配置國内Docker鏡像加速器
d.開啟Docker開機自動啟動
2.kubernetes證書準備(master執行)
a.為将檔案複制到Node節點,節省部署時間,我這裡做ssh信任免密複制
b.下載下傳證書生成工具
c.CA憑證制作
#目錄準備
#建立CA憑證配置
vim ca-config.json
#建立CA憑證請求檔案
vim ca-csr.json
#生成CA憑證和私鑰
<code>cfssl gencert -initca ca-csr.json | cfssljson -bare ca</code>
#建立kubernetes證書簽名請求
vim kubernetes-csr.json
#生成kubernetes證書及私鑰
<code>cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes</code>
#建立admin證書簽名請求
vim admin-csr.json
#生成admin證書及私鑰
<code>cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin</code>
#建立 kube-proxy 證書簽名請求
vim kube-proxy-csr.json
#生成證書及私鑰
<code>cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy</code>
#分發證書
3.etcd叢集安裝及配置
a.下載下傳etcd,并分發至節點
b.建立etcd服務啟動檔案
vim /usr/lib/systemd/system/etcd.service
c.建立必要的目錄
d.編輯etcd的配置檔案
vim /etc/etcd/etcd.conf
node210的配置檔案/etc/etcd/etcd.conf為
node211的配置檔案/etc/etcd/etcd.conf為
node212的配置檔案/etc/etcd/etcd.conf為
#在所有節點執行,啟動etcd
如果報錯,就需要檢視/var/log/messages檔案進行排錯
e.測試叢集是否正常
4.配置kubernetes參數
a.下載下傳kubernetes編譯好的二進制檔案并進行分發
#檢視kubernetes最新版,可到https://github.com/kubernetes/kubernetes/releases
然後進入 CHANGELOG-x.x.md就可限制二進制的下載下傳位址
b.建立 TLS Bootstrapping Token
c.建立 kubelet bootstrapping kubeconfig 檔案
#設定叢集參數
#設定用戶端認證參數
#設定上下文參數
#設定預設上下文
<code>kubectl config use-context default --kubeconfig=bootstrap.kubeconfig</code>
d.建立 kube-proxy kubeconfig 檔案
<code>export KUBE_APISERVER="https://192.168.0.210:6443"</code>
<code>kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig</code>
e.建立 kubectl kubeconfig 檔案
<code>kubectl config use-context kubernetes</code>
f.将2個bootstrap.kubeconfig kube-proxy.kubeconfig檔案分發至其餘伺服器
5.MASTER安裝及配置
a.apiserver安裝配置
#apiserver服務啟動檔案
vim /usr/lib/systemd/system/kube-apiserver.service
#配置kubernetes預設配置
vim /etc/kubernetes/config
#配置apiserver參數
vim /etc/kubernetes/apiserver
#啟動apiserver
#如果出現錯誤,檢視/var/log/messages
b.controller-manager服務配置
#controller-manager服務啟動檔案
vim /usr/lib/systemd/system/kube-controller-manager.service
#配置controller-manager服務配置檔案
vim /etc/kubernetes/controller-manager
#啟動controller-manager服務
systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
c.scheduler服務安裝及配置
#配置scheduler服務啟動檔案
vim /usr/lib/systemd/system/kube-scheduler.service
#配置scheduler服務配置檔案
vim /etc/kubernetes/scheduler
#啟動scheduler服務
d.測試master是否正常
<code>kubectl get componentstatuses</code>
#結果如下說明正常
6.node安裝(所有節點)
a.flannel安裝及配置(容器網絡我們采用flannel)
#yum安裝flannel
<code>yum install -y flannel</code>
#檢查node節點證書情況
<code>ls /etc/kubernetes/ssl</code>
#修改flannel.service配置檔案如下
vi /usr/lib/systemd/system/flanneld.service
#修改flannel配置檔案
vi /etc/sysconfig/flanneld
#在etcd中建立網絡配置
#flannel服務啟動
systemctl enable flanneld
systemctl start flanneld
systemctl status flanneld
b.配置Docker服務啟動檔案,內建flannel
vim /usr/lib/systemd/system/docker.service
效果如下:
#重新開機啟動Docker服務
切記要先啟動flannel,再啟動Docker
c.查詢etcd是否配置設定網絡
結果大緻如下
d.安裝及配置kubelet
#建立kubelet服務啟動檔案
vim /usr/lib/systemd/system/kubelet.service
#kubelet認證配置檔案
vim /etc/kubernetes/kubelet.kubeconfig
#kubelet配置檔案
vim /etc/kubernetes/kubelet
node210下/etc/kubernetes/kubelet内容如下
node211裡配置檔案如下
node212裡配置檔案如下
#啟動kubelet服務
#這裡很容易出錯,出錯時檢視/var/log/messages看日志進行排錯
#檢查kubelet服務是否正常
c.安裝及配置kube-proxy
#配置kube-proxy服務啟動檔案
vim /usr/lib/systemd/system/kube-proxy.service
#kube-proxy配置檔案如下:
node210:
vim /etc/kubernetes/proxy
node211:
node212:
#啟動kube-proxy服務
d.在所有節點預設開啟forward為accept
vim /usr/lib/systemd/system/forward.service
#啟動forward服務
7.測試叢集是否工作正常
a.建立一個deploy
<code>kubectl run nginx --replicas=2 --labels="run=nginx-service" --image=nginx --port=80</code>
b.映射服務到外網可通路
<code>kubectl expose deployment nginx --type=NodePort --name=nginx-service</code>
c.檢視服務狀态
d.檢視pods啟動情況
e.在外網通過
<a href="http://192.168.0.210:30881/">http://192.168.0.210:30881</a>
<a href="http://192.168.0.211:30881/">http://192.168.0.211:30881</a>
<a href="http://192.168.0.212:30881/">http://192.168.0.212:30881</a>
都可以通路nginx頁面
若無法通路,可通過iptables -nL檢視forward鍊是否開啟
本文轉自 rong341233 51CTO部落格,原文連結:http://blog.51cto.com/fengwan/2049124