1.基础的网络结构说明
软件路由器
ikuai
当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的
为了防止出现问题 我们可以把第二块网卡临时关闭一下
2.准备路由器
ikuai
爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)
测试环境用 32位就可以了 因为用不到那么高性能,完全浪费,但是生产环境必须64位
1 回车
需要配置一定的信息
选择2 回车
esc 返回
q 退出
q 锁定 就可以离开这里了
浏览器输入 192.168.72.200 默认重定向到这里
用户名密码都是admin
纯软件实现的路由器
关闭
绑定外网网卡
把剩下的一块网卡进行绑定
默认是DHCP
但在真实生产环境中我们都是通过 拨号 或者 静态固定IP去提供网络访问能力的
3.配置虚拟机
1.配置第一块仅主机网卡
vi /etc/NetworkManager/system-connections/ens160.nmconnection
三台机器都改完
address1=仅主机的ip/子网掩码位,网关路由器ip
dns 域名 加一下
2.关闭第二块nat网卡
vi /etc/NetworkManager/system-connections/ens192.nmconnection
autoconnect=false
三台主机配置完
:wq 保存退出
3.重启
如果重启就不用执行下面三条命令了 三台机器都做
先不重启在做完下面配置在重启
4.关闭swap分区
如果你的机器本身初始化出来就是为了安装kubernetes集群的 你在分区的时候就没必要分 swap 分区
如果分了 那么怎么关闭
下面就是关闭的方法
swapoff -a
相当于把开机自启的那个命令注释掉
sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab
不是永久执行的 执行上面第二条命令即可永久 生效
5.修改主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
设置域名
vi /etc/hosts
192.168.72.11 k8s-master01 m1
192.168.72.12 k8s-node01 n1
192.168.72.13 k8s-node02 n2
192.168.72.14 harbor
m1 位为简写
n1 同理
后面可能搭建 harbor 所以提前设置一下用到的域名
嫌麻烦可以拷贝到另一台主机上
6.安装 ipvs
yum install -y ipvsadm
7.开启每个节点的路由转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
8.安装epel 加载 bridge
yum install -y epel-release
yum install -y bridge-utils
9.加载 br_netfilter 模块
modprobe br_netfilter
echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1'>> /etc/sysctl.conf
sysctl -p
10.安装docker
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.配置daemon.json
sudo cat <<EOF > /etc/docker/daemon.json
{
"default-ipc-mode": "shareable",
"data-root": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "100"
},
"insecure-registries": ["harbor.xinxainghf.com"],
"registry-mirrors": [
"https://hub.skillixx.com",
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://docker.rainbond.cc",
"https://hpbe2ezf.mirror.aliyuncs.com",
"https://kfp63jaj.mirror.aliyuncs.com"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
2.重启docker
systemctl daemon-reload
systemctl enable --now docker
11.重启一下
reboot
完美运行
4.安装 cri-docker
讲解一下
CRI关系图
kubernetes 想要移出docker 移出的是 中间的转化的关系 也就是 CRI语言转化为 OCRI
但是docker 又有公司实现了 CRI 转化为 OCRI 名为 cri-docker
1.下载cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
tar -xf cri-dockerd-0.3.9.amd64.tgz
mv ./cri-dockerd/cri-dockerd /usr/bin/
chmod a+x /usr/bin/cri-dockerd
2.编写服务管理脚本
cat <<"EOF" > /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
--network-plugin=cni
--pod-infra-container-
image=registry.aliyuncs.com/google_containers/pause:3.8
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=O
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
用多少版本就几版本
docker pull registry.aliyuncs.com/google_containers/pause:3.8
3.添加cri-docker 套接字生成脚本
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
4.启动cri-docker服务
sudo systemctl daemon-reload
systemctl enable --now cri-docker
systemctl is-active cri-docker
5.安装 kubeadm
1.添加yum源
cat <<EOF | sudo tee /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
2.安装kubeadm 1.29
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
3.设置开机自启
sudo systemctl enable kubelet
4.初始化主节点
kubeadm init --apiserver-advertise-address=192.168.72.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.14 --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
如果科学上网 可以不加
--kubernetes-version 1.29.14
--image-repository registry.aliyuncs.com/google_containers
重要重要重要!!!
一定要在三个节点都拉去 pause 镜像 他可能会用到两个版本的 我这里有 kubeadm config images list 指定的 3.9 但是 他初始化的时候用的 3.6所以最好两个版本都下 然后三个节点都要拉取镜像 要不然会有问题 ,经验 !!!!!!!!!!
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5.将另外两个节点加入集群
kubeadm join 192.168.72.11:6443 --token c52o1r.gxeerfkrhsx0zen1 \
--discovery-token-ca-cert-hash sha256:eb622ff0b73ad808efde62dd362daee34b00fa7f541cb227a907d86ee72f31a4 --cri-socket unix:///var/run/cri-dockerd.sock
--cri-socket unix:///var/run/cri-dockerd.sock 需要在命令指定套接字 为 docker
1.检查是否加入
kubectl get node
2.如果token过期后 需要重新创建
kubeadm token create --print-join-command
6.部署网络插件
1.安装calico
准备好
unzip ./calico.zip
这是calico运行所需要的所有的镜像
1.解压镜像
tar -zxvf calico-images.tar.gz
2.加载镜像
这四个镜像每个节点都要导入
docker load -i calico-cni-v3.26.3.tar
docker load -i calico-node-v3.26.3.tar
docker load -i calico-kube-controllers-v3.26.3.tar
docker load -i calico-typha-v3.26.3.tar
传输到 n1 的设备 下 的 /root
scp -r calico-images root@n1:/root/
3.执行安装
把部署文件利用在集群上
kubectl apply -f calico-typha.yaml
这个文件需要改一些地方
关闭IPIP
需要与前面创建集群的时候 那个 pod cidr一致
查看网络的 pod
kubectl get pod -A
需要 在子节点 装 pause 的镜像 没有就起不来 这是经验
完美运行一个集群 三个节点
7.如果我们在安装集群时有多块网卡并且没有关闭
1.固定网卡(可选)
指定目标域名可达的网卡
匹配正则的网卡
忽略正则的网卡
指定一个网段范围
修改kube-proxy 模式为 ipvs
这几种方式