K8S入门02-使用kubeadm部署测试集群

1、系统配置

1.1、修改主机名

hostnamectl set-hostname k8s-node

1.2、关闭防火墙

#关闭并禁止开机自启
systemctl disable --now firewalld

1.3、关闭selinux

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

1.4、禁止SWAP

#临时关闭
swapoff -a
#永久关闭
sed -i '/swap/ s/^/#/' /etc/fstab

1.5、安装工具包

yum update -y
yum install -y python3 wget net-tools bind-utils telnet curl tree nmap jq lrzsz dos2unix  lsof  rsync cifs-utils

1.6、内核配置

#临时加载内核模块
modprobe br_netfilter
#永久加载内核模块
echo "br_netfilter" | tee -a /etc/modules-load.d/k8s.conf
#验证是否加载
lsmod |grep br_netfilter
#修改网络配置
echo "net.bridge.bridge-nf-call-ip6tables = 1" > /etc/sysctl.d/98-k8s.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/98-k8s.conf
#配置生效
sysctl --system

2、安装Docker

2.1、下载yum源文件

        可以在开源的公有云下载,这里仅列出两个,以阿里云举例

        阿里云镜像站: https://developer.aliyun.com/mirror/

        移动云镜像站: https://mirrors.cmecloud.cn/

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

2.2、安装指定版本的Docker

#查看版本
yum list docker-ce --showduplicates | sort -r
#安装指定版本
yum install -y docker-ce-28.0.4
systemctl enable --now docker

2.3、配置国内镜像源

#添加加速仓库,k8s默认cgroup驱动为systemd,这里保持一致
tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1ms.run"]
}
EOF
#重启服务
systemctl restart docker
#下载一个nginx镜像,不配置加速,下载镜像比较困难
docker pull nginx

3、安装cri-docker

3.1、下载程序

        打开github(https://github.com/Mirantis/cri-dockerd)下载程序,这里更具操作系统选择下载的程序是 cri-dockerd-0.3.17.amd64.tgz

3.2、解压程序

tar zxf cri-dockerd-0.3.17.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/

3.3、配置服务并启动

        在对应的版本下下载启动文件https://github.com/Mirantis/cri-dockerd/tree/v0.3.17/packaging/systemd

        创建/usr/lib/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 --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
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

        创建/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

启动服务

systemctl enable --now cri-docker

4、安装K8S程序

4.1、配置镜像源

        使用阿里云的镜像源(https://developer.aliyun.com/mirror/kubernetes),如果需要使用1.28及以上版本使用新的地址。这里我们使用的是1.28的版本。

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

4.2、安装程序

#查看支持的版本
yum list kubelet --showduplicates | sort -r

        安装指定的版本并设置开机启动

yum install -y kubeadm-1.28.15 kubelet-1.28.15 kubectl-1.28.15
systemctl enable kubelet

5、规划节点并克隆

5.1、规划3台机器

vi /etc/hosts
192.168.212.201 k8s-node201
192.168.212.202 k8s-node202
192.168.212.203 k8s-node203

5.2、创建链接克隆

        完整克隆是一个独立的虚拟机,链接克隆是父虚拟机的快照,这里为了节约磁盘、加快创建效率使用链接克隆。建议重新生成下 mac 地址。

5.3、修改IP地址和主机名

#修改主机名
hostnamectl set-hostname k8s-node01
# 查看当前网络连接名称,显示为ens160
nmcli connection show
# 修改v4 地址
nmcli connection modify ens160 ipv4.address 192.168.212.201
# 修改生效
nmcli connection down ens160 && nmcli connection up ens160

5.4、验证机器

#重启机器
reboot
#验证配置是否生效
hostname
getenforce
free 
sysctl net.bridge.bridge-nf-call-ip6tables
sysctl net.bridge.bridge-nf-call-iptables
systemctl status firewalld
systemctl status docker
systemctl status cri-docker

6、安装测试集群

        选择1台机器作为master节点,2台node节点,这种架构只能测试使用,因为1台master节点故障后,整体集群不可用,存在单点风险。

        可以进行安装前的检查,kubeadm init phase preflight --cri-socket=unix:///var/run/cri-dockerd.sock

6.1、安装master节点

        注意内存最小要求1700M,如果你配置的虚拟机为2G,可能需要扩容500M。Pod网络(--pod-network-cidr)和Service网络(--service-cidr)可自定定义,不要和底层网络冲突。执行成功后日志信息如下:

kubeadm init \
--apiserver-advertise-address=192.168.212.201 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=1.28.0 \
--pod-network-cidr=10.198.0.0/16 \
--service-cidr=10.98.0.0/12 \
--cri-socket=unix:///var/run/cri-dockerd.sock

        将证书复制到用户目录下,无需指定证书文件即可访问集群。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

        初始化的配置会存在在集群的CM中,通过以下命令查询。

kubectl describe cm  kubeadm-config -n kube-system

6.2、安装node节点

        master节点安装完成后提示安装node节点的命令,其中的Token会在24小时后过期。

kubeadm join 192.168.212.201:6443 --token zz6b66.nin31i2zhygbvk64 \
        --discovery-token-ca-cert-hash sha256:94bfe438416369a26f7180060fbdb1125958370e306aea4971acab311e561f4c \
--cri-socket=unix:///var/run/cri-dockerd.sock
#24小时后扩容机器,需要重置Token,生成新的扩容命令
kubeadm token create --print-join-command

        加入集群执行日志如下:

6.3、验证集群

        可以通过命令查询集群中的节点,当前节点状态为NotReady,因为没有配置容器的网络,为正常现象。

kubectl get node
# 查看kubelet状态,存在容器网络报错信息
systemctl status kubelet
找到以下信息:
Container runtime network not ready

7、配置网络插件

7.1、下载网络插件文件

        常见的网络插件有Flannel、Calico、Cilium,这里我们选择Calico,在github中打开项目(https://github.com/projectcalico/calico/),在代码的manifests目录找到两个文件(custom-resources.yaml、tigera-operator.yaml),这里我们选在的是最新的v3.29.3版本(https://github.com/projectcalico/calico/tree/v3.29.3/manifests)。

        修改custom-resources.yaml中pod网络为安装时配置地址。

#查看是否和pod网段匹配
cat custom-resources.yaml |grep "cidr:"

7.2、安装网络插件

kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml

7.3、验证网络服务状态

        等待一段时间后,查看服务状态。

kubectl get node
kubectl get pod --all-namespaces

8、卸载节点

         在master上将节点移出集群,这时候数据依然存在,节点重启后会再次自动加入集群。

#在master节点删除节点
kubectl delete node k8s-node203

        在对应节点清理数据,不可恢复,请谨慎操作!

#在对应的node节点清理数据
kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

        清理残留脏数据

#清理目录
rm -rf ~/.kube
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd
rm -rf /var/lib/kubelet
rm -rf /var/lib/kubernetes
rm -rf /var/run/kubernetes
rm -rf /etc/cni/net.d
rm -rf /opt/cni/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值