AnolisOS7.9部署K8s叢集

面向bug编程發表於2024-05-27

一. 安裝K8s叢集

1. 準備工作,2臺伺服器

192.168.5.140 - 做為master節點
  # 在該節點執行命令設定主機名:
  hostnamectl set-hostname master192.168.5.141 - 做為node1節點,在該節點執行命令設定主機名:
  # 在該節點執行命令設定主機名:
   hostnamectl set-hostname node1
# 所有節點配置hosts
cat >>/etc/hosts <<EOF 192.168.5.140 master

192.168.5.141 node1 EOF
# 所有節點關閉 SELinux
# 臨時關閉 setenforce
0
# 永久關閉 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 所有節點關閉 swap分割槽
# 臨時關閉 swapoff -a
# 永久關閉 sed -ri 's/.*swap.*/#&/' /etc/fstab
# 所有節點關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
# 所有節點時間同步
# 安裝 ntp
yum install -y ntp
# 同步時間
ntpdate ntp.aliyun.com
# 檢視時間
date
# 設定每小時的第一分鐘執行一次同步
1 * * * * root /usr/sbin/ntpdate ntp1.aliyun.com && /sbin/hwclock -w

2. 所有節點配置核心引數

cat > /etc/sysctl.d/Kubernetes.conf <<EOF
net.bridge.bridge
-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0 EOF # 使配置生效 sysctl --system
# 引數解釋

# 透過橋接網路接收IPv6資料包時,呼叫ip6tables規則處理
net.bridge.bridge-nf-call-ip6tables = 1
# 透過橋接網路接收IPv4資料包時,呼叫iptables規則處理
net.bridge.bridge-nf-call-iptables = 1
# 允許IPv4資料包轉發,即使資料包目標不是本機
net.ipv4.ip_forward = 1
# vm.swappiness是作業系統控制實體記憶體交換出去的策略。它允許的值是一個百分比的值,最小為0,最大執行100,該值預設為60。vm.swappiness設定為0表示儘量少swap,100表示儘量將inactive的記憶體頁交換出去
vm.swappiness = 0

# Kubernetes透過iptables實現服務發現和網路流量路由,pod通訊。這一步很重要。沒有設定的話會導致叢集網路通訊故障,如pod無法通訊。

3. 所有節點安裝、設定、開機啟動ipvs

# 安裝
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
# 設定
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 開機啟動
systemctl enable --now systemd-modules-load
# ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh 是IPVS相關的核心模組。它們提供了不同的負載均衡演算法(round-robin,加權輪詢,最短任務優先)。
# nf_conntrack 和 nf_conntrack_ipv4 是用於網路連線跟蹤的核心模組,這在防火牆和NAT中非常重要。
# linux kernel 4.19版本已經將nf_conntrack_ipv4 更新為 nf_conntrack

4. 所有節點重啟

reboot

5. 所有節點檢查ipvs是否載入

lsmod |egrep "ip_vs|nf_conntrack_ipv4"

6. 所有節點安裝containerd

# k8s 1.24版本之後移除了dockershim元件,不再相容docker
# 安裝依賴
yum -y install yum-utils device-mapper-persistent-data lvm2
# 新增docker的阿里源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 配置containerd cat >>/etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF
# 載入overlay
# Overlay 是一種聯合檔案系統,允許在不修改原始檔案的情況下,將變更記錄在一個獨立的層中。這種寫時複製(Copy-on-Write)技術被廣泛用於 Docker 和其他容器執行時,以便建立高效的容器檔案系統
modprobe overlay
# 載入br_netfilter
# br_netfilter 是一個核心模組,支援對網橋網路流量進行過濾,使用 iptables 和其他網路工具進行管理。這對於 Kubernetes 網路配置至關重要,特別是在使用 overlay 網路方案(如 flannel 和 Calico)時
modprobe br_netfilter # 安裝 yum install -y containerd.io

# 配置containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 使用systemd管理cgroups
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
# 配置sadnbox從阿里雲映象拉取
sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml

# 設定開機啟動、啟動containerd
systemctl enable containerd
systemctl start containerd

2. 所有節點安裝軟體源

# 新增k8s安裝源
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 檢視k8s可用版本
yum list kubelet --showduplicates | sort -r

3. 所有節點安裝k8s & docker

# 這裡指定k8s版本為1.28.2,docker版本為24.0.5(安裝k8s不同版本時確認docker版本的相容性)
yum install -y kubelet-1.28.2 kubectl-1.28.2 kubeadm-1.28.2

4. 所有節點啟動 kubelet、docker,並設定開機啟動

systemctl enable kubelet
systemctl start kubelet

5. 所有節點安裝cri-dockerd

# 因為k8s 1.24版本之後移除了dockershim元件,如果想繼續使用Docker Engine的話,需要安裝cri-dockerd作為替代,該元件可以實現dockershim的功能
# 下載
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm
# 安裝
rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm
# 啟動之前,先修改pause映象地址,預設映象源可能會拉取失敗
vi /usr/lib/systemd/system/cri-docker.service
# 修改

5. 所有節點配置docker映象源加速

cat <<EOF > daemon.json 
{ 
"exec-opts": ["native.cgroupdriver=systemd"], 
"registry-mirrors": [
        "https://o7fu9iwa.mirror.aliyuncs.com",
        "https://ung2thfc.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
        ]
} 
EOF
# 將daemon.json 移動到/etc/docker/
mv daemon.json /etc/docker/

6. 所有節點關閉swap

# 永久關閉,把載入swap分割槽的那行記錄註釋掉即可
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 臨時關閉
swapoff -a

7. 所有節點重啟docker

systemctl daemon-reload
systemctl restart docker

相關文章