Centos7 K8S 集群 - kubeadm搭建方式

news2025/5/24 13:18:17

机器准备

搭建环境是centos7, 四核心4G内存四台机器

一个master节点,一个etcd,两台node

机器名称IP 地址
master192.168.1.127
node1192.168.1.129
node2192.168.1.130
node3192.168.1.131

机器时间同步

各节点时间要求精确同步,可以直接联网的话,使用

systemctl start chronyd.service
systemctl enable chronyd.service

or

ntpdate -u cn.pool.ntp.org

节点的DNS解析

设置主机名

hostnamectl set-hostname master/node01/node02/node03....

在每台机器上向 /etc/hosts文件添加

cat <<EOF >>/etc/hosts 
192.168.1.127 master 
192.168.1.129 node01 
192.168.1.130 node02
192.168.1.131 node03
EOF

每台机器上关闭firewalld,禁用swap设备,关闭selinux

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

直接修改文件

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

关闭swap设备

swapoff -a
sed -i 's /.* swap.*/#&/' /etc/fstab

or 直接修改文件(/etc/fstab)

注释这一行
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

查看swap是否被正确关闭

free -m

每台机器设置iptables

cat >/etc/sysctl.d/k8s.conf <<EOF 
net.bridge.bridge-nf-call-ip6tables =1 
net.bridge.bridge-nf-call-iptables =1 
EOF
sysctl --system

设置国内源

yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache

给每台机器安装docker

$ yum -y install wget
# 添加docker yum源
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
# 安装
$ yum -y install docker-ce
# 设置开机启动
$ systemctl enable docker
# 启动docker
$ systemctl start docker

集群搭建

每台机器都安装kubeadm、kubelet、kubectl

这三个工具的国内镜像在阿里云上有,进去对应自己的机器版本选链接,配置仓库如下:

cat <<EOF >/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

配置过后安装

yum install -y kubelet kubeadm kubectl

安装过程中,可能由于Google和阿里的同步问题,导致gpgcheck不通过,可以使用

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0 --nogpgcheck

设置kubelet开机自启动

systemctl enable kubelet

注意这里不用启动kubelet,因为master还没有初始化,日志会提示缺少yaml文件,kubelet无法启动

Master节点的初始化

指令

  • kubeadm init (master节点初始化)
  • kubeadm join (node节点加入集群)
  • kubeadm reset (消除执行过后的init or join 的影响)

初始化

kubeadm init \
  --apiserver-advertise-address=192.168.1.127 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.17.0 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=swap
  • apiserver地址即Master本机地址
  • pod-network-cidr即pod网络对应的网段,因为kubernetes自身没有设计pod网络,所以需要其余的网络插件,常用的是flannel,这个地址是flannel默认的

正常情况

可以看到以下信息
在这里插入图片描述

 kubeadm join 192.168.1.127:6443 --token 2yxrh1.eet93u5rgkanl5vz \
    --discovery-token-ca-cert-hash sha256:238315c75883d5abe8f8e898acd68a2618fce3053f383cefa456db5f7aaa05f1
  • 这是其他机器访问的凭证

失败情况及其解决方法

错误查询手段

systemctl status kubelet

不过这是大概率是没有正常运行的,前面也提到了,只有正常init生成config的yaml文件,kubelet才能running
然后查看kubelet运行日志

journalctl -xeu kubelet

错误解决

swap没有禁用,free -m 命令查看

selinux没有禁用

docker和kubernetes启动参数cgroup-driver不同

通过 docker info 查看 cgroup-driver参数

同时修改 /etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}

systemctl restart docker
systemctl status docker

curl -sSL http://localhost:10248/healthz‘ failed with error: Get “http://loc

怀疑是内核参数的问题,修改内核

root@master1:~# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

root@master1:~# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
root@master1:~# echo 'net.bridge.bridge-nf-call-ip6tables = 0 ' >> /etc/sysctl.conf
root@master1:~# echo 'net.bridge.bridge-nf-call-iptables = 1 ' >> /etc/sysctl.conf
root@master1:~# echo 'net.bridge.bridge-nf-call-arptables = 0' >> /etc/sysctl.conf

root@master1:~# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 0

失败后通过 kubeadm reset 命令,删除不必要的文件

初始化成功的提示

你已经成功初始化了master
为了使用集群,你需要为机器的用户提供证书
你现在需要取安装集群pod网络插件
之后你才可以将其余节点加入集群

为机器用户提供证书

kubernetes提供双向认证机制,只有用户名下有其CA证书文件才可以对集群进行操作
模版(对非root用户)

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

设置root用户

mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config

安装网络插件

拉取flannel镜像

docker pull quay.io/coreos/flannel:v0.11.0-amd64

部署flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Node节点加入集群

启动转发功能

sysctl -w net.ipv4.ip_forward=1

通过在Node机器执行集群凭证,就可以加入集群

 kubeadm join 192.168.1.128:6443 --token 2yxrh1.eet93u5rgkanl5vz \
    --discovery-token-ca-cert-hash sha256:238315c75883d5abe8f8e898acd68a2618fce3053f383cefa456db5f7aaa05f1

如果tooken 和 CA证书过期了,可以在Master节点用以下命令

# 生成 token
kubeadm token create

# CA证书生成
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# token 查询
kubeadm token list

加入集群的节点会使用Master设置的源,下载flannel、kube-proxy、coredns、pause四个镜像(如果无法正常下载,可以将这些镜像从master scp到node节点docker load即可)

可使用 docker images 查看

root@node01 ~]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED        SIZE
rancher/mirrored-flannelcni-flannel                  v0.20.2   b5c6c9203f83   8 days ago     59.6MB
rancher/mirrored-flannelcni-flannel-cni-plugin       v1.1.0    fcecffc7ad4a   6 months ago   8.09MB
registry.aliyuncs.com/google_containers/kube-proxy   v1.17.0   7d54289267dc   3 years ago    116MB
registry.aliyuncs.com/google_containers/coredns      1.6.5     70f311871ae1   3 years ago    41.6MB
registry.aliyuncs.com/google_containers/pause        3.1       da86e6ba6ca1   4 years ago    742kB

查看集群状态

主节点执行

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   89d    v1.17.0
node01   Ready    <none>   7d1h   v1.17.0
node02   Ready    <none>   7d1h   v1.17.0
node03   Ready    <none>   5h3m   v1.17.0

参考资料

  • centos7上用kubeadm搭建kubenetes集群(详细+踩坑记录)
  • 本机虚拟机centos7环境搭建k8s集群-实践篇
  • The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed with error: Get “http://loc
  • k8s node节点重启docker后,所有该节点的容器无法运行
  • kubeadm join 使用的 token 过期之后,如何加入集群
  • K8s无法删除状态为terminating的pod解决方法
  • kubernetes node节点加入容器 [ERROR FileContent–proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1593442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web自动化测试系列-selenium xpath定位方法详解(六)

1.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 &#xff0c;所以 &#xff0c;我们定位html页面元素时也会用到xpath这种方法 。 2.xpath定位方式 xpath主要通过以下四种方法定位 &#…

【第二十九篇】BurpSuite杂项综合

文章目录 Intruder模块URL编码Grep检索提取logger日志模块Intruder模块URL编码 假设我们需要对GET请求包中的URL目录进行爆破FUZZ: example.com/xxxx(文件名)Intruder模块会自动对我们的文件名字典进行URL编码 例如payload为1.txt时,burp对其进行URL编码并连接到example.c…

VMware安装Red Hat7.9

1、下载Red Hat Enterprise Linux7.9版本 【百度网盘下载】 链接&#xff1a;https://pan.baidu.com/s/1567NfZRF48PBXfUqxumvDA 提取码&#xff1a;bm7u 2、在虚拟机中创建Red Hat7.9 【点击创建虚拟机】 【自定义高级】 【选择光盘映像安装】 全名自定义即可 【虚拟机命…

Windows环境下删除MySQL

文章目录 一、关闭MySQL服务1、winR打开运行&#xff0c;输入services.msc回车2、服务里找到MySQL并停止 二、卸载MySQL软件1、打开控制模板--卸载程序--卸载MySQL相关的所有组件 三、删除MySQL在物理硬盘上的所有文件1、删除MySQL的安装目录&#xff08;默认在C盘下的Program …

【截至2023年底】语言模型的发展

什么是大语言模型LLM&#xff1f;ChatGPT、LLAMA各自有什么优势&#xff1f; from&#xff1a; https://www.youtube.com/watch?vt6qBKPubEEo github&#xff1a; https://github.com/Mooler0410/LLMsPracticalGuide 来自这篇survey&#xff0c;但据说还在更新&#xff0c;到…

王道汽车4S企业管理系统 SQL注入漏洞复现

0x01 产品简介 王道汽车4S企业管理系统(以下简称“王道4S系统”)是一套专门为汽车销售和维修服务企业开发的管理软件。该系统是博士德软件公司集10余年汽车行业管理软件研发经验之大成,精心打造的最新一代汽车4S企业管理解决方案。 0x02 漏洞概述 王道汽车4S企业管理系统…

etcd相关知识整理归纳 —— 筑梦之路

什么是etcd? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;unix的“/etc”文件…

【ARM 裸机】汇编 led 驱动之编译程序

编译程序这一节分为四个步骤&#xff1a; 1、将 .s .c 文件变成 .o 文件&#xff0c;使用 arm-linux-gnueabihf-gcc&#xff1b; arm-linux-gnueabihf-gcc -g -c leds.s -o led.o上述命令就是将 leds.s 编译为 led.o&#xff0c;其中“ -g ”选项是产生调试信息&#xff0c;G…

lua学习笔记19(面相对象学习的一点总结)

print("*****************************面相对象总结*******************************") object{} --实例化方法 function object:new()local obj{}self.__indexselfsetmetatable(obj,self)return obj end-------------------------如何new一个对象 function object:…

Redis入门(常用命令、spring-boot-starter-data-redis)

Redis redis是一个基于内存的key-value的结构数据库 启动&#xff1a; redis-server.exe redis.windows.conf 客户端链接&#xff1a;redis-cli.exe [-h 目标ip] [-p 端口] [-a 密码] 修改链接密码&#xff1a; 在redis.windows.conf中的requirepass 123456 常用的数据类…

事务隔离级别的无锁实现方式 -- MVCC

MVCC的全称是Multiversion Concurrency Control(多版本并发控制器)&#xff0c;是一种事务隔离级别的无锁的实现方式&#xff0c;用于提高事务的并发性能&#xff0c;即事务隔离级别的一种底层实现方式。 在了解MVCC之前&#xff0c;我们先来回顾一些简单的知识点&#xff1a;…

leetCode刷题 27. 移除元素

目录 1.思路&#xff1a; 2.解题方法&#xff1a; 3.复杂度&#xff1a; 4.Code 题目&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须…

商城系统必备营销功能——分销裂变

电商流量红利已经过去&#xff0c;现在的电商营销&#xff0c;重点在于私域用户&#xff0c;在于客户资源裂变。人们通过分销裂变挖掘客户资源&#xff0c;能降低获客成本&#xff0c;对于需要解决成本困扰的企业来说&#xff0c;确实是个不错的选择。今天&#xff0c;我们就来…

FFmpeg: 自实现ijkplayer播放器--09音频重采样输出

文章目录 流程图音视设备输出回调函数重采样写入音频流因SDL输出音频采样格式为S16(一个采样点2个字节),而音频解码后采样格式通常为float planar(一个采样点4个字节),故需要重采样 重采样的条件:音频解码后的任意一个参数和需要的参数不同时,进行重采样,参数为: 采样格…

Nginx健康检查

Nginx健康检查nginx_upstream_check_module nginx健康检查介绍: ​ 主动健康检查&#xff0c;nignx定时主动地去ping后端的服务列表&#xff0c;当发现某服务出现异常时&#xff0c;把该服务从健康列表中移除&#xff0c;当发现某服务恢复时&#xff0c;又能够将该服务加回健…

Java并发--内存结构图及线程安全

内存结构图 内存-> (开辟的数组) -> (方法区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;本地方法栈) 堆&#xff1a;几乎所有的对象实例都在这里分配内存。堆中每个对象的头信息都标属着他属于哪个类。 方法区它用于存储已被虚拟机加载的类型信息…

牛客_左右最值最大差_C++题解

原题链接&#xff1a;牛客 题目缩写&#xff1a;给你一个数组&#xff0c;由你来进行一个切分&#xff0c;分为两份&#xff0c;每份至少有1个元素&#xff1b;你分出来的这两个区间中各自有一个最大值&#xff0c;两者之差再求绝对值就是答案&#xff0c;这个答案越大越好&am…

认识异常(2)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

【Linux系统】操作备忘录

Linux命令 打开终端的快捷键&#xff1a;Ctrl Alt t 退出终端的命令&#xff1a;exit 终端命令行复制/粘贴的快捷键 &#xff1a;Ctrl Shift c / v 对于所有不太熟悉的命令&#xff0c;都可以在终端输入 命令名称 --help 来查看具体用法。例如&#xff1a; 文件和目录…

电池电量监测系统设计 单片机+LabVIEW+Matlab+Protues+Keil程序

目录 前言 提供 软件 系统展示 1.放电试验及其处理 2.硬件系统原理图 3.下位机程序 4.显示 5.上位机界面 6.上位机程序 7.文档 资料下载地址&#xff1a;电池电量监测系统设计 单片机LabVIEWMatlabProtuesKeil程序 前言 这套系统首先使用Matlab分析获得了电压…