文章目录
前置准备:
- 1个主节点和两个工作节点
172.19.6.5 k8smaster.lab.com
172.19.6.6 k8sworker1.lab.com
172.19.6.9 k8sworker2.lab.com - 节点需求:
OS: Ubuntu 22.04
RAM:Minimum 2GB RAM or more
CPU:Minimum 2 CPU cores / or 2 vCPU
硬盘空间:20 GB free disk space on /var or more
网路:每个节点间能够互联
1 每个节点设置hostname
主节点
sudo hostnamectl set-hostname "k8smaster.lab.com"
工作节点:
sudo hostnamectl set-hostname "k8sworker1.lab.com" // 1st worker node
sudo hostnamectl set-hostname "k8sworker2.lab.com" // 2nd worker node
在每个节点上的 /etc/hosts 文件中添加以下条目
172.19.6.5 k8smaster.lab.com
172.19.6.6 k8sworker1.lab.com
172.19.6.9 k8worker2.lab.com
2禁用swap并添加内核参数
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
在所有节点上加载以下内核模块
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
为 Kubernetes 设置以下内核参数,在 tee 命令下运行
sudo tee /etc/sysctl.d/kubernetes.conf <<EOT
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOT
重新加载以上更改,运行
sudo sysctl --system
3 安装Containerd Runtime
在本次安装中,我们为 Kubernetes 集群使用 containerd 运行时。 因此,要安装containerd,首先安装其依赖项。
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
启用docker存储库
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
现在,运行以下 apt 命令来安装 containerd
sudo apt update
sudo apt install -y containerd.io
配置containerd,以便开始使用systemd作为cgroup。
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
restart并enable containerd服务
sudo systemctl restart containerd
sudo systemctl enable containerd
4 添加 Apt Kubernetes Repository
默认 Ubuntu 22.04 软件包存储库中不提供 Kubernetes 软件包。 所以我们需要添加 Kubernetes 存储库。 运行以下命令来下载公共签名密钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
接下来,运行以下 echo 命令来添加 Kubernetes apt 存储库。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
5) 安装Kubectl, Kubeadm and Kubelet
添加存储库后,在所有节点上安装 kubectl、kubelet 和 Kubeadm 等 Kubernetes 组件。 执行以下命令集
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
6安装Kubernetes Cluster
现在已经准备好初始化Kubernetes 集群了。 仅在主节点上运行以下 Kubeadm 命令。
sudo kubeadm init --control-plane-endpoint=k8smaster.lab.com
Output(出现错误):
root@k8smaster:~# kubeadm init --control-plane-endpoint=k8smaster.lab.com
I0406 12:36:17.596979 1531 version.go:256] remote version is much newer: v1.29.3; falling back to: stable-1.31
[init] Using Kubernetes version: v1.31.8
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Port-6443]: Port 6443 is in use
[ERROR Port-10259]: Port 10259 is in use
[ERROR Port-10257]: Port 10257 is in use
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR Port-2379]: Port 2379 is in use
[ERROR Port-2380]: Port 2380 is in use
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
如果遇到以上错误,运行一下命令,充值kubenetes cluster
kubeadm reset
再次运行init(还是出现错误)
root@k8smaster:~# kubeadm init --control-plane-endpoint=k8smaster.lab.com
I0406 15:42:41.829195 3206 version.go:256] remote version is much newer: v1.29.3; falling back to: stable-1.31
[init] Using Kubernetes version: v1.31.8
[preflight]