在killercoda中的一次apiserver异常追查思路

笔者:
最近在准备cks考试, 然后又发现了killercoda这个能够提供模拟考试环境的平台。它提供了很棒的引导,教你一步步追查问题,形成一整套追查思路,我觉得很不错,特此分享。

准备工作

首先还是需要养成配置文件备份的习惯, 避免因为修改出错导致的无法回滚。

  1. apiserver 默认端口6443, 在apiserver异常(无法启动)之后, 我们尝试执行的任何kubectl 命令都会提示
    The connection to the server 172.30.1.2:6443 was refused - did you specify the right host or port?在这里插入图片描述

  2. 查看日志的方法
    /var/log/pods/
    在这里插入图片描述
    /var/log/containers
    此路径下的日志其实做了一个链接,直接指向了/var/log/pods下面的日志
    在这里插入图片描述

    watch crictl ps
    此命令可以帮助查看实时的k8s系统组件的容器运行状态
    在这里插入图片描述 docker ps 或者docker logs

/var/log/syslog 或者/var/log/messages或者 journalctl -u kubelet
ubuntu会将日志记录在syslog下,而centos系列会将日记存在/var/log/messages下
journalctl -u kubelet
在这里插入图片描述
3. 配置文件的路径
在killercoda提供的环境里,配置文件存储路径结构如下

k8s基础组件配置路径
etcd/etc/kubernetes/manifests/etcd.conf
kube-apiserver/etc/kubernetes/manifests/kube-apiserver.yaml
kube-controller-manager/etc/kubernetes/manifests/kube-controller-manager.yaml
kube-scheduler/etc/kubernetes/manifests/kube-scheduler.yaml
kubelet/var/lib/kubelet/config.yaml

Apiserver Crash

1. 要求你修改apiserver配置,加入一个错误参数。

The idea here is to misconfigure the Apiserver in different ways, then check possible log locations for errors.
You should be very comfortable with situations where the Apiserver is not coming back up.
Configure the Apiserver manifest with a new argument **--this-is-very-wrong**.
Check if the Pod comes back up and what logs this causes.
Fix the Apiserver again.
  1. 在apiserver配置文件中加入–this-is-very-wrong参数保存后,检查发现kube-apiserver在一段时间后消失了。
    在这里插入图片描述在这里插入图片描述
  2. 随后执行kubectl 相关的任何命令都出现了这样的报错
    The connection to the server 172.30.1.2:6443 was refused - did you specify the right host or port?
  3. 开始逐一检查日志
    在**/var/log/containers**下面找到APIserver日志, 打开发现已经提示有异常的参数。
    在这里插入图片描述
    在journalctl -u kubelet |grep error 发现大段的无法连接apiserver端口的报错
Dec 25 05:18:24 controlplane kubelet[30718]: E1225 05:18:24.602540   30718 kubelet_node_status.go:540] "Error updating node status, will retry" err="error getting node \"controlplane\": Get \"https://172.30.1.2:6443/api/v1/nodes/controlplane?resourceVersion=0&timeout=10s\": dial tcp 172.30.1.2:6443: connect: connection refused"
Dec 25 05:18:24 controlplane kubelet[30718]: E1225 05:18:24.603081   30718 kubelet_node_status.go:540] "Error updating node status, will retry" err="error getting node \"controlplane\": Get \"https://172.30.1.2:6443/api/v1/nodes/controlplane?timeout=10s\": dial tcp 172.30.1.2:6443: connect: connection refused"

在这里插入图片描述
解决: 根据日志中给出的信息, 在APIserver配置文件里删除错误的参数设定 即可。

2. 给apiserver设定一个错误的值 --etcd-servers=this-is-very-wrong .

现象:同样是没有看到有apiserver的容器运行, 6443不通
在这里插入图片描述

1. 查看containers下的日志
在这里插入图片描述
发现apiserver已经有日志,但是提示了无法连接到etcd配置的地址
在这里插入图片描述

3. Invalid Apiserver Manifest YAML

尝试将apiserver的配置文件修改如下

apiVersionTHIS IS VERY ::::: WRONG v1
kind: Pod
metadata:

现象:apiserver容器不存在,且/var/log/containers下未见有apiserver日志
在这里插入图片描述

  1. 检查kubelet日志
    发现报错 file.go:187] “Could not process manifest file” err="/etc/kubernetes/manifests/kube-apiserver.yaml: couldn’t parse as pod(Object ‘apiVersion’ is missing in '{“apiVersionthisisvery ::”:“wrong v1”,“kind”:“Pod”,"m。。。。。,“name”:“usr-share-ca-certificates”}]},“status”:{}}'), please check config file" path=“/etc/kubernetes/manifests/kube-apiserver.yaml”
    在这里插入图片描述

Apiserver Misconfigured

试验地址:https://killercoda.com/killer-shell-cks/scenario/apiserver-misconfigured

基本思路:

通过日志,确认问题点,然后再去逐一解决。

追查过程01

在这里插入图片描述

在syslog日志中发现 kubeapiserver 第四行有错误。
在这里插入图片描述
在这里插入图片描述
修复后查看服务是否恢复,发现container日志出现,但6443还是没起来。
在这里插入图片描述
提示有错误的参数名
在这里插入图片描述
再次尝试修正, 检查服务状态,报错如下:
Get “https://172.30.1.2:6443/api/v1/namespaces/default/pods?limit=500”: dial tcp 172.30.1.2:6443: connect: connection refused - error from a previous attempt: read tcp 172.30.1.2:60628->172.30.1.2:6443: read: connection reset by peer
在这里插入图片描述
分别查看两个容器日志
在这里插入图片描述
他在连接本机23000端口失败,需要确认是设定异常还是服务错误。
在这里插入图片描述
此处看到,apiserver设定的etcd地址端口是23000, 但是实际etcd运行在默认的2379端口
在这里插入图片描述
在这里插入图片描述
修复设定后, 再次观察, 最后apiserver正常运行。
在这里插入图片描述

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

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

相关文章

spark:RDD编程(Python版)

RDD运行原理 RDD设计背景 许多选代目前的MapReduce框架都是把中间结果写入到稳定存储 (比如磁盘)中带来了大量的数据复制、磁盘IO和序列化开销 RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性&#xf…

useRef语法讲解

useRef useRef 用法 import { useRef, useState } from react import ./App.cssfunction App() {const userRef useRef<HTMLInputElement>(null)const [val, setVal] useState()const handleClick () > {userRef.current?.focus()setVal(userRef.current?.valu…

windows中python3创建虚拟环境

当我们在创建一个python项目时&#xff0c;经常需要安装一堆库&#xff0c;然后转到另一个项目&#xff0c;却发现依赖冲突了&#xff0c;人都麻了。所以创建虚拟环境就是解决这个大麻烦的。 什么是虚拟环境&#xff1f; 虚拟环境是Python的一个工具&#xff0c;支持我们在一…

Nginx安装与文件服务器实现

1. 概述 Nginx是一个高性能的反向代理和web服务器软件&#xff0c;特点是系统资源消耗低、高性能、高并发、扩展性好。一个进程可以处理多个请求&#xff0c;并且是非阻塞式响应。 windows安装安装包下载地址&#xff1a;https://nginx.org/en/download.html下载之后解压运行n…

tensorboard可视化——No dashboards are active for the current data set.

No dashboards are active for the current data set. 出现问题的原因是事件的路径未用绝对路径&#xff0c;tensorboard --logdir./runs --port6007 改为tensorboard --logdirD:\Code\Python\Study\CL\hat-master\hat-master\run s\one --port6007就好了

acwing linux docker教程

终章 听着名字还挺伤感的哈哈哈其实是Linux的终章&#xff0c;感谢大家这段时间的阅读&#xff0c;这段使时间我为了给大家清楚的讲解一下Linux自己也是很认真的学习了一遍&#xff0c;自己提升了也不少。其实最近学校里面是讲了Linux和windows server 2019搭载DNS、web、ftp服…

[渗透测试学习] Manager - HackTheBox

文章目录 信息搜集 nmap扫描一下端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.236扫出来很多端口&#xff0c;其中80端口有http服务&#xff0c;88端口是采用一个身份验证协议kerberos&#xff0c;以及NetBIOS-SSN&#xff08;端口139&#xff09;和Microsoft-DS&#…

探索前端构建可视化应用的思路

一、前言 前端社区里&#xff0c;低代码/无代码是被讨论的火热赛道。简单来说低代码就是通过编写少量代码的方式完成应用的开发及上线&#xff0c;而无代码是低代码的子集&#xff0c;不需要编写代码通过配置的方式即可完成整个应用的开发。目前集团内部的低代码平台已经有很多…

如何使用Docker部署Dashy并无公网ip远程访问管理界面

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

Linux上iPortal 配置80端口的http

作者&#xff1a;yx 文章目录 前言方法一、配置使用外置ES1、关闭启用 iPortal 内置的 ES2、修改80端口3、启动外置ES4、启动iPortal5、结果验证 方法二、更改 Linux 系统配置1. 安装 Authbind2. 启用端口的读取和执行权限3. 在 Apache Tomcat 上启用 Authbind4. 重启iPortal5.…

怎么搭建实时渲染云传输服务器

实时渲染云传输技术方案&#xff0c;在数字孪生、虚拟仿真领域使用越来越多&#xff0c;可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器&#xff0c;具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建&…

测试老鸟,对软件测试行业的看法,“我“测试人何去何从?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先一个软件做出…

2023.12.22 关于 Redis 数据类型 String 常用命令

目录 引言 String 类型基本概念 SET & GET SET 命令 GET 命令 MSET & MGET MSET 命令 MGET 命令 SETNX & SETEX & PSETEX SETNX 命令 SETEX 命令 PSETEX 命令 计数命令 INCR 命令 INCRBY 命令 DECR 命令 DECRBY 命令 INCRBYFLOAT 命令 总结…

NeurIPS已成为了AI人才招聘的最大盛会,连Hinton都“应聘”过

在一周前美国举行的年度最热门的人工智能大会NeurIPS 2023上&#xff0c;有超过1万名世界顶尖AI研究人员聚集在此。 而除了研究员之外&#xff0c;中国科技公司和华尔街公司是其中最突出的参会者&#xff0c;他们都背负着抢夺AI人才的任务。 大模型人才最受欢迎 随着今年Cha…

深度学习中的Dropout

1 Dropout概述 1.1 什么是Dropout 在2012年&#xff0c;Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。当一个复杂的前馈神经网络被训练在小的数据集时&#xff0c;容易造成过拟合。为了防止过拟合&#xff…

最新ChatGPT商业运营网站程序源码,支持Midjourney绘画,GPT语音对话+DALL-E3文生图+文档对话总结

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

mac传输文件到windows

前言 由于mac系统与windows系统文件格式不同&#xff0c;通过U盘进行文件拷贝时&#xff0c;导致无法拷贝。 几种文件格式说明&#xff1a; NTFS 文件格式&#xff1a;只适用于 windows 系统&#xff0c;不适用于 mac 系统&#xff1b; APFS 文件格式&#xff1a;mac 系统格式…

性能测试之Mysql数据库调优

一、前言 性能调优前提&#xff1a;无监控不调优&#xff0c;对于mysql性能的监控前几天有文章提到过&#xff0c;有兴趣的朋友可以去看一下 二、Mysql性能指标及问题分析和定位 1、我们在监控图表中关注的性能指标大概有这么几个&#xff1a;CPU、内存、连接数、io读写时间…

Certum的EV增强型证书

EV增强型https证书是一种特别的数字证书&#xff0c;只有这一款域名数字证书可以直接在地址栏显示企业名称(支持中文名称)。因此&#xff0c;很多企业为了提升企业的品牌形象&#xff0c;向客户展示企业的专业性和可靠性&#xff0c;往往会选择这种类型的数字证书。今天就随SSL…

【React Native】第一个Android应用

第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…