Centos7 K8S 集群 - kubeadm搭建方式

机器准备

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

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

机器名称IP 地址
master192.168.1.128
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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在极狐GitLab 启用依赖代理功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

VUE3 + Elementui-Plus 之 树形组件el-tree 一键展开(收起);一键全选(不全选)

需求&#xff1a; 产品要求权限树形结构添加外部复选框进行全部展开或收起&#xff1b;全选或不全选。 实现步骤&#xff1a; tree组件部分&#xff1a; <div class"role-handle"><div>权限选择(可多选)</div><div><el-checkbox v-mode…

Harmony鸿蒙南向驱动开发-MIPI DSI

功能简介 DSI&#xff08;Display Serial Interface&#xff09;是由移动行业处理器接口联盟&#xff08;Mobile Industry Processor Interface (MIPI) Alliance&#xff09;制定的规范&#xff0c;旨在降低移动设备中显示控制器的成本。它以串行的方式发送像素数据或指令给外…

pytest常用钩子函数

1、什么叫钩子函数 在Pytest框架中&#xff0c;钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码&#xff0c;以实现特定的行为&#xff0c;操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…

Android 四大组件启动

service: startService启动过程分析 - Gityuan博客 | 袁辉辉的技术博客 在整个startService过程&#xff0c;从进程角度看服务启动过程 Process A进程&#xff1a;是指调用startService命令所在的进程&#xff0c;也就是启动服务的发起端进程&#xff0c;比如点击桌面App图标…

Linux:自动化构建 - make

Linux&#xff1a;自动化构建 - make make基本概念makefile语法变量PHONY make基本概念 make是一个用于自动化编译和构建过程的工具。它主要用于管理大型软件项目的构建过程,帮助开发者更高效地编译和部署代码&#xff0c;并减少人为错误的发生&#xff0c;这使得软件的编译和…

Linux应用实战之网络服务器(五) 登录服务器初步调试

0、前言 准备做一个Linux网络服务器应用实战&#xff0c;通过网页和运行在Linux下的服务器程序通信&#xff0c;这是第五篇&#xff0c;编写服务器程序&#xff0c;与编写好的登录界面进行初步调试。 1、服务器编程 1.1 TCP服务器编程 在之前的登录界面中&#xff0c;我们指…

使用Docker部署开源项目FreeGPT35来免费调用ChatGPT3.5 API

Vercel部署FreeGPT35有严重限制&#xff0c;玩玩就好&#xff0c;真用还是得docker。 限制原因: Vercel的流式响应并不是一开始写流&#xff0c;客户端就能立刻收到响应流&#xff0c;而是先写到一个缓冲区&#xff0c;当流关闭才一股脑的流式响应回来(不是实时流) 因此导致: …

创意解决方案:如何将作品集视频集中于一个二维码或链接中?

引言&#xff1a;随着面试环节的进一步数字化&#xff0c;展示自己的作品集成为了求职过程中的重要一环。但除了使用传统的方式&#xff0c;如百度网盘或直接发送多个视频链接&#xff0c;有没有更便捷的方法将作品集的多个视频放在一个链接中呢? 本文将介绍一种创意解决方案…

系统监控-硬件资源-内存篇01-整体思路-性能指标-性能工具概览-Buffer/Cache

参考来源&#xff1a;性能优化实战 内存的功能主要用来存储系统和应用程序的指令、数据、缓存等。 内存性能分析整体思路 当你看到系统的剩余内存很低时&#xff0c;是不是就说明&#xff0c;进程一定不能申请分配新内存了呢&#xff1f;当然不是&#xff0c;因为进程可以使…

5.2 配置静态路由

5.2.1 实验1&#xff1a;配置IPv4静态路由 1、实验目的 通过本实验可以掌握&#xff1a; 配置带下一跳地址的IPv4静态路由的方法。配置带送出接口的IPv4静态路由的方法。配置总结IPv4静态路由的方法。配置浮动IPv4静态路由的方法。代理 ARP的作用。路由表的含义。扩展ping命…

数据仓库与数据挖掘(第三版)陈文伟思维导图1-5章作业

第一章 概述 8.基于数据仓库的决策支持系统与传统决策支持系统有哪些区别&#xff1f; 决策支持系统经历了4个阶段。 1.基本决策支持系统 是在运筹学单模型辅助决策的基础上发展起来的&#xff0c;以模型库系统为核心&#xff0c;以多模型和数据库的组合形成方案辅助决策。 它…

hal库实现串口通信——阻塞式 API

1STM32CobeMX设置 设置时钟源 rcc设置为外部时钟High Speed Clock (HSE)//设置为如图 再将其设置为72MHz 设置串口引脚为异步通信 设置波特率等 设置波特率范围提示点击波特率再点击图中的 我的设置 再打开中断 即可生成代码//省略项目设置 2代码设置 函数 HAL_UART_Trans…

探索数据中台的力量:企业数据资产管理的未来_光点科技

随着数字化时代的到来&#xff0c;"数据中台"这一概念逐渐为人所知&#xff0c;并迅速成为推动企业数据驱动转型的重要基石。数据中台不仅是集数据接入、管理、分析于一身的综合平台&#xff0c;更是企业实现数据资源集中管理、分析决策和业务创新的核心支撑。 一、数…

VRRP虚拟路由实验(华为)

思科设备参考&#xff1a;VRRP虚拟路由实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种网络协议&#xff0c;用于实现路由器冗余&#xff0c;提高网络可靠性和容错能力。VRRP允许多台路由器…

如何提高旋转花键运行稳定性?

现代化精密仪器设备中&#xff0c;精密仪器的稳定工作性能对于生产效率和产品质量至关重要&#xff0c;运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分&#xff0c;其稳定性也是直接影响到机械装配的质量和使用寿命&#xff0c;那么我们应该如何提升旋转…

uniapp开发小程序,通过缓存的方式,判断页面只弹出一次弹窗通知

一、需求 在使用uniapp开发小程序时&#xff0c;在【个人中心页面】-点击【我的推广】按钮进入详情页面时&#xff0c;要求出现【会员协议通知】的弹窗&#xff0c;并且有【确认和取消】两个按钮&#xff0c; 如果点了【取消】按钮&#xff0c;直接退出该页面&#xff0c;并且…

如何在极狐GitLab 使用Docker 仓库功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…

Github Benefits 学生认证/学生包 新版申请指南

本教程适用于2024年之后的Github学生认证申请&#xff0c;因为现在的认证流程改变了很多&#xff0c;所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings&#xff0c;找到Add email address…

官网下载IDE插件并导入IDE

官网下载IDEA插件并导入IDEA 1. 下载插件2. 导入插件 1. 下载插件 地址&#xff1a;https://plugins.jetbrains.com/plugin/21068-codearts-snap/versions 说明&#xff1a;本次演示以IDEA软件为例 操作&#xff1a; 等待下载完成 2. 导入插件 点击File->setting->Pl…