H__D  

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

 

posted on 2025-05-05 23:32  H__D  阅读(298)  评论(0)    收藏  举报