在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;支持我们在一…

【cesium-2】Cesium相机系统

相机系统有setView、flyTo、lookAt、viewBoundingsphere等方法&#xff0c;下面是相关的使用方法。 flyTo具有空中飞行逐步切换视域的效果&#xff0c;还可设置飞行时间&#xff1b; setView方法可直接切换相机视口&#xff0c;从而不需要通过一个飞入的效果切换&#xff1b; l…

C/C++不同整数类型的区别

在C/C中涉及的整数相关的类型大致有如下几种&#xff1a; char、unsigned charshort、unsigned shortint、unsigned intlong、unsigned longlong long、unsigned long longint8_t、uint8_tint32_t、uint32_tint64_t、uint64_tDWORDDWORD32、DWORD64size_t、ssize_tSIZE_T、SSI…

Docker Swarm部署实操

大家好&#xff0c;我是升仔 引言 Docker Swarm 是 Docker 官方的集群管理工具&#xff0c;它将多个 Docker 主机转换为一个虚拟的 Docker 主机。Swarm 提供了容器编排、集群管理、服务发现等功能&#xff0c;非常适合生产环境的需要。 部署步骤 环境准备 准备至少三台安装了 D…

Nginx安装与文件服务器实现

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

Python爬虫---解析---JSONPath

Xpath可以解析本地文件和服务器响应的文件&#xff0c;JSONPath只能解析本地文件 1. 安装jsonpath&#xff1a;pip install jsonpath 注意&#xff1a;需要安装在python解释器相同的位置,例如&#xff1a;D:\Program Files\Python3.11.4\Scripts 2. 使用步骤 2.1 导入&…

什么是 PHP 内存溢出 ?遇到了要如何解决呢 ?

PHP内存溢出指的是在PHP应用程序中&#xff0c;分配给脚本执行的内存超出了PHP配置文件中设置的限制。当脚本尝试使用比可用内存更多的内存时&#xff0c;就会发生内存溢出错误。 一、内存溢出可能由以下几个原因引起&#xff1a; 循环引用&#xff1a;如果存在循环引用&#…

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; 前言 首先一个软件做出…

Easy Excel 学习

学习官方地址&#xff1a;Easy Excel官方 maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.3.0</version> </dependency> 做个标记&#xff0c;后续加测试类

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 命令 总结…

Java 解决远程调用 ssl 证书认证问题

Java 解决远程调用 ssl 证书认证问题 方法 1方法 2方法 3 方法 1 在 jdk 目录导入证书。 首先要下载 服务器 ssl 证书&#xff0c;下载完成之后。把它命名成 Root.cer 后面使用 cmd 命令行 在 jdk 目录导入。 例如 &#xff1a; jdk 的目录为&#xff1a;D:\JetBranins\Intel…