Skip to content

rockyLinux部署k8s集群

一、环境准备

一主俩从

    • CPU >=4个
    • 内存 >=4G
    • 硬盘 >=100G
    • CPU >=2个
    • 内存 >=2G
    • 硬盘 >=100G
  • 路由器ikuai

前期准备

关闭swap

bash
#临时关闭swap
swapoff -a
#永久关闭
sed -i 's:/dev/mapper/rl_192-swap:#/dev/mapper/rl_192-swap:g' /etc/fstab

安装ipvs

bash
#安装ipvs
  dnf install ipvsadm -y

开启路由转发

bash
#开启路由转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

关闭防火墙

bash
systemctl stop firewalld
systemctl disable firewalld

自定义域名解析

bash
vim /etc/hosts
# 追加下面内容
192.168.152.11 k8s-master m1
192.168.152.12 k8s-node1 n1
192.168.152.13 k8s-node2 n2

加载bridge

bash
dnf -y install epel-release
dnf -y install bridge-utils

modprobe br_netfilter
echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
sysctl -p

安装docker-ce

bash
#添加docker源
dnf config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -e 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' /etc/yum.repos.d/docker-ce.repo
dnf -y install docker-ce
#配置daemon
cat > /etc/docker/daemon.json <<EOF
{
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "100"
  },
  "insecure-registries": ["harbor.zbzly.com"],
  "registry-mirrors": ["https://docker.xuanyuan.me"]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d/

重启 安装cri-docker

bash
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz
tar -xf cri-dockerd-0.3.16.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd
# 配置cri-docker服务
cat << "EOF" > /etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF

# 添加cri-docker socket
cat << "EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF

# 启动cri-docker服务
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
systemctl is-active cri-docker.service

添加kubeadm yum 源

bash
#配置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
#安装包
dnf install -y kubelet-1.29.2 kubeadm-1.29.2 kubectl-1.29.2 --disableexcludes=kubernetes
# 设置开机自启动
systemctl enable kubelet.service
#初始化节点(主节点执行)
kubeadm init --apiserver-advertise-address=192.168.152.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version 1.29.2 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all \
--cri-socket unix:///var/run/cri-dockerd.sock
# 配置kubectl
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 重新生成token
kubeadm token create --print-join-command
# 从节点加入集群(记得添加 --cri-socket)
kubeadm join 192.168.152.11:6443 --token dnp70c.67od3ve8xstmgwwi \
	--discovery-token-ca-cert-hash \
	sha256:2b3aeef12812718b0680568b4a2f14d5ab3f548d810b1ae21c6f5fab65c4d46b \
	--cri-socket unix:///var/run/cri-dockerd.sock

部署网络插件

bash
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/calico-typha.yaml -o calico.yaml
  CALICO_IPV4POOL_CIDR 指定pod地址
# 修改为BGP模式
## Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Always" #改为Off
# 应用calico
kubectl apply -f calico.yaml
# 相关镜像可提前准备
docker pull calico/kube-controllers:v3.26.3
docker pull calico/cni:v3.26.3
docker pull calico/node:v3.26.3  
docker pull calico/typha:v3.26.3
bash
vim ~/.bashrc
#自动补全
>>
source <(kubectl completion bash)
<<