kubeadm方式搭建k8s小集群V1.30

1、前置知识点
kubeadm工具常用命令:
•kubeadm init:初始化一个Master节点
•kubeadm join:将工作节点加入集群
•kubeadm upgrade:升级K8s版本
•kubeadm token:管理 kubeadm join 使用的令牌
•kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改
•kubeadm version:打印 kubeadm 版本
•kubeadm alpha:预览可用的新功能

1.2 准备环境
服务器/虚拟机要求:
•建议最小硬件配置:2核CPU、2G内存、20G硬盘
•服务器最好可以访问外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点

虚拟机可设置NAT模式,配置好公网DNS,可上网
软件环境:
软件	版本
操作系统	CentOS7.9_x64
Docker	24.0.0(CE)
Kubernetes	1.30

服务器规划:
角色	IP
k8s-master	192.168.1.71
k8s-node1	192.168.1.72
k8s-node2	192.168.1.73

在这里插入图片描述

1.3 操作系统初始化配置【所有节点】

# 首先搜索已经安装的docker 安装包
yum list installed | grep docker
rpm -qa|grep docker 

# 分别删除安装包
yum –y remove docker.x86_64 
yum –y remove docker-client.x86_64 
yum –y remove docker-common.x86_64

# 删除docker 镜像
rm -rf /var/lib/docker
# 再次check docker是否已经卸载成功
# dokcer

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 将桥接的IPv4流量传递到iptables的链
cat > /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

sysctl --system  # 生效

# 开启IPv4转发
cat >/etc/modules-load.d/k8s.conf<<EOF
overlay
br_netfilter
EOF

# 生效 
modprobe overlay
modprobe br_netfilter
sysctl --system

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
2. 安装Docker/kubeadm/kubelet【所有节点】
2.1 安装Docker

# 安装相关依赖
yum install -y yum-utils device-mapper-persistent-data lvm2  container-selinux
# 添加yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看与选择docker版本
yum list docker-ce --showduplicates | sort -r
# 安装23.0.6版本
yum install -y docker-ce-23.0.6 docker-ce-cli-23.10.16       

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.33-3.1.el7.x86_64.rpm
rpm -ivh   containerd.io-1.6.33-3.1.el7.x86_64.rpm
                                                     

# 启动与开机启动
systemctl start docker
docker version
systemctl enable docker && systemctl restart docker

配置镜像下载加速器:

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://docker.m.daocloud.io","https://b9pmyelo.mirror.aliyuncs.com","http://dockerhub.aliangedu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl restart docker
docker info

在这里插入图片描述

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm

rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
指定依赖镜像地址:
vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

systemctl daemon-reload 
systemctl enable cri-docker && systemctl start cri-docker

2.3 添加阿里云YUM软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

2.4 安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0
systemctl enable kubelet

3. 部署Kubernetes Master
在192.168.1.71(Master)执行。
kubeadm init \
  --apiserver-advertise-address=192.168.174.128 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.30.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all
•--apiserver-advertise-address 集群通告地址
•--image-repository 由于默认拉取镜像地址registry.k8s.io国内无法访问,这里指定阿里云镜像仓库地址
•--kubernetes-version K8s版本,与上面安装的一致
•--service-cidr 集群内部虚拟网络,Pod统一访问入口
•--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
•--cri-socket 指定cri-dockerd接口,如果是containerd则使用--cri-socket unix:///run/containerd/containerd.sock
初始化完成后,最后会输出一个join命令,先记住,下面加入节点会用到。
接着,拷贝kubectl使用的连接k8s认证文件到默认路径:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时就可以使用kubectl工具管理K8s集群了,例如查看工作节点:
kubectl get nodes
NAME               STATUS     ROLES            AGE   VERSION
k8s-master     NotReady   control-plane        20s   v1.30.0
注:由于网络插件还没有部署,节点会处于NotReady状态
参考资料:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#initializing-your-control-plane-node 

4. 加入Kubernetes Node
在192.168.1.72/73(Node)执行。
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令并手动加上--cri-socket=unix:///var/run/cri-dockerd.sock:
kubeadm join 192.168.1.71:6443 --token 7gqt13.kncw9hg5085iwclx \
--discovery-token-ca-cert-hash sha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01 --cri-socket=unix:///var/run/cri-dockerd.sock
为了安全性,上述命令中的token,默认有效期为24小时,当过期后,就无法使用该命令再加入节点了。需要重新生成加入节点命令:
kubeadm token create --print-join-command
参考资料:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-join/

5. 部署容器网络(CNI) 
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
官方部署文档:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
创建部署资源:
kubectl create -f tigera-operator.yaml 
kubectl create -f custom-resources.yaml 

应用完成后,等待5分钟后,查看Pod运行状态:
kubectl get pods -n calico-system

如果容器处于ContainerCreating状态说明在镜像中,会比较慢,取决于本地网络,需耐心等待!
Calico容器处于Running状态,节点也会准备就绪。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的学渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值