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 release7.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