1. 程式人生 > 其它 >k8s叢集環境搭建

k8s叢集環境搭建

環境規劃

叢集型別

一主多從

一臺master節點和多臺node節點,搭建簡單,但是有單機故障風險,適合用於測試環境

多主多從

多臺master節點和多臺node節點,搭建麻煩,安全性高,適合用於生產環境

為了測試簡單,本次搭建的是一主兩從型別的叢集

安裝方式

k8s有多種部署方式,目前主流的方式有kubeadm、minikube、二進位制包

  • minikube:一個用於快速搭建單節點的k8s的工具
  • kubeadm:一個用於快速搭建k8s叢集的工具
  • 二進位制包:從官網下載的每個元件的二進位制包,依次去安裝,此方式對於理解k8s元件更加有效

現在需要安裝k8s叢集環境,但又不想過於麻煩,所以選擇使用kubeadm的方式

環境搭建

準備三臺centos虛擬機器,分別命名為master node1 node2

虛擬機器安裝步驟自行百度,注意虛擬機器配置至少2核2g記憶體,不然無法使用k8s叢集

使用xshell連線三臺虛擬機器

配置xshell同時向三臺虛擬機器輸入命令

改變xshell佈局為瓷磚排列

這樣我們就能同時向三臺虛擬機發送命令,同時觀察三臺虛擬機器的狀態了

環境初始化

檢查centos版本

使用k8s叢集要求centos版本在7.5及以上,在xshell中輸入

[root@master ~]# cat /etc/redhat-release 
CentOS Linux release 
7.9.2009 (Core)

顯示centos版本為7.9,符合要求

主機名解析

配置三臺虛擬機器的主機名到ip地址的對映

[root@master ~]# vim /etc/hosts
#在裡面新增
你的master虛擬機器的ip地址 master
你的node1虛擬機器的IP地址 node1
你的node2虛擬機器的ip地址 node2

ping主機名檢視是否能成功連通

[root@master ~]# ping master
[root@master ~]# ping node1
[root@master ~]# ping node2

如果都能ping通證明沒有問題

開啟時間同步

kubernetes要求叢集中的節點時間必須精確一致,這裡直接使用chronyd服務從網路同步時間

啟動chronyd服務

[root@master ~]# systemctl start chronyd

設定chronyd服務開機自啟

[root@master ~]# systemctl enable chronyd

使用date驗證時間

[root@master ~]# date
2021年 06月 30日 星期三 09:51:14 CST

禁用iptables和firewalld服務

注意:這只是開發學習中使用,生產環境中慎重關閉

k8s和docker在執行過程中會產生大量的iptables規則,為了不讓系統規則跟它們混淆,直接關閉系統的規則

#關閉防火牆
[root@master ~]# systemctl stop firewalld
#設定開機自動關閉防火牆
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#關閉iptables服務
[root@master ~]# systemctl stop iptables
Failed to stop iptables.service: Unit iptables.service not loaded.

禁用selinux

selinux是linux系統下的一個安全服務,如果不關閉它,在安裝叢集中會產生各種各樣的奇葩問題

[root@master ~]# vim /etc/selinux/config 
#將裡面的SELINUX改為disabled
SELINUX=disabled

禁用swap分割槽

swap分割槽指的是虛擬記憶體分割槽,它的作用是在實體記憶體使用完之後,將磁碟空間虛擬成記憶體來使用

啟用swap裝置會對系統的效能產生非常負面的影響,因此k8s要求每個節點都要禁用swap裝置

但是如果因為某些原因確實不能關閉swap分割槽,就需要在叢集安裝過程中通過明確的引數進行配置說明

[root@master ~]# vim /etc/fstab
#將swap一行進行註釋
#/dev/mapper/centos-swap swap 

修改linux的核心引數

修改Linux的核心引數,新增網橋過濾和地址轉發功能

[root@master ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

重新載入配置

[root@master ~]# sysctl -p
#載入網橋過濾模組
[root@master ~]# modprobe br_netfilter
#檢視網橋過濾模組是否載入成功
[root@master ~]# lsmod |grep br_netfilter
br_netfilter           22256  0 
bridge                151336  1 br_netfilter

配置ipvs功能

在k8s中service有兩種代理模型,一種是基於iptables的,一種是基於ipvs的

兩者比較的話,ipvs的效能明顯要高一些,但是如果要使用它的話,需要手動載入ipvs模組

安裝ipset和ipvsadm

[root@master ~]# yum install ipset ipvsadm -y

新增需要載入的模組寫入指令碼檔案

[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF

為指令碼檔案新增許可權

[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules 
#執行指令碼檔案
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

檢視對應的模組是否載入成功

[root@master ~]# lsmod |grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  0 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

重啟伺服器

上述步驟完成之後,需要重啟Linux系統

[root@master ~]# reboot

檢視selinux是否是禁用狀態

[root@master ~]# getenforce
Disabled

檢視swap分割槽

[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         166        1488           9         164        1504
Swap:             0           0           0