天天看點

CentOS 7.4搭建Kubernetes 1.8.5叢集

環境介紹

角色

作業系統

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