一、环境介绍;
- 本次Kubernetes的环境搭建采用的是一主多从(一个Master管理节点和三个Node工作节点)的集群类型;
| 节点类型 | 镜像版本 | IP地址 |
| Master | Rocky Linux:9.5 | 172.16.52.71 |
| Node1 | Rocky Linux:9.5 | 172.16.52.72 |
| Node2 | Rocky Linux:9.5 | 172.16.52.73 |
如果采用的是kubeadm,容器运行时是containerd,cni用的是calico的话请跳转下面链接
二、环境搭建;
1.Docker安装;
(这里不在详细说明具体的请跳转:CentOS · Docker -- 从入门到实践)
2.Kubernetes集群初始化(以下操作三个节点均要执行);
(1)所有节点编辑hosts文件;
[root@master ~]# vim /etc/hosts
172.16.52.71 master
172.16.52.72 node1
172.16.52.73 node2
注:这里我们使用Ping节点的名字功能测试是否配置成功;
(2)所有节点设置集群时间,保证三个节点的时区统一;
#启动chronyd服务和#保持服务开机自启
[root@master ~]#systemctl start chronyd && systemctl enable chronyd
#更新系统
[root@master ~]#sudo yum update -y
(3)安装常用工具;
[root@master ~]#sudo yum install -y curl wget vim tar
注:这里防止我们后面vim、curl等操作时没有工具,可以自行选择忽略;
(4)禁用SELinux(测试环境建议关闭,生产环境按需配置)和防火墙;
# 禁用SELinux
[root@master ~]#sudo setenforce 0 #临时关闭SELinux
[root@master ~]#sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config #永久关闭SELinux
# 关闭防火墙
[root@master ~]#sudo systemctl stop firewalld && sudo systemctl disable firewalld
(5)禁用Swap;
# 禁用Swap
[root@master ~]#sudo swapoff -a # 临时禁用 swap
[root@master ~]#sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久禁用 swap
# 验证swap是否禁用成功,下面为swap关闭成功的状态;
[root@master ~]#free -h
total used free shared buff/cache available
Mem: 3.6Gi 972Mi 219Mi 15Mi 2.7Gi 2.6Gi
Swap: 0B 0B 0B
(6)配置网络与内核参数;
# 加载内核模块
[root@master ~]#sudo modprobe br_netfilter && sudo modprobe overlay
# 确保模块持久化
[root@master ~]#cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
overlay
EOF
# 配置 sysctl 参数
[root@master ~]#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
# 应用配置
[root@master ~]#sudo sysctl --system
(7)配置cgroup;
# 配置systemd cgroup 驱动
[root@master ~]# sudo mkdir -p /etc/docker
[root@master ~]# cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
(8)安装配置cri-dockerd 服务 ;可以尝试使用container,原理差不多
# 安装 cri-dockerd(Kubernetes 1.24+ 需要)
[root@master ~]# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz
[root@master ~]# tar -xvf cri-dockerd-0.3.4.amd64.tgz
[root@master ~]# sudo cp cri-dockerd/cri-dockerd /usr/local/bin/
# 配置 cri-dockerd 服务
[root@master ~]# cat <<EOF | sudo tee /etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker
After=network-online.target docker.service
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
Restart=always
RestartSec=2s
[Install]
WantedBy=multi-user.target
EOF
# 启动 cri-dockerd
[root@master ~]# sudo systemctl daemon-reload
[root@master ~]# sudo systemctl enable --now cri-docker
(9)安装 Kubernetes 组件;
# 添加 Kubernetes 仓库、
[root@master ~]# 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=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
# 安装 kubeadm、kubelet、kubectl
[root@master ~]# sudo yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
# 启动 kubelet
[root@master ~]# sudo systemctl enable --now kubelet
2.Kubernetes集群,初始化Master节点,将Node加入Master;
(1)初始化master节点;(只在Master节点运行)
# 初始化 Master 节点
[root@master ~]# sudo kubeadm init \
--kubernetes-version=v1.28.0 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=172.16.52.71 \
--image-repository=registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock # 如果使用 Docker + cri-dockerd
# --cri-socket=unix:///var/run/containerd/containerd.sock # 如果使用 containerd
# 配置 kubectl
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
(2)将Node节点加入Master;(在Node节点上执行)
#添加node节点
[root@master ~]# sudo kubeadm join 172.16.52.71:6443 \
--token 5qweit.2ayuwld6a08y69hz \
--discovery-token-ca-cert-hash sha256:df34c9b4432460c8ddedfc15a3c0845e525304490eba4269c9f734d4da240f91 \
#这里可能添加失败,因为我们使用的是cri-docker,所以需要指定cri,如果需要指定,上一行末尾需要加上一个\ ;
--cri-socket=unix:///var/run/cri-dockerd.sock
(3)安装网络插件;(加入节点后只在Master节点执行)
#安装fannel网络插件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#如果github拉不下来可以使用国内镜像源
# wget https://cdn.jsdelivr.net/gh/coreos/flannel@master/Documentation/kube-flannel.yml
#使用配置文件启动fannel
[root@master ~]# kubectl apply -f kube-flannel.yml
#查看fannel是否安装成功(都是Ready状态为安装成功)
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 12m v1.28.0
node1 Ready <none> 10m v1.28.0
node2 Ready <none> 9m58s v1.28.0
#这里以安装fannel为例,calico安装同理
#在master节点上执行,复制输出结果到node节点上执行
kubeadm token create --print-join-command
#如果我们想在Node工作节点上也执行kubectl命令的话,我们需要将Master节点的配置文件复制到Node上去
scp -r Home/.kube node1:Home/
这样我们的Kubernetes集群就部署成功了,如果大家遇到什么问题可以在评论区补充,我会把解决办法重新更新到文档之中!如果文档中有错误欢迎指正!谢谢!
7708

被折叠的 条评论
为什么被折叠?



