一 首先准备三个IP地址,分别作为master节点和两个node节点
master:192.168.243.4
node1:192.168.243.5
node2:192.168.243.6
二 修改主机名字
[root@localhost ~]# hostnamectl set-hostname master && bash //master节点
[root@localhost ~]# hostnamectl set-hostname node1 && bash //node1节点
[root@node1 ~]#
[root@loxalhost ~]# hostnamectl set-hostname node2 && bash //node2节点
[root@node2 ~]#
以下操作三台主机相同,
三 修改hosts文件
[root@master ~]# vim /etc/hosts
验证是否能够ping通,可以看到我的已经成功
[root@master ~]# ping 192.168.243.5
PING 192.168.243.5 (192.168.243.5) 56(84) bytes of data.
64 bytes from 192.168.243.5: icmp_seq=1 ttl=64 time=0.155 ms
64 bytes from 192.168.243.5: icmp_seq=2 ttl=64 time=0.159 ms
64 bytes from 192.168.243.5: icmp_seq=3 ttl=64 time=0.086 ms
64 bytes from 192.168.243.5: icmp_seq=4 ttl=64 time=0.066 ms
64 bytes from 192.168.243.5: icmp_seq=5 ttl=64 time=0.074 ms
64 bytes from 192.168.243.5: icmp_seq=6 ttl=64 time=0.100 ms
^Z
[1]+ 已停止 ping 192.168.243.5
[root@master ~]# ping 192.168.243.6
PING 192.168.243.6 (192.168.243.6) 56(84) bytes of data.
64 bytes from 192.168.243.6: icmp_seq=1 ttl=64 time=1.39 ms
64 bytes from 192.168.243.6: icmp_seq=2 ttl=64 time=0.593 ms
64 bytes from 192.168.243.6: icmp_seq=3 ttl=64 time=1.31 ms
^Z
[2]+ 已停止 ping 192.168.243.6
[root@master ~]#
四 关闭交换分区,可以看到我的已经成功了
[root@master ~]# swapoff -a //临时关闭
[root@master ~]# vim /etc/fstab //永久关闭
[root@master ~]# free -h
total used free shared buff/cache available
Mem: 3.6G 1.0G 1.8G 35M 779M 2.3G
Swap: 0B 0B 0B
[root@master ~]#
五 修改内核参数
加载br_netfilter模块
[root@master ~]# modprobe br_netfilter
[root@master ~]#
启动相应的内核参数
[root@master ~]# 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
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@master ~]#
六 关闭防火墙
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@master ~]#
七 关闭SELINUX,然后重启虚拟机,查看是否配置成功
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disables/g' /etc/selinux/config
[root@master ~]# getenforce
Disabled //证明配置成功
[root@master ~]#
八 下面开始安装容器
首先配置镜像源,这里配置阿里的源
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@master ~]#
配置k8s的yum源
[root@master ~]# cat > /etc/yum.repos.d/kubernetes.repo <<EOF
> [kubernetes]
> name=Kubernetes
> baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=0
> repo_gpgcheck=0
> EOF
九 安装docker,可以看到我安装成功
[root@master ~]# yum -y install docker-ce-20.10.9-3.el7
启用Docker Cgroup控制组,用于限制进程的资源使用量,如CPU、内存
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "exec-opts": ["native.cgroupdriver=systemd"]
> }
> EOF
[root@master ~]#
启动Docker服务并设置随机自启
[root@master ~]# systemctl enable docker --now
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@master ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2024-07-21 10:00:40 CST; 14s ago
Docs: https://docs.docker.com
Main PID: 9560 (dockerd)
Tasks: 9
Memory: 36.1M
CGroup: /system.slice/docker.service
└─9560 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.157249911+08:00" level=info msg="sc...grpc
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.157288704+08:00" level=info msg="cc...grpc
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.157302940+08:00" level=info msg="Cl...grpc
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.192080502+08:00" level=info msg="Lo...rt."
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.301644123+08:00" level=info msg="De...ess"
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.364118562+08:00" level=info msg="Lo...ne."
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.391185512+08:00" level=info msg="Do...10.9
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.391418893+08:00" level=info msg="Da...ion"
7月 21 10:00:40 master systemd[1]: Started Docker Application Container Engine.
7月 21 10:00:40 master dockerd[9560]: time="2024-07-21T10:00:40.413819866+08:00" level=info msg="AP...ock"
Hint: Some lines were ellipsized, use -l to show in full.
[root@master ~]#
十一 安装cri-dockerd
下载cri-dockerd安装包
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm
安装cri-dockerd软件包
yum install -y cri-dockerd-0.3.4-3.el7.x86_64.rpm
修改
cri-docker.service
文件,在文件的
ExecStart
增加
pause
镜像下载地址为阿里云
[root@master ~]# vim /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
启动cri-docker
systemctl daemon-reload
systemctl enable --now cri-docker
十二 安装k8s
[root@master ~]# yum -y install kubeadm-1.28.2 kubelet-1.28.2 kubectl-1.28.2
kubelet启用Cgroup控制组,用于限制进程的资源使用量,如CPU、内存
[root@master ~]# tee > /etc/sysconfig/kubelet <<EOF
> KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
> EOF
[root@master ~]#
设置开机自启动
[root@master ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@master ~]#
十三 集群初始化 master节点上进行
在master节点查看集群所需镜像文件
[root@master ~]# kubeadm config images list
I0721 10:30:54.042956 11308 version.go:256] remote version is much newer: v1.30.3; falling back to: stable-1.28
registry.k8s.io/kube-apiserver:v1.28.12
registry.k8s.io/kube-controller-manager:v1.28.12
registry.k8s.io/kube-scheduler:v1.28.12
registry.k8s.io/kube-proxy:v1.28.12
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1
在master节点生成初始化集群的配置文件,修改yaml文件
root@master ~]# kubeadm config print init-defaults > kubeadm-config.yaml
[root@master ~]# vim kubeadm-config.yaml
通过配置文件初始化集群,成功截图
[root@master ~]# kubeadm init --config kubeadm-config.yaml --upload-certs
根据提示执行如下命令
[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
[root@master ~]#
如果需要在Node节点也可以管理集群,将Master节点
/root/.kube
目录拷贝到Node节点上
[root@master ~]# scp -r /root/.kube 192.168.243.4:/root
config 100% 5645 2.2MB/s 00:00
[root@master ~]# scp -r /root/.kube 192.168.243.6:/root
config 100% 5645 3.0MB/s 00:00
[root@master ~]#
加入节点
[root@node1 ~]# kubeadm join 192.168.243.5:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:b60e14de5142cdc62323c5beef983d26dcc17b68d62500af6e09326749ad08e9 --cri-socket=/var/run/cri-dockerd.sock
查看已加入的节点,可以发现node1 和node2节点都加进来了
[root@master ~]# kubectl get nodes
部署集群网络Calico
Calico 和 Flannel 是两种流行的 k8s 网络插件,它们都为集群中的 Pod 提供网络功能。然而,它们在实现方式和功能上有一些重要区别:
网络模型的区别:
Calico 使用 BGP(边界网关协议)作为其底层网络模型。它利用 BGP 为每个 Pod 分配一个唯一的 IP 地址,并在集群内部进行路由。Calico 支持网络策略,可以对流量进行精细控制,允许或拒绝特定的通信。
Flannel 则采用了一个简化的覆盖网络模型。它为每个节点分配一个 IP 地址子网,然后在这些子网之间建立覆盖网络。Flannel 将 Pod 的数据包封装到一个更大的网络数据包中,并在节点之间进行转发。Flannel 更注重简单和易用性,不提供与 Calico 类似的网络策略功能。
性能的区别:
由于 Calico 使用 BGP 进行路由,其性能通常优于 Flannel。Calico 可以实现直接的 Pod 到 Pod 通信,而无需在节点之间进行额外的封装和解封装操作。这使得 Calico 在大型或高度动态的集群中具有更好的性能。
Flannel 的覆盖网络模型会导致额外的封装和解封装开销,从而影响网络性能。对于较小的集群或对性能要求不高的场景,这可能并不是一个严重的问题。
master节点下载calico的ymal文件
[root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
--2024-07-21 13:14:30-- https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:234906 (229K) [text/plain]
正在保存至: “calico.yaml”
100%[=================================================================>] 234,906 90.3KB/s 用时 2.5s
2024-07-21 13:14:34 (90.3 KB/s) - 已保存 “calico.yaml” [234906/234906])
[root@master ~]#
创建calico网络
kubectl apply -f calico.yaml
查看是否为runing状态
查看节点是否为已读
这样k8s集群就搭建好了
(注意 拉去calico镜像的时候会失败,去网上下载callico的tar包,将镜像导入docker容器中就可以创建成功了 ,这三种镜像,三个节点都要导入这三种镜像,不知道怎么下载的留言,我转发给你们)
版权归原作者 m0_75022918 所有, 如有侵权,请联系我们删除。