一.安裝和配置先決條件
1.轉(zhuǎn)發(fā) IPv4 并讓 iptables 看到橋接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 設(shè)置所需的 sysctl 參數(shù),參數(shù)在重新啟動(dòng)后保持不變
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 應(yīng)用 sysctl 參數(shù)而不重新啟動(dòng)
sudo sysctl --system
2.配置hosts、關(guān)閉防火墻、關(guān)閉swap分區(qū)、禁用SElinux
將 SELinux 設(shè)置為 permissive 模式(相當(dāng)于將其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
二.安裝containerd
https://github.com/containerd/containerd/blob/main/docs/getting-started.md
1.生成默認(rèn)配置
#containerd 使用位于 的配置文件/etc/containerd/config.toml來指定守護(hù)進(jìn)程級(jí)別選項(xiàng)。使用二進(jìn)制安裝目錄默認(rèn)是沒有,是需要自己手動(dòng)創(chuàng)建。
mkdir /etc/containerd/
containerd config default > /etc/containerd/config.toml
2.修改配置
修改拉取鏡像地址
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
修改containerd cgroup為 systemd
SystemdCgroup = true # 將flase 修改為 true
3.重啟服務(wù)
systemctl restart containerd
三.安裝 kubelet、kubeadm 和 kubectl
1.添加 Kubernetes 的 yum 倉庫。在倉庫定義中的 exclude 參數(shù)確保了與 Kubernetes 相關(guān)的軟件包在運(yùn)行 yum update 時(shí)不會(huì)升級(jí),因?yàn)樯?jí) Kubernetes 需要遵循特定的過程。請注意,此倉庫僅包含適用于 Kubernetes 1.33 的軟件包; 對于其他 Kubernetes 次要版本,則需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本
# 此操作會(huì)覆蓋 /etc/yum.repos.d/kubernetes.repo 中現(xiàn)存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
2.安裝 kubelet、kubeadm 和 kubectl,并啟用 kubelet 以確保它在啟動(dòng)時(shí)自動(dòng)啟動(dòng):
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
3.命令補(bǔ)全
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
四.使用 kubeadm 創(chuàng)建集群
1.修改初始集群默認(rèn)配置文件
#生成配置
kubeadm config print init-defaults > init-defaults.yaml
#修改IP、鏡像源、pod網(wǎng)段
localAPIEndpoint:
advertiseAddress: 1.2.3.4
bindPort: 6443
pod-network-cidr: 10.244.0.0/16
imageRepository: registry.k8s.io
2.使用初始化配置文件拉取鏡像
kubeadm config images list --config=init-defaults.yaml # 查看需要哪些鏡像
kubeadm config images pull --config=init-defaults.yaml # 拉取鏡像
3.初始化集群
kubeadm init --config=init-defaults.yaml
#成功初始化如下返回
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
4.將kubectl證書添加到環(huán)境變量,否則你將無法使用kubectl命令
要使非 root 用戶可以運(yùn)行 kubectl,請運(yùn)行以下命令, 它們也是 kubeadm init 輸出的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果你是 root 用戶,則可以運(yùn)行:
export KUBECONFIG=/etc/kubernetes/admin.conf
5.控制平面節(jié)點(diǎn)隔離
默認(rèn)情況下,出于安全原因,你的集群不會(huì)在控制平面節(jié)點(diǎn)上調(diào)度 Pod。 如果你希望能夠在單機(jī) Kubernetes 集群等控制平面節(jié)點(diǎn)上調(diào)度 Pod,請運(yùn)行:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
6.修改containerd 鏡像拉取源
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]
五.安裝網(wǎng)絡(luò)插件
注意pod網(wǎng)段和init時(shí)保持一致
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml