二进制部署高可用Kubernetes集群 (成功) 看报错

news2024/12/23 11:23:04

SUMMARY

参考网上的教程和网课,进行二进制高可用Kubernetes部署。并对整个过程和报错进行简单记录。

架构图

设备规划

序号名字功能VMNET 1备注 + 1备注 + 2备注 +3 备注 + 4备注 +5
0orgin界面192.168.164.10haproxykeepalived192.168.164.200
1reporsitory仓库192.168.164.16yum 仓库registoryhaproxykeepalived
2master01H-K8S-1192.168.164.11kube-apicontrollerscheduleretcd
3master02H-K8S-2192.168.164.12kube-apicontrollerscheduleretcd
4master03H-K8S-3192.168.164.13kube-apicontrollerscheduleretcd
5node04H-K8S-1192.168.164.14kube-proxykubeletdocker
6node05H-K8S-2192.168.164.15kube-proxykubeletdocker
7node07H-K8S-3192.168.164.17kube-proxykubeletdocker

软件版本

软件名称版本备注
CentOS76.3.3-1.el7.elrepo.x86_64
kubernetesv1.22.0非最新版本
etcdv3.4.13非最新版本
calicov3.19.4
corednsv1.8.4
containerd1.6.1
runc1.1.0

Ansible module summary

# 查看组件如何使用
ansible-doc <mode>

 在部署过程中,经常使用的ansible的重要组件或者模块

modeimport optiondescriptionremark
copysrc
dest
mode
复制文件到远程主机
unarchivesrc
dest
本地压缩包解压到远程主机
filepath
owner
mode
state
对远程文件的增删改
systemdenabled
daemon_reload
state
启动或者停止程序
shell 执行shell命令
stat debug when判断状态
scripts执行shell脚本
yumstate程序安装卸载

folders or directories summary

总结相关重要文件夹的功能和路径

文件夹描述可能存放的文件备注
/etc/etcdetcd主配置文件夹etcd.conf
/etc/etcd/ssletcd证书文件夹ca-key.pem
ca.pem
etcd-key.pem
etcd.pem
/var/lib/etcdetcd存放数据的文件夹
/etc/kubernetes/kubernetes主配置文件夹,
含有组件配置信息
kube-apiserver.conf
kube-controller-manager.conf
kube-controller-manager.kubeconfig
kubelet-bootstrap.kubeconfig
kubelet.json
kubelet.kubeconfig
kube-proxy.kubeconfig
kube-proxy.yaml
kube-scheduler.conf
kube-scheduler.kubeconfig
假如有必要,根据组件进行拆分,再创建一层文件夹
/etc/kubernetes/sslK8S证书文件夹admin-key.pem
admin.pem
ca-key.pem
ca.pem
kube-apiserver-key.pem
kube-apiserver.pem
kube-controller-manager-key.pem
kube-controller-manager.pem
kubelet-client-2023-05-19-08-17-28.pem
kubelet-client-current.pem -> /etc/kubernetes/ssl/kubelet-client-2023-05-19-08-17-28.pem
kubelet.crt
kubelet.key
kube-proxy-key.pem
kube-proxy.pem
kube-scheduler-key.pem
kube-scheduler.pem
假如有必要,根据组件进行拆分,再创建一层文件夹
/var/log/kubernetesk8s的日志存放路径相关文件在部署服务的时候需要提前创建好
/usr/lib/systemd/systemsystemd管理service文件夹需留意个组件启动文件的配置项目,参数不能缺少
/usr/local/binK8S + ETCD 各主要程序执行存放路径
/etc/containerdcontainerd的配置地址

常用命令

tail -20 /var/log/messages

cat /var/log/messages|grep kube-apiserver|grep -i error

systemctl status <service>.service -l

journalctl -xe


systemctl daemon-reload && systemctl start etcd.service --now  && systemctl status etcd

systemctl daemon-reload && systemctl restart etcd.service --now  && systemctl status etcd

systemctl daemon-reload && systemctl enable etcd.service --now  && systemctl status etcd

失败经历第一次

(48条消息) Kubernetes 二进制部署高可用集群 失败 看报错_HJJ-DREAMER的博客-CSDN博客

HAproxy + Keepalived (docker)

HAproxy

HAproxy success output

这个页面成功显示的前置条件是kube-controller-manager启动成功,否则无法显示,会报connection refuse的网页无法访问的错误。但后期二次复现报错并没有成功产生依赖关联。

第一次error: 监控页面无法显示,controller启动成功后,才成功访问。

后期二次复现,发现不存在该依赖关系:

keepalived

keepalived success output 

注意:

假如keepalived没办法成功启动,也就没办法提供虚拟IP,则进行kubectl二进制部署的时候会产生connection rejection 链接失败等错误。所以必须先有一台服务器可成功启动keepalived,成功提供虚拟IP,才可实现kubectl的部署。

后期所有二进制部署,只要涉及虚拟IP的前置都需要成功启动虚拟IP,从而方便部署测试。

error: 容器一直处于restart无法提供对外服务

 更换网上教程容器启动成功

如何使用第三方部署的官方容器

# 查看镜像信息
docker inspect 

测试高级进阶技能系列 - Docker - 随笔分类 - 小菠萝测试笔记 - 博客园 (cnblogs.com)

1、Docker学习大纲_哔哩哔哩_bilibili

H-ETCD-CLUSTER

error:--etcd-servers must be specified

 May 18 21:39:49 master01 kube-apiserver: Error: [--etcd-servers must be specified, service-account-issuer is a required flag, --service-account-signing-key-file and --service-account-issuer are required flags]

目前没有解决

test command

# 健康检测
ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table \
--cacert=/etc/etcd/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem \
--key=/etc/etcd/ssl/etcd-key.pem \
--endpoints=https://192.168.164.11:2379,https://192.168.164.12:2379,https://192.168.164.13:2379 endpoint health

# 性能检测
ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table \
--cacert=/etc/etcd/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem \
--key=/etc/etcd/ssl/etcd-key.pem \
--endpoints=https://192.168.164.11:2379,https://192.168.164.12:2379,https://192.168.164.13:2379 check perf
# 成员列表
ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table \
--cacert=/etc/etcd/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem \
--key=/etc/etcd/ssl/etcd-key.pem \
--endpoints=https://192.168.164.11:2379,https://192.168.164.12:2379,https://192.168.164.13:2379 member list

# 成员分工
ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table \
--cacert=/etc/etcd/ssl/ca.pem --cert=/etc/etcd/ssl/etcd.pem \
--key=/etc/etcd/ssl/etcd-key.pem \
--endpoints=https://192.168.164.11:2379,https://192.168.164.12:2379,https://192.168.164.13:2379 endpoint status

success output

debug命令

tail -20 /var/log/messages

# cat /var/log/messages|grep kube-apiserver|grep -i error

H-KUBERNETES-CLUSTER

success output

最终输出的结果 

kube-apiserver

success output

error: issuer URL must use https scheme, got: api

kube-apiserver: E0518 22:47:16.373344    1747 instance.go:380] Could not construct prendpoints. Endpoints will not be enabled. Error: issuer URL must use https scheme, got: api

 解决方案Kubernetes-问题 - 麦恒 - 博客园 (cnblogs.com)

修改kube-apiserver.conf的配置文件,添加配置

--service-account-issuer=https://kubernetes.default.svc.cluster.local \

error:windows 复杂资料到 linux 虚拟机 产生变量缺失

 (48条消息) Kubernetes 二进制部署高可用集群 失败 看报错_HJJ-DREAMER的博客-CSDN博客

与以上失败所记录的内容不同,当时即使写了参数也没创建成功,所以,最终很可能是openssl创建的证书缺少参数导致创建失败。又或者相关的service文件没写正确导致。

kubectl 二进制部署

success output

error: dial tcp 192.168.164.200:6443: connect: no route to host

 报错原因是没有创建haproxy和keepalived 这个虚拟IP地址,导致在创建kubectl的时候没有找到这个主机,所以配置kubectl时候,高可用的负载均衡服务必须启动起来。

如何获取haproxy的配置文件

在centos上安装haproxy,随后搜索haproxy.cfg文件,接着在/etc/haproxy下获取

yum -y install haproxy keepalived

find / -name haproxy.cfg
cat /etc/haproxy/haproxy.cfg

find / -name keepalived.conf
cat /etc/keepalived/keepalived.conf

error: failed to create clusterrolebinding: clusterrolebindings.rbac.authorization.k8s.io "kube-apiserver:kubelet-apis" already exists

 因为多次创建rolebing导致,系统已经有了,需要执行delete操作重新创建。

# delete
kubectl delete clusterrolebinding kube-apiserver:kubelet-apis
# create
kubectl create clusterrolebinding kube-apiserver:kubelet-apis \
> --clusterrole=system:kubelet-api-admin --user kubernetes --kubeconfig=/root/.kube/config
clusterrolebinding.rbac.authorization.k8s.io/kube-apiserver:kubelet-apis created

error:connection refused

dial tcp :6443:error: failed to create clusterrolebinding: Post :6443/apis/rbac.authorization.k8s.io/v1/clusterrolebindings?fieldManager=kubectl-create": connect: connection refused

 网络不通,前端的反向代理服务没有起来

需要成功启动haproxy才能执行成功, 需要关闭防火墙和selinux 

controller-manager install

success output

error: 一切配置都正确,日志也没报错,但是服务没有起来是为什么?

后期二次复现,发现真实的报错原因如下图:

error: unknown flag: --horizontal-pod-autoscaler-use-rest-clients

如何发现这个报错?

# 手动停止服务
systemctl disable --now kube-controller-manager

# 查阅systemd.service的相关配置文件,手动执行程序启动命令
/usr/local/bin/kube-controller-manager --port=0 \
  --secure-port=10257 \
  --bind-address=127.0.0.1 \
  --kubeconfig=/etc/kubernetes/kube-controller-manager.kubeconfig \
  --service-cluster-ip-range=10.96.0.0/16 \
  --cluster-name=kubernetes \
  --cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem \
  --cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem \
  --allocate-node-cidrs=true \
  --cluster-cidr=10.244.0.0/16 \
  --experimental-cluster-signing-duration=87600h \
  --root-ca-file=/etc/kubernetes/ssl/ca.pem \
  --service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem \
  --leader-elect=true \
  --feature-gates=RotateKubeletServerCertificate=true \
  --controllers=*,bootstrapsigner,tokencleaner \
  --horizontal-pod-autoscaler-sync-period=10s \
  --tls-cert-file=/etc/kubernetes/ssl/kube-controller-manager.pem \
  --tls-private-key-file=/etc/kubernetes/ssl/kube-controller-manager-key.pem \
  --use-service-account-credentials=true \
  --alsologtostderr=true \
  --logtostderr=false \
  --log-dir=/var/log/kubernetes \
  --v=2

 在启动配置文件,删除这个配置即可。

error: address already in use

failed to create listener: failed to listen on 127.0.0.1:10257: listen tcp 127.0.0.1:10257: bind: address already in use

 当时debug 报错测试的时候没有停止服务,所以产生2个程序抢夺相同端口,从而报错

error:tls: private key does not match public key

重新部署服务的时候,更新了证书,证书更新后没同步到现在程序或者其他节点,需要重头部署配置。

error invalid port value 10252: only zero is allowed

5月 19 08:06:38 master01 kube-controller-manager[100922]: invalid port value 10252: only zero is allowed

 启动服务时候,1.22.0的kube-controller-manager指定--port参数为0,写其他则报错,因为K8S迭代很快,不同的版本,启动配置文件不同,需要根据版本修改启动配置。

error getting node err =node master01 not found

控制器没有启动导致报错:没有控制器启动,无法使用kubectl获取资源相关资源,无法执行kubectl get <resources>。

kube-controller-manager启动成功后,报错消失.kube-controller-manager启动成功后,会影响到kubelet,所以需要重启kubelet的服务。

error: coredns 容器status状态一直处于 no ready

 排除防火墙策略没关闭

 关闭防火墙策略后,容器成功启动

error: master01主节点 not ready

systemctl list-unit-files | grep kube
systemctl enable --now kube-controller-manager.service
systemctl enable --now kubelet.service

kubelet

error: failed to find any PEM data in certificate input

systemctl status kubelet.service -l

err="failed to run Kubelet: failed to initialize client certificate manager: could not convert data from \"/etc/kubernetes/ssl/kubelet-client-current.pem\" into cert/key pair: tls: failed to find any PEM data in certificate input"

cat /etc/kubernetes/ssl/kubelet-client-current.pem

网页链接参考阅读

01-集群部署_集群环境准备_哔哩哔哩_bilibili

k8s高可用部署:keepalived + haproxy_Kubernetes中文社区

Docker 安装Haproxy - 简书 (jianshu.com)

(48条消息) 【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署_温殿飞的博客-CSDN博客

kubernetes高可用集群安装(二进制安装、v1.20.2版)_51CTO博客_kubernetes二进制安装部署

二进制安装Kubernetes(k8s) v1.25.0 IPv4/IPv6双栈-阿里云开发者社区

HAProxy - The Reliable, High Perf. TCP/HTTP Load Balancer

docker run | Docker Documentation   Docker run 命令 | 菜鸟教程

Dockerfile · master · aleks / haproxy18-centos · GitLab

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

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

相关文章

〖大学生·技术人必学的职业规划白宝书 - 优质简历篇②〗- 面试官所青睐的优秀简历是什么样的?

历时18个月&#xff0c;采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴&#xff0c;该专栏有你想要的职业规划、简历、面试的答案。说明&#xff1a;该文属于 大学生技术人职业规划白宝书 专栏&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

【OpenCv • c++】形态学技术操作 —— 顶帽操作与黑帽操作

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…

Ae 入门系列之十一:抠像

抠像&#xff0c;英文为 Keying&#xff0c;故也被称为“键控”。在早期电视节目制作中&#xff0c;意思是吸取画面中的某一颜色并使得此颜色相关区域成为透明&#xff0c;从而保留所需要的内容。 我们通常称要抠出&#xff08;要保留&#xff09;的主体为前景 Foreground&…

进程间通信-管道

文章目录 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信分类 2. 管道2.1 什么是管道2.2 站在文件描述符角度-深度理解管道2.2.1 具体通信的过程 2.3 匿名管道2.4 代码实现 3. 进程控制4. 管道读写规则5. 管道特点6. 命名管道6.1 创建一个命名管道6.2 代码实现 1. 进程间通…

索引的底层数据结构,讲讲B+ 树,B树

B 树的变种。 B树&#xff1a;所有节点&#xff08;非叶子节点 叶子节点&#xff09;&#xff0c;都存储真正的行数据&#xff0c;所以一个数据页能存储的数量&#xff0c;相较于 B 树&#xff0c;就少很多。 B 树&#xff1a; ● 只有叶子节点存储具体的行数据&#xff0c;非…

【进阶】C 语言表驱动法编程原理与实践

数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条&#xff0c;正确的算法就不言自明。编程的核心是数据结构&#xff0c;而不是算法。——Rob Pike 目录 说明 概念提出 查表方式 直接查找 索引查找 分段查找 实战示例 字符统计 月天校验 名称构造 值名…

Python——sentenceSimilarity 的简单demo(测试句子相似度)

一、sentenceSimilarity 是什么&#xff1f; sentenceSimilarity 属于机器学习的领域 Python 中的 sentenceSimilarity 库是一个用于计算句子相似度的工具库&#xff0c;主要用于自然语言处理相关的应用中。该库支持多种模型计算句子相似度&#xff0c;包括 TF-IDF、LSI、LDA 等…

MySQL进阶篇(三)

七.MySQL管理 7.1 系统数据库 Mysql数据库安装完成后&#xff0c;自带了一下四个数据库&#xff0c;具体作用如下&#xff1a; 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务&#xff0c;而是指mysql的客户端工具。 -e选项可以在Mysql客户端执行SQL语句&#xff0c;而…

【Linux】Linux环境基础开发工具使用(yum和vim)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;Linux ⭐代码仓库&#xff1a;Linux 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

NSFW 图片分类

NSFW指的是 不适宜工作场所&#xff08;“Not Safe (or Suitable) For Work;”&#xff09;。在本文中&#xff0c;将介绍如何创建一个检测NSFW图像的图像分类模型。 数据集 由于数据集的性质&#xff0c;我们无法从一些数据集的网站(如Kaggle等)获得所有图像。 但是我们找到…

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)2023年3月

2023年3月scratch编程等级考试四级真题 选择题(共25题,每题2分,共50分) 1、编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是 A、 B、 C、 D、 答案:C

[CTF/网络安全] 攻防世界 simple_php 解题详析

[CTF/网络安全] 攻防世界 simple_php 解题详析 代码解读PHP弱语言特性姿势参数a限制绕过参数b限制绕过 总结 题目描述&#xff1a;小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量&#xff0c…

协同过滤算法的召回率、准确率、覆盖率、新颖度

python版计算协同过滤推荐算法的召回率、准确率、覆盖率、新颖度 推荐算法网站示例Demo 点我跳转图书管理推荐系统 点我跳转课程推荐系统 点我跳转电影推荐系统 1、召回率、准确率 2、覆盖率、新颖度 覆盖率反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将…

ChatGPT开始颠覆学习方式,应试教育面临哪些挑战?

ChatGPT爆火几个月&#xff0c;整个教育系统都在被颠覆。全球范围内&#xff0c;不少大学教授、系主任和管理人员&#xff0c;都在对课堂进行大规模的调整&#xff0c;以应对ChatGPT对教学活动造成的巨大冲击。 国内传统应试教育选出的分霸、考霸&#xff0c;是更能吃苦&#…

c++中的方法

c中的方法 static方法 与数据成员类似&#xff0c;方法有时会应用于全部对象而不是单个对象。可以编写static方法和数据成员。在方法声明前加上static即可。对于方法的定义前则不需要重复使用static关键字。 class Foo { public:static int sumFunc(int a, int b); };int Fo…

康耐视Visionpro工具-CogPMAlignTool为什么是最牛工具?

1.算法:有六种选项,分别是:PatMax,PatQuick, PatMax 与 PatQuick, PatFlex,PatMax-高灵敏度,透视 Patmax。 PatQuick 特点:速度最快,对于三维或者低质量原件最佳,承受更多图像差异; PatMax 特点:精确度最高,在二维元件上表现佳,最适合于细微细节; PatFlex 特点…

4. 通讯录实现的需求分析和架构设计

本文实现的是通讯录产品的需求分析和架构设计&#xff0c;重点在于结构层次的设计&#xff0c;方便代码阅读和维护。 一、通讯录实现的需求分析 1、通讯录的功能清单 添加一个人员打印显示所有人员删除一个人员查找一个人员保存文件加载文件 2&#xff0c;数据存储信息 人员…

[CTF/网络安全] 攻防世界 disabled_button 解题详析

[CTF/网络安全] 攻防世界 disabled_button 解题详析 input标签姿势disable属性总结 题目描述&#xff1a;X老师今天上课讲了前端知识&#xff0c;然后给了大家一个不能按的按钮&#xff0c;小宁惊奇地发现这个按钮按不下去&#xff0c;到底怎么才能按下去呢&#xff1f; input标…

Tiny+ 语言词法之C语言

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说&#xff0c;在语法分析部分的 if_stmt 函数中&#xff0c;在语义上判断条件必须返回布尔类型的值&#xff0c;因此我们加入一个判断&#xff0c;判断…

Unity之OpenXR+XR Interaction Toolkit示例Demo详解

一.前言 自从升级Unity版本到2021,然后使用OpenXR开发VR之后,我们整个团队的开发效率都提升了不少,这证明了不管什么领域,统一接口,统一规范都是必须的。 关于XR Interaction Toolkit插件,我已经写了几篇文章了,今天才想起来,最基础的Demo讲解还没有写,其实官方的这个…