Centos7 K8S 集群 - kubeadm搭建方式

机器准备

搭建环境是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.confroot@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.confroot@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.hqwc.cn/news/619662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode中调试C++程序,解读debug步骤

下面对几个调试的按键进行解释&#xff1a; 按钮1&#xff1a;运行/继续 F5&#xff0c;真正的一步一步运行。当有断点的时候&#xff0c;只会执行断点所在行语句和开头结尾两行语句。 按钮2&#xff1a;单步跳过(又叫逐过程) F10&#xff0c;按语句单步执行。当有函数时&#…

项目5-博客系统1(准备工作+博客列表+博客详情页)

1.创建项目 导入以下依赖 2.项目介绍 使⽤SSM框架实现⼀个简单的博客系统 共5个页面 2.1 前端页面展示 2.1.1 用户登录 2.1.2 博客发表页 2.1.3 博客编辑页 2.1.4 博客列表页 2.1.5博客详情页 2.2 功能描述: ⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 <<查看全⽂…

【学习笔记十四】EWM发货流程概述及相关配置

一、EWM发货流程与ERP集成配置 1.将凭证类型从 ERP 系统映射至 EWM ERP交货单凭证类型LF映射到EWM凭证类型OUTB 2.从 ERP 系统映射项目类型至 EWM ERP交货单凭证类型+ERP交货单项目类型TAN映射到EWM项目类型是ODLV 3.定义出库交货的参数文件 ①定义外向交货处理的凭证类型OUT…

科技人才的养成之路

引言 在当今科技行业蓬勃发展的背景下&#xff0c;对于高素质科技人才的需求日益增加。科技人才的培养不仅仅是为了满足市场需求&#xff0c;更是为了推动社会的科技创新和发展。正是这些科技人才&#xff0c;推动着科技的边界不断拓展&#xff0c;创造出各种令人瞩目的技术和…

OpenCV的查找命中或未命中

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9更多形态转换 下一篇:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 Hit-or-Miss 转换&#xff08;也称为 Hit-and-Miss 转…

构建第一个ArkTS应用之stateStyles:多态样式

Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式。这就是我们本章要介绍的内容stateStyles&#xff08;又称为&#xff1a;多态样式&#xff09;。 概述 stateStyles是属性方法&#xff0c;可以…

【Linux C | 多线程编程】线程同步 | 条件变量(万字详解)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-04-15 0…

【合合TextIn】智能文档处理系列—电子文档解析技术全格式解析

一、引言 在当今的数字化时代&#xff0c;电子文档已成为信息存储和交流的基石。从简单的文本文件到复杂的演示文档&#xff0c;各种格式的电子文档承载着丰富的知识与信息&#xff0c;支撑着教育、科研、商业和日常生活的各个方面。随着信息量的爆炸性增长&#xff0c;如何高…

2024年MathorCup数学应用挑战赛C题思路分析(妈妈杯)

2024年第十四届MathorCup数学应用挑战赛C题解析 文章目录 题目概览第一问&#xff1a;货量预测第二问&#xff1a;运输线路变化的预测第三问&#xff1a;单目标优化第四问&#xff1a;排班计划的优化 MATLAB代码框架货量预测人员排班 2024年的MathorCup数学应用挑战赛再次为我…

基于SpringBoot和Vue的企业客户管理系统

今天要和大家聊的是基于SpringBoot和Vue的企业客户管理系统 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f495;个人简介…

Spring框架第一篇(Spring概述与IOC思想)

文章目录 一、Spring概述二、Spring家族三、Spring Framework四、IOC思想五、IOC容器在Spring中的实现 一、Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。…

界面控件DevExpress WinForms/WPF v23.2 - 富文本编辑器支持内容控件

众所周知内容控件是交互式UI元素(文本字段、下拉列表、日期选择器)&#xff0c;用于在屏幕上输入和管理信息。内容控件通常在模板/表单中使用&#xff0c;以标准化文档格式和简化数据输入。DevExpress文字处理产品库&#xff08;Word Processing Document API、WinForm和WPF富文…