0


使用docker搭建k8s,

一 首先准备三个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容器中就可以创建成功了 ,这三种镜像,三个节点都要导入这三种镜像,不知道怎么下载的留言,我转发给你们)


本文转载自: https://blog.csdn.net/m0_75022918/article/details/140583080
版权归原作者 m0_75022918 所有, 如有侵权,请联系我们删除。

“使用docker搭建k8s,”的评论:

还没有评论