[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檢視和管理叢集了.