1. 环境准备
1.1 更新系统
sudo yum update -y
1.2 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
1.3 关闭 SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
1.4 关闭交换分区
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
1.5 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter
确保这些模块在重启后仍然加载,创建 `/etc/modules-load.d/k8s.conf` 文件:
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
1.6 配置网络参数
创建 `/etc/sysctl.d/k8s.conf` 文件:
sudo tee /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF
应用这些设置:
sudo sysctl --system
1.7 时间同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
2. 安装容器运行时(containerd)
类似docker,Kubernetes 默认使用 containerd 作为容器运行时,需要显式配置使用 `containerd`。
2.1 安装 containerd
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加阿里仓库镜像:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 containerd:
sudo yum install -y containerd.io
2.2 配置 containerd
创建或修改 containerd 配置文件 `/etc/containerd/config.toml`:
sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml
编辑 `/etc/containerd/config.toml` 文件,确保 `SystemdCgroup` 设置为 `true`:
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
修改沙盒镜像(不然后面启动初始化k8s报错: 参考:kubeadm init:failed to pull image registry.k8s.io/pause:3.6_kubernetes_beOkWithAnything-K8S/Kubernetes)
原值:sandbox_image = "registry.k8s.io/pause:3.6" =》"registry.aliyuncs.com/google_containers/pause:3.9" (k8s 1.28.0版本 默认使用 pause:3.9)
# 使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6,由于网络问题无法下载镜像
k8simage/pause:3.6
vim /etc/containerd/config.toml sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
配置crictl
sudo cat <<EOF | sudo tee /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF
配置镜像仓库
vim /etc/containerd/config.toml --------------------------------------- [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://docker.m.daocloud.io"] ---------------------------------------
启动并启用 containerd:
sudo systemctl enable containerd
sudo systemctl restart containerd
3. 安装 Kubernetes 组件
3.1 添加 Kubernetes 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
3.2 安装 kubeadm, kubelet 和 kubectl
# 使用阿里云镜像源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 指定版本 yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
启用并启动 `kubelet`:
sudo systemctl enable kubelet
sudo systemctl start kubelet
3.3 锁定版本 kubeadm, kubelet 和 kubectl
yum install -y yum-plugin-versionlock
yum versionlock kubeadm kubelet kubectl
4. 初始化机器
准备三台机器,编辑hosts文件
cat >> /etc/hosts << EOF 192.168.1.181 k8s-master 192.168.1.182 k8s-node1 192.168.1.183 k8s-node2 EOF
4.1 初始化Master节点
在 192.168.1.181 k8s-master节点上,执行以下命令初始化 Master 节点:
sudo kubeadm init \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.28.0 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --apiserver-advertise-address=192.168.1.181 # 替换为实际IP

如果镜像拉取失败,查看网络问题,或者更换镜像源
# 查看 kubeadm 需要的镜像列表 kubeadm config images list # 查看特定版本的镜像列表 kubeadm config images list --kubernetes-version v1.28.0 # 使用国内镜像源查看 kubeadm config images list --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.28.0 # 使用国内拉取镜像 kubeadm config images pull \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.28.0
4.2 配置 kubectl
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
工作节点接入命令:
# 使用初始化时输出的命令 kubeadm join 192.168.1.180:6443 \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash>
kubeadm join 192.168.1.181:6443 --token psol7z.iw3dvyry8l3vi7cp \
--discovery-token-ca-cert-hash sha256:d38050a736934f30fac816a2d5a4a739ae57766d0a54341994417dca0bfb8a8b
验证是否可以正常访问集群:
kubectl get nodes

查看镜像
# 查看镜像 crictl images # 查看启动容器 crictl ps

4.3 初始化Worker Node节点
在 192.168.1.182 k8s-node1,192.168.1.183 k8s-node2节点上,执行以下命令初始化 Master 节点:
工作节点接入命令:
kubeadm join 192.168.1.181:6443 --token psol7z.iw3dvyry8l3vi7cp \
--discovery-token-ca-cert-hash sha256:d38050a736934f30fac816a2d5a4a739ae57766d0a54341994417dca0bfb8a8b

在Master节点上查看

5. 安装网络插件
Kubernetes 需要安装网络插件以实现 Pod 间通信。这里以 Flannel 为例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到quay.io这个registery。如果Pod镜像下载失败,可以改这个镜像地址
查看节点,状态已经变成Ready状态了。

5. 测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行:
在主节点执行命令
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc

浏览器访问地址:http://NodeIP:Port =》 http://192.168.1.181-193:31719


浙公网安备 33010602011771号