上一篇文章主要是介紹了,每臺虛擬機器的環境配置。接下來我們開始有關K8S的相關部署。
另外補充一下上一篇文章中的K8S的changelog連結:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md
1 配置yum源
所有節點都需要執行此操作
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
2 br_netfilter和ip_conntrack模組配置
- 所有節點都需要執行此操作
- 載入 br_netfilter 模組以啟用核心 ipv4 轉發,1.20+強依賴該模組
- ip_conntrack 模組來記錄iptables 網路包的狀態,並把每條記錄儲存到table 裡
modprobe br_netfilter
modprobe ip_conntrack
這裡為了防止bridge-nf-call-ip6tables和bridge-nf-call-iptables無法啟動,需要配置br_netfilter開機自動啟動。
- 新建 /etc/rc.sysinit 檔案
cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
2. 新建br_netfilter.modules和ip_conntrack.modules
echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules
echo "modprobe ip_conntrack" >/etc/sysconfig/modules/ip_conntrack.modules
3 配置核心轉發及網橋過濾
新增網橋過濾及核心轉發配置檔案
cat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
net.bridge.bridge-nf-call-ip6tables:是否在 ip6tables 鏈中過濾 IPv6 包
net.bridge.bridge-nf-call-iptables:是否在 iptables 鏈中過濾 IPv4 包
執行如下命令,使配置生效
$ sysctl -p /etc/sysctl.d/k8s.conf
4 安裝ipset及ipvs
所有主機都需要操作
4.1 安裝ipset
ipset是iptables的擴充套件,它允許你建立匹配整個地址集合的規則。而不像普通的iptables鏈只能單IP匹配, ip集合儲存在帶索引的資料結構中,這種結構即時集合比較大也可以進行高效的查詢,除了一些常用的情況,比如阻止一些危險主機訪問本機,從而減少系統資源佔用或網路擁塞,IPsets也具備一些新防火牆設計方法,並簡化了配置。
yum install ipset -y
4.2 安裝ipvs
IPVS (IP Virtual Server)是基於Netfilter的、作為linux核心的一部分實現傳輸層負載均衡的技術。
IPVS整合在LVS(Linux Virtual Server)中,它在主機中執行,並在真實伺服器叢集前充當負載均衡器。IPVS可以將對TCP/UDP服務的請求轉發給後端的真實伺服器,因此IPVS天然支援Kubernetes Service。
隨著kubernetes使用量的增長,其資源的可擴充套件性變得越來越重要。特別是對於使用kubernetes執行大型工作負載的開發人員或者公司來說,service的可擴充套件性至關重要。
kube-proxy是為service構建路由規則的模組,之前依賴iptables來實現主要service型別的支援,比如(ClusterIP和NodePort)。但是iptables很難支援上萬級的service,因為iptables純粹是為防火牆而設計的,並且底層資料結構是核心規則的列表。
kubernetes早在1.6版本就已經有能力支援5000多節點,這樣基於iptables的kube-proxy就成為叢集擴容到5000節點的瓶頸。舉例來說,如果在一個5000節點的叢集,我們建立2000個service,並且每個service有10個pod,那麼我們就會在每個節點上有至少20000條iptables規則,這會導致核心非常繁忙。
基於IPVS的叢集內負載均衡就可以完美地解決這個問題。IPVS是專門為負載均衡設計的,並且底層使用雜湊表這種非常高效的資料結構,幾乎可以允許無限擴容。
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
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
4.3 安裝ipvsadm
為了便於檢視ipvs的代理規則,最好安裝一下管理工具ipvsadm。
yum install -y ipset ipvsadm
5 containerd
5.1 安裝containerd
containerd-{version}-linux-amd64.tar.gz 只包含containerd
cri-containerd-cni-{version}-linux-amd64.tar.gz 裡面包含了systemd配置檔案,containerd以及cni、runc等相關工具包,接下來我們將使用本包進行安裝
開啟github containerd releases,檢視最新包,這裡的最新版本是1.6.6
但是開啟containerd.io,卻發現最新版本是1.6.4
後面我在下載1.6.6版本的時候,老是報Connection refused
但是下載1.6.4的時候,卻十分的順利,不知道是為什麼,但是並不影響我們的部署,所以接下來我們直接使用1.6.4.
wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz
然後我們把壓縮包解壓到系統的根目錄中
tar zxvf cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /
5.2 配置containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
設定容器的cgroup驅動為systemd
替換預設pause映象地址
設定開機啟動
systemctl enable containerd --now
測試安裝結果
crictl version
參考連結
http://www.manongjc.com/detail/25-lioggelnywerjyf.html
https://www.kubernetes.org.cn/1904.html
https://www.toutiao.com/article/7105957860210819623/
https://i4t.com/5451.html
https://blog.frognew.com/2022/05/kubeadm-install-kubernetes-1.24.html
https://learn.lianglianglee.com/專欄/Kubernetes 實踐入門指南/07 容器引擎 containerd 落地實踐.md