1. 程式人生 > >[Kubernetes]CentOS7部署Kubernetes叢集

[Kubernetes]CentOS7部署Kubernetes叢集

環境介紹及安裝前準備

三臺機器,用於部署k8s的執行環境:

節點 ip
Master 192.168.243.138
Node1 192.168.243.139
Node2 192.168.243.140

叢集配置:

部署節點(1個):執行ansible指令碼的節點
etcd節點(3個):注意etcd叢集必須是1,3,5,7...奇數個節點
master節點(1個):根據實際叢集規模可以增加節點數,但是此時需要額外規劃一個master VIP(虛地址)
node節點(2個):真正應用負載的節點,可根據需要增加機器配置和節點數
lb節點(2個) : 負載均衡節點兩個,安裝 haproxy+keepalived

k8s叢集會識別主機名字,確保每個主機名設為不同值,使用命令即可(修改完成之後,需要重啟機器才能生效)

hostnamectl --static set-hostname  master
hostnamectl --static set-hostname  node1
hostnamectl --static set-hostname  node2

編輯/etc/hosts檔案,寫入下面資訊:

192.168.243.138 master
192.168.243.139 node1
192.168.243.140 node2

關閉三臺機器上面的防火牆,為了安全,在這裡選擇臨時關閉防火牆,不建議永久關閉

systemctl stop firewalld 

在安裝部署叢集之前,先將三臺伺服器的時間進行同步,否則,在後面的執行中可能會提示錯誤,以前寫過一篇關於時間同步設定的部落格,在這裡我就不重複了,直接貼出來:【Linux】時間同步設定+防火牆設定+SELinux設定

部署etcd

因為內容較多,另外寫了一篇部落格:[Kubernetes]CentOS7下Etcd叢集搭建

lb節點安裝haproxy+keepalived

在ip為192.168.243.139和192.168.243.140上安裝部署haproxy+keepalived

yum install haproxy keepalived -y

安裝完畢之後,修改配置檔案,具體如圖:
在這裡插入圖片描述
keepalived相關配置檔案也要做修改,在這裡我就直接貼出來以前寫的一篇部落格了,就不多做介紹了:Keepalived+LVS-DR+Nginx高可用故障切換模式

叢集部署

1,安裝Docker,一條命令即可(如果伺服器上面安裝過,這一步可跳過):

yum -y install docker 

2,安裝epel源並更新:

yum install epel-release -y
yum update

3,安裝及準備ansible(一個節點執行即可,在這裡我是在master節點上執行的):

yum install git python-pip -y 
(如果直接執行上面命令出錯時,可以先執行 yum -y install epel-release 
之後再執行yum -y install python-pip
出現錯誤原因一般是因為CentOS官方的源有些時候滯後導致的) 
#pip安裝ansible:
pip install pip --upgrade
pip install ansible

接下來將/usr/bin/pip做以下修改:

原始碼:
from pip._internal import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

修改為:
from pip._internal import _main_

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(_main_.main())

免密碼登陸其他節點

ssh-keygen -t rsa -b 2048    然後一路回車即可
ssh-copy-id [email protected]    (在/etc/hosts檔案中的名稱,在環境介紹及安裝前準備有介紹)
按照提示輸入yes和root密碼即可
需要注意:ssh-copy-id節點地址和自身都要執行此命令

4,編排k8s安裝(一個節點執行即可,在這裡我是在master節點上執行的):

git clone https://github.com/gjmzj/kubeasz.git
mkdir -p /etc/ansible
mv kubeasz/* /etc/ansible

5,下載二進位制檔案(一個節點執行即可,在這裡我是在master節點上執行的):

國內請從分享的百度雲連結下載 https://pan.baidu.com/s/1c4RFaA
下載完成之後,解壓到/etc/ansible/bin目錄下
如果有合適網路環境,也可以按照/down/download.sh自行從官網上下載

6,配置叢集引數(一個節點執行即可,在這裡我是在master節點上執行的):

cd /etc/ansible
cp example/hosts.m-masters.example hosts
vi hosts                       # 根據實際情況修改此hosts檔案
# 驗證ansible安裝,正常能看到每個節點返回 SUCCESS
ansible all -m ping

如圖,我們可以看到ansible已正確安裝:
在這裡插入圖片描述
7,開始安裝.如果對叢集安裝了流程不熟悉,可以分步安裝,當然也可以一步安裝(一個節點執行即可,在這裡我是在master節點上執行的):

# 分步安裝
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
ansible-playbook 03.docker.yml
ansible-playbook 04.kube-master.yml
ansible-playbook 05.kube-node.yml
ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
# 也可一步安裝
ansible-playbook 90.setup.yml
驗證安裝

到上面為止,就已經做完了相關部署.接下來我們需要驗證一下安裝的正確與否.

kubectl version
kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等元件 Healthy
kubectl cluster-info # 可以看到kubernetes master(apiserver)元件 running
kubectl get node # 可以看到單 node Ready狀態
kubectl get pod --all-namespaces # 可以檢視所有叢集pod狀態,預設已安裝網路外掛、coredns、metrics-server等
kubectl get svc --all-namespaces # 可以檢視所有叢集服務狀態

具體圖片在這裡我就不做展示了.
有可能提示:kubectl: command not found
這是因為沒有將kubectl沒有新增到系統的環境變數中,解決辦法:

首先執行 find / -name kubectl 找到kubectl所在目錄
可以看到,在/etc/ansible/bin/kubectl
編輯環境變數:vi /etc/profile
在檔案中新增:export PATH=/etc/ansible/bin/:$PATH
環境變數生效:source /etc/profile

當執行kubectl version時,可能提示:The connection to the server localhost:8080 was refused - did you specify the right host or port?
解決辦法:

需要開啟api server 代理埠:
檢視埠是否代理:curl localhost:8080/api    可以看到是被拒絕連線的
開啟埠代理:kubectl proxy --port=8080 &
安裝主要元件
# 安裝kubedns,預設已整合安裝
kubectl create -f /etc/ansible/manifests/kubedns
# 安裝dashboard,預設已整合安裝
kubectl create -f /etc/ansible/manifests/dashboard

此時,我們便可以登入dashboard檢視和管理叢集了.