CentOS下Kubernetes集羣架設(一)主機環境預設

雖然有Rancher OS和CoreOS這類的發行版,但Kubernetes集羣的安裝也不是太麻煩,因此,還是先從最基本的實驗下。以下是本人CentOS7.6上安裝Kubernetes集羣的筆記,並且分章節記錄,持續更新...。

Kubernetes主機環境預設

Kubernete集羣的主機生產環境也有多種選擇,如下:

  • 方案一: 三臺或者五臺 Master 節點,分別安裝全角色:ETCD , Control Plane ;其他節點爲容器計算機節點,分別安裝角色: worker;
  • 方案二: 三臺節點分別安裝角色:ETCD;兩臺節點分別安裝角色:Control Plane;其他節點爲容器計算機節點,分別安裝角色: worker;

但我現在手上只有一臺7代i7的筆記本,雖有16G內存,但這雙核四線程真不夠看啊,單機和minikube安裝先不考慮,等小型實驗集羣實驗好後再逐個實現。我的筆記本是安裝的fedora,使用kvm虛擬機虛擬了三個主機每個主機也就1vcpu+1G內存,分別安裝一個master節點和兩個計算節點。
各個節點需要安裝的kubernetes組件如下:

  • 主節點:
    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
    • kube-proxy
    • pause
    • etcd
    • coredns
  • 從節點:
    • kube-proxy
    • pause
    • flannel(本次實驗選定的網絡插件)

1.2 設置時間同步

如chrony,配置文件/etc/chrony.conf(內網需要配置時間服務器),服務啓動使用systemctl命令。建議無論內網和能連接Internet的環境都爲集羣配置時間同步服務器。

1.3 配置DNS或者hosts主機解析

在/etc/hosts文件中配置集羣的IP和主機名解析(同時可以減少DNS的解析時延)

1.4 關閉防火牆

CentOS7上關閉防火牆

# systemctl stop firewalld.service

# systemctl disable firewalld.service

1.5 關閉SELinux

# setenforce 0

同時配置時/etc/selinux/config文件

# vim /etc/selinux/config
...
SELINUX=disable

或者

# sed -i 's@^\(SELINUX=\).*@\1disabled@' /etc/sysconfig/selinux

1.6 禁用swap設備

Kubernetes 1.8 開始需要關閉系統 Swap 交換分區,如果不關閉,則無法啓動。
查看

# free -m

臨時關閉

# swapoff -a
# echo "vm.swappiness = 0" >> /etc/sysctl.conf

或者

# swapoff -a && sysctl -w vm.swappiness=0

同時編輯配置文件/etc/fstab進行永久關閉,即註釋掛載swap設備的行。

注:本次實驗由於資源有限沒有關閉,但後續有解決方法(僅限於實驗環境)

1.7 啓用IPVS內核模塊

kube-proxy 支持 iptables 和 ipvs,如果條件滿足,默認使用 ipvs,否則使用 iptables。

cat <<EOF > /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/kubernetes.conf 或者 sysctl --system

由於 ipvs 已經加入到了內核的主幹,所以爲 kube-proxy 開啓 ipvs 的前提需要加載以下的內核模塊:

  • ip_vs
  • ip_vs_rr
  • ip_vs_wrr
  • ip_vs_sh
  • nf_conntrack_ipv4

執行以下腳本加載內核

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

參考:https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md

上面腳本創建了的/etc/sysconfig/modules/ipvs.modules文件,保證在節點重啓後能自動加載所需模塊。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已經正確加載所需的內核模塊。

接下來還需要確保各個節點上已經安裝了 ipset 軟件包。 爲了便於查看 ipvs 的代理規則,最好安裝一下管理工具 ipvsadm。

yum install ipset ipvsadm

可以使用ipvsadm檢查是否開啓ipvs,示例如下:

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr persistent 10800
  -> 192.168.0.1:6443             Masq    1      1          0

如果以上前提條件如果不滿足,則即使 kube-proxy 的配置開啓了 ipvs 模式,也會退回到 iptables 模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章