上一篇文章主要是介紹了,每臺虛擬機的環境配置。接下來我們開始有關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
新建br_netfilter.modules和ip_conntrack.modules,再執行chmod?755來增加權限
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/%E4%B8%93%E6%A0%8F/Kubernetes%20%E5%AE%9E%E8%B7%B5%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/07%20%E5%AE%B9%E5%99%A8%E5%BC%95%E6%93%8E%20containerd%20%E8%90%BD%E5%9C%B0%E5%AE%9E%E8%B7%B5.md