搭建kubernetes集群(废弃版 失败了的案例)

1.检查是否具备安装环境

1.检查机器是否是Cgroup V2

stat -fc %T /sys/fs/cgroup/


[root@master ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs
出现这个说明是V2

For cgroup v2, the output is cgroup2fs.

For cgroup v1, the output is tmpfs.

2.查看机器是否内核为 5.8以上

uname -a

3.配置主机域名

vim /etc/hosts
192.168.181.100  cluster-endpoint
192.168.181.101  node-point1
192.168.181.102  node-point2
esc
:wq

保存配置

ping master

4.配置代理

vim /etc/profile
export http_proxy=http://192.168.33.229:7890
export https_proxy=http://192.168.33.229:7890
esc
:wq
source /etc/profile

5.更新软件包

yum  -y update

6.时间同步

kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。

企业中建议配置内部的时间同步服务器

systemctl start chronyd
systemctl enable chronyd
date

7. 禁用iptables和firewalld服务

 关闭firewalld服务

systemctl stop firewalld
systemctl disable firewalld

 关闭iptables服务

systemctl stop iptables
systemctl disable iptables

没有这个服务就不用管他了 

8.验证MAC地址和product_uuid对于每个节点都是唯一的

  • 您可以使用命令ip linkifconfig -a获取网络接口的MAC地址
  • 可以使用命令检查product_uuid sudo cat /sys/class/dmi/id/product_uuid

尽管某些虚拟机可能具有相同的值,但硬件设备很可能会具有唯一的地址。 Kubernetes使用这些值来唯一识别群集中的节点。如果这些值不是每个节点唯一的,则安装过程可能会失败

sudo cat /sys/class/dmi/id/product_uuid

9.检查所需的端口

这些需要的端口 需要开放才能使Kubernetes组件相互通信。 您可以使用NetCat之类的工具检查端口是否打开。例如:

nc 127.0.0.1 6443 -v

您使用的POD网络插件也可能需要打开某些端口。由于每个POD网络插件都不同,因此请参阅有关这些端口所需的插件的文档

10.禁用 selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

查看是否开启

getenforce

 

这样就是开启的

临时关闭

setenforce 0

 永久关闭

vim /etc/selinux/config

 将SELINUX=enforcing

改成 SELINUX=disabled

:wq 保存退出

要重新启动linux 生效 先不重启 一起重启

11.禁用 swap 分区

swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用

启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备

但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

官网说明 

vim /etc/fstab

 

把最后一行注掉 

wq 保存退出

想让他生效必须重新启动操作系统 ,但是我们最后再重启

12.修改 kubernetes 网络配置

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

复制进去

重新加载配置 

sudo sysctl --system

验证net.ipv4.ip_forward设置为1的with:

sysctl net.ipv4.ip_forward

13.加载网桥过滤模块

modprobe br_netfilter

验证查看网桥过滤模块是否加载成功

lsmod | grep br_netfilter

这样就是成功的

14.配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

 1 安装ipset和ipvsadm 

yum install ipset ipvsadm -y

2 添加需要加载的模块写入脚本文件

 mkdir /etc/sysconfig/modules -p
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

 内核 4.19+版本 nf_conntrack_ipv4 已改为 nf_conntrack ,4.18以下使用 nf_conntrack_ipv4即可

wq 保存退出

3 为脚本文件添加执行权限

chmod +x /etc/sysconfig/modules/ipvs.modules

4 执行脚本文件

/bin/bash /etc/sysconfig/modules/ipvs.modules

 5 查看对应的模块是否加载成功

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

15.安装容器运行时

kubernetes v1.32 已经废弃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 containerd.io
sudo systemctl enable --now  containerd
vim /etc/containerd/config.toml

找个空白位置放入 

还有把 disable=['cri'] 注释掉   #disable=['cri']

sudo systemctl restart containerd

重启一下服务器: 

reboot

16.检查 selinx 是不是 关闭状态 和 swap 分区 是不是关闭状态

 swap 都是 0 代表都关闭了的

上面两个命令

getenforce
free -m

2.安装kubernetes 集群必要组件

1.添加 kubernetes 仓库 

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

2.安装 kubelet kubeadm kubectl 

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

3.启动并开机自启kubelet 

sudo systemctl enable --now kubelet

4.集群初始化 上面的操作都是三台机器都执行 接下来操作只在master节点执行

1.初始化主节点

 还是需要自己导入镜像啊  

ctr -n k8s.io  images  pull registry.k8s.io/kube-apiserver:v1.32.2
ctr -n k8s.io  images  pull registry.k8s.io/kube-controller-manager:v1.32.2
ctr -n k8s.io  images  pull registry.k8s.io/kube-scheduler:v1.32.2
ctr -n k8s.io  images  pull registry.k8s.io/kube-proxy:v1.32.2
ctr -n k8s.io  images  pull registry.k8s.io/coredns/coredns:v1.11.3
ctr -n k8s.io  images  pull registry.k8s.io/pause:3.10
ctr -n k8s.io  images  pull registry.k8s.io/pause:3.8
ctr -n k8s.io  images  pull registry.k8s.io/etcd:3.5.16-0
kubeadm init \
--apiserver-advertise-address=192.168.181.100 \
--control-plane-endpoint=cluster-endpoint \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--image-repository registry.aliyuncs.com/google_containers

如果执行失败,重启虚拟机,就好了

终于啊 历经千辛万苦搭建完毕 主节点

太舒服了

 比较重要在初始化主节点后的要干的事情

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
        --discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1 \
        --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
        --discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1

2.创建必要文件

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

Kubeconfig文件admin.conf kubeadm init生成的 Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin 。小组kubeadm:cluster-admins 与内置cluster-admin簇簇绑定。不要与任何人共享admin.conf文件。

kubeadm init生成另一个kubeconfig文件super-admin.conf ,其中包含一个证书 Subject: O = system:masters, CN = kubernetes-super-admin . system:masters是一个绕开授权层(例如RBAC)的超级用户组。不要与任何人共享super-admin.conf文件。建议将文件移至安全位置。

看 为其他用户生成kubeconfig文件 关于如何使用kubeadm kubeconfig user为其他用户生成kubeconfig文件。

用的云服务器踩了个大坑,master一直init不起来,云服务器的公网ip默认没有绑定到网卡上,绑一个就init成功了,但是后面不知道还有没有问题,还是建议三台在一个子网里 

3.将从节点加入主节点 这句话 在从节点上面执行

kubeadm join master:6443 --token pjbire.qmj1voxzxobh6ujf \
        --discovery-token-ca-cert-hash sha256:b8e14d59b3ca2dee5b9542718d14189696bc2145b1cb9efaea31ee5dd2d367b1

3.安装POD网络附加组件

警告:

本节包含有关网络设置和部署订单的重要信息。在继续之前,请仔细阅读所有这些建议。

您必须部署 容器网络接口 (CNI)基于 Pod 网络插件,以便您的 Pod 可以相互通信。 在安装网络之前,集群 DNS(CoreDNS)将不会启动。

  • 注意您的POD网络不得与任何主机网络重叠:如果存在重叠,您可能会看到问题。 (如果您发现网络插件首选的POD网络与某些主机网络之间的碰撞,则应考虑使用合适的CIDR块,然后在kubeadm init期间使用它 --pod-network-cidr ,作为网络插件YAML的替换)。

  • 默认情况下, kubeadm设置了您的群集以使用和强制使用 RBAC (基于角色的访问控制)。确保您的POD网络插件支持RBAC,并且您用来部署它的任何清单也是如此。

  • 如果要使用IPv6-二堆或仅单堆IPv6网络 - 在群集中,请确保您的POD网络插件支持IPv6。 IPv6支持已在V0.6.0中添加到CNI中。

  • 笔记:
    Kubeadm应该是CNI不可知论,CNI提供商的验证不超出我们当前的E2E测试的范围。如果您发现与CNI插件相关的问题,则应在其各自的问题跟踪器中记录一张票,而不是Kubeadm或Kubernetes问题跟踪器。

    几个外部项目使用CNI提供Kubernetes POD网络,其中一些也支持网络策略

    查看实现的附加组件列表 Kubernetes网络模型

    请参考安装插件 有关Kubernetes支持的网络插件列表的无需阐明的页面。 您可以在 具有kubeconfig凭据的控制平面节点或节点:

    kubectl apply -f <add-on.yaml>
    
    笔记:
    只有几个CNI插件支持窗口。在添加Windows Worker节点时,可以找到更多详细信息和设置说明。

    您可以每个群集仅安装一个POD网络。

    安装了POD网络后,您可以通过检查Coredns Pod在输出中Running kubectl get pods --all-namespaces 。一旦Coredns Pod启动并运行,您可以通过加入节点来继续。

    如果您的网络不起作用或核心不在Running状态,请查看 故障排除指南 对于kubeadm 。

1.安装网络插件

kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel

插件只需要在master节点上面执行就可以了

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
ctr -n k8s.io  images  pull ghcr.io/flannel-io/flannel:v0.26.4
ctr -n k8s.io  images  pull ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
ctr -n k8s.io  images  pull ghcr.io/flannel-io/flannel:v0.26.4
kubectl apply -f ./kube-flannel.yml

重置 

sudo kubeadm reset -f
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

# 清理残留的 IPVS 规则(如果使用了 IPVS)
sudo ipvsadm -C

# 检查并删除 /etc/kubernetes 目录下的残留文件
sudo rm -rf /etc/kubernetes
# 查找占用端口 10250 的进程
sudo lsof -i :10250

# 根据输出的进程 ID(PID)停止进程
sudo kill -9 <PID>
# 清理网络配置
sudo ip link delete cni0
sudo ip link delete flannel.1  # 如果使用 Flannel 网络插件

sudo rm -rf /etc/cni /etc/kubernetes /var/lib/etcd /var/lib/kubelet

没有成功  还是有问题 但是 这个 值得参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值