Jiangxl~
CSDN博客专家、51CTO专家博主、阿里云博客专家、华为云享专家、DevOps运维领域优质创作者、
2021年度博客之星运维与安全领域TOP1,InfoQ签约作者、阿里云社区签约作者。博客包括:Python、前端、Kubernetes、Docker、CI/CD、DevOps、Prometheus、Zabbix、MQ、Redis、MySQL、WEB集群、自动化运维、阿里云、ELK、Linux、等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。
展开
-
解决serviceaccount用户认证挂载密文token文件失败导致pod使用anonymous用户问题
下图报错的大致意思为sa用户systemanonymous没有权限对jenkins命名空间下的pod进行操作,奇怪的是我yaml中明明已经指定了sa用户jenkins-sa,并且jenkins-sa是绑定的cluster-admin角色,按理说不可能对某个命名空间下的pod资源无操作权限,而且使用anonymous用户表示的是rbac资源认证失败,只有失败的情况下才会使用anonymous用户。不过这一点只是我一点点找出来的,官方并没有明确说明。当我勾选了禁止http证书检查后产生了新的报错。...原创 2022-07-28 09:15:05 · 1020 阅读 · 0 评论 -
K8S集群报错check that the calico/node container is running and has mounted /var/lib/calico/
报错内容如下:解决方法:这是由于集群没有安装calico组件导致的,calico正常启动后,重启该pod,问题解决原创 2022-07-04 10:20:57 · 2376 阅读 · 0 评论 -
K8S 报错Failed to inspect image “calico/pod2daemon-flexvol:v3.8.2“
报错内容如下:解决方法原创 2022-07-04 10:17:54 · 1509 阅读 · 0 评论 -
为K8S集群Pod资源配置外部的DNS服务器
[root@k8s-master ~/k8s_1.19_yaml]# vim pod-base.yamlapiVersion: v1kind: Podmetadata:原创 2022-06-14 09:30:05 · 1134 阅读 · 6 评论 -
K8S集群修改Service资源的端口范围
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yamlspec: containers: - command: - kube-apiserver - --service-node-port-range=1-65535 - --advertise-address=192.168.20.10 - --allow-privileged=true- --service-node-po原创 2022-03-29 13:47:36 · 1216 阅读 · 7 评论 -
基于containerd搭建的K8S集群calico与coredns组件一直处于pending状态
基于containerd搭建的K8S集群calico与coredns组件一直处于pending状态问题描述搭建完K8S1.22版本,容器服务采用的containerd,集群部署完成后calico和coredns组件一直处于pending状态,如下图所示。排查过程首先查看下资源为什么一直处于pending状态。使用kubectl describe 命令查看calico等资源的属性,提示信息说是由于K8S集群中Node节点没有准备就绪导致。我的集群刚刚搭建完毕,calico组件一直处于pendin原创 2022-02-09 17:30:07 · 9118 阅读 · 7 评论 -
K8S集群calico报错Calico node ‘binary-k8s-master1‘ is already using the IPv4 address 172.18.0.1
k8s calico报错Calico node ‘binary-k8s-master1’ is already using the IPv4 address 172.18.0.11.问题描述将pinpoint微服务链路监控以docker方式部署在了k8s集群中的node节点上,刚开始没有问题,过了一天后,发现calico组件全部启动失败,并且集群中的所有微服务无法提供服务calico报错如下# kubectl logs -f calico-node-p6hsk -n kube-system2021原创 2021-11-26 15:44:03 · 2052 阅读 · 9 评论 -
解决k8s核心组件calico pod资源不创建问题
解决k8s核心组件calico pod资源不创建问题1.问题描述由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的2.解决方法期初排查时,我觉得可能是由于当前master原创 2021-11-17 13:06:07 · 4300 阅读 · 9 评论 -
不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧
不会写K8S资源编排yaml文件?一文教会你如何掌握编写yaml文件的技巧本文分为两个章节:首先熟悉下K8S指令以及资源的类型、然后开始进入正文传授经验K8S YAML推荐文章K8S资源编排YAML文件详解Kubernetes集群使用yaml文件创建资源报错经验总结一、熟悉下K8S常用命令参数以及资源管理1.K8S集群常用命令1.1.查询资源状态kubectl get cs # 查看集群状态kubectl get nodes原创 2021-10-13 17:47:10 · 6554 阅读 · 29 评论 -
kubectl报错Unable to connect to the server: net/http: TLS handshake timeout
kubectl报错Unable to connect to the server: net/http: TLS handshake timeout执行kubectl命令报错如下[root@k8s-20-49 ~]# kubectl get csUnable to connect to the server: net/http: TLS handshake timeout看到报错提示TLS第一时间想到的是证书问题,但是证书也昂申请没多久,肯定不会出现过期的现象逐个排查k8s 核心组件日志最终报错在原创 2021-10-09 14:21:13 · 8584 阅读 · 2 评论 -
二进制方式搭建Kubernetes高可用集群(超丰富的组件概念理论总结)
二进制方式部署Kubernetes高可用集群文章目录二进制方式部署Kubernetes高可用集群1.环境准备1.1.Kubernetes高可用集群部署方式1.2.Kubernetes集群弃用docker容器1.3.Kubernetes集群所需的证书1.4.环境准备1.5.安装cfssl证书生成工具2.操作系统初始化配置3.部署Etcd集群3.1.使用cfssl证书工具生成etcd证书3.2.部署etcd集群4.部署Docker服务4.1.安装docker4.2.为docker创建systemctl启动脚本原创 2021-09-23 10:04:38 · 74042 阅读 · 157 评论 -
calico状态一直处于CrashLoopBackOff并且报错no valid IPv4 addresses found on the host interfaces
calico状态一直处于CrashLoopBackOff并且报错no valid IPv4 addresses found on the host interfacescalico pod一致处于CrashLoopBackOff报错内容如下:[root@k8s-20-49 ~]# kubectl logs -f calico-node-bwqz4 -n kube-system2021-05-28 06:05:29.621 [INFO][8] startup.go 256: Early log l原创 2021-09-21 19:24:15 · 1524 阅读 · 3 评论 -
Kubernetes service资源使用工作负载方式调度后端pod资源
Service资源使用工作负载方式调度后端pod资源1.Service负载均衡方式介绍service资源平时都是通过标签选择器方式与一组pod进行关联,从而负载均衡这一组pod,service资源也可以通过工作负载的方式直接关联pod控制器,再由pod控制器与pod进行关联。这里说的工作负载方式其实是rancher上的一种定义。工作负载方式其实就是找service资源直接通过pod控制器(比如deployment、statefulset等pod控制器)去关联后端pod资源。如果一个服务是在ran原创 2021-09-18 14:27:10 · 824 阅读 · 1 评论 -
一文汇总Etcd数据库几种常见故障及排查思路
⭐一文汇总Etcd数据库几种常见故障及排查思路⭐文章目录⭐一文汇总Etcd数据库几种常见故障及排查思路⭐1.etcd重建节点后无法加入集群2.etcd集群初始化集群设置失败3.etcd报错URL address does not have the form4.etcd新节点加入集群报错5.etcd集群新增的节点IP不存在于证书文件导致无法加入集群1.etcd重建节点后无法加入集群现象: 在集群中的一台etcd节点,由于某种原因踢出了集群,现在需要重新加入集群报错内容如下8月 27 16:40:17原创 2021-09-16 14:53:53 · 3342 阅读 · 4 评论 -
一次kubernetes calico网络组件的异常状态问题排查
k8s新增节点组件启动成功但是calico启动不成功节点无法加入集群新增了master和node节点,启动完相关组件之后,calico组件一直处于CrashLoopBackOff状态,calico组件pod报错内容如下Events: Type Reason Age From Message ---- ------ ---- ----原创 2021-09-16 14:44:54 · 2771 阅读 · 4 评论 -
Kubernetes apiserver更换证书
Kubernetes apiserver更换证书文章目录Kubernetes apiserver更换证书1.更换证书适用场景2.以新增master节点为例更换kube-apiserver证书文件2.1.重新生成kube-apiserver证书2.2.将证书文件拷贝至各个master节点对应路径2.3.重启master和node上面的组件2.4.部署新的master节点观察能否成功加入集群1.更换证书适用场景kubernetes更换证书的场景:当集群要增加新的master/node节点,此时ap原创 2021-09-13 16:57:53 · 1228 阅读 · 1 评论 -
实现基于EFK日志平台收集Kubernetes集群日志信息
kubernetes集群基于EFK实现日志收集平台文章目录kubernetes集群基于EFK实现日志收集平台1.EFK工作原理2.部署EFK平台2.1.部署nfs2.2.部署elasticsearch2.2.1.创建es的pv及pvc资源2.2.2.准备elasticsearch镜像并推送至harbor2.2.3.编写elasticsearch yaml文件2.2.4.创建lasticsearch资源并查看状态2.3.部署kibana2.3.1.准备kibana的pv及pvc资源2.3.2.准备kiban原创 2021-08-18 10:15:53 · 1677 阅读 · 2 评论 -
Kubernetes集群使用yaml文件创建资源报错经验总结
Kubernetes集群使用yaml文件创建资源报错经验总结简单看一个报错内容如下[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f pod-xiangxipeizhi.yamlerror: error validating "pod-xiangxipeizhi.yaml": error validating data: [ValidationError(Pod.spec.containers[0].env): invalid type for i原创 2021-09-01 09:30:28 · 7225 阅读 · 10 评论 -
基于Kubernetes集群部署Elasticsearch集群
在k8s中部署elasticsearch集群文章目录在k8s中部署elasticsearch集群1.部署分析2.准备镜像并推送至Harbor仓库3.创建StorageClass动态PV资源4.编写es集群configmap资源5.编写es集群statfulset资源6.编写es集群svc资源7.创建所有资源8.查看资源的状态8.1.查看es的资源状态8.2.查看es每个节点使用的pv和pvc信息9.查看es集群信息9.1.查看集群状态9.2.查看集群的节点信息10.创建索引并在es-head查看集群1.原创 2021-08-18 10:03:14 · 1713 阅读 · 6 评论 -
k8s集群驱逐node节点上的pod
[root@k8s-master1 ~]# kubectl drain k8s-node2 --delete-local-data --force --ignore-daemonsetsnode/k8s-node2 already cordonedWARNING: ignoring DaemonSet-managed Pods: efk/fluentd-es-nfgbj, ingress-nginx/nginx-ingress-controller-cpxtl, kube-system/calico-n原创 2021-06-24 11:42:23 · 2563 阅读 · 1 评论 -
centos7底层系统容器使用systemctl启动服务的方法
centos7容器使用systemctl启动服务的方法1.实现思路思路:centos7想以systemctl命令启动,就需要开启init进程,init进程必须在系统启动的时候开启,作为第一个进程,init无法在脚本中启动,因此只能是将容器的启动命令设置成/usr/sbin/init,然后将启动服务的命令写成脚本,然后把执行脚本的命令写入/etc/rc.local中,这样就可以在centos7容器中使用systemctl启动服务了这种方法特别适合那种喜欢把一个容器做成一个小的VMware虚拟机以下原创 2021-06-21 14:15:11 · 971 阅读 · 1 评论 -
解决serviceaccount用户认证挂载密文token文件失败导致pod使用anonymous用户问题
解决serviceaccount用户认证挂载密文token文件失败导致pod使用anonymous用户问题1.背景描述我在kubernetes集群中部署的jenkins是自己制作的docker容器,底层系统是centos7,由于jenkins是yum安装的,因此需要systemctl命令启动的,也就同时开启了特权模式,但是一切都准备就绪后,在配置kubernetes集群信息模板后,进行了连接测试然后报错报错信息如下:Error testing connection https://kuberne原创 2021-06-21 14:03:30 · 1609 阅读 · 1 评论 -
解决kubelet报错:kubelet.go:2183] node “k8s-20-52“ not found
解决kubelet报错:kubelet.go:2183] node “k8s-20-52” not found由于公司机房服务器重启,k8s其中一个node节点的状态一直为NotReady,查看kubelet组件也是启动成功的,当仔细排查时,发现kubelet下面有提示找不到当前节点,并且docker也有很多k8s组件没有启动首先查看集群状态,会看到k8s-20-52节点是NotReady[root@k8s-20-49 ~]# kubectl get nodeNAME STATUS原创 2021-06-17 11:51:54 · 9660 阅读 · 2 评论 -
使用sealos搭建kubernetes1.19.6高可用集群并利用helm安装rancher高可用集群
使用sealos部署k8s-1.19高可用sealos旨在做一个简单干净轻量级稳定的kubernetes安装工具,能很好的支持高可用安装。sealos一条命令就可以实现k8s高可用。sealos特性与优势:支持离线安装,工具与资源包(二进制程序 配置文件 镜像 yaml文件等)分离,这样不同版本替换不同离线包即可百年证书使用简单支持自定义配置内核负载,极其稳定,因为简单所以排查问题也极其简单不依赖ansible haproxy keepalived, 一个二进制工具,0依赖资源包放在阿原创 2021-05-28 09:42:08 · 1690 阅读 · 1 评论 -
kubernetes版的Jenkins容器需要执行docker命令实现pipeline构建镜像流程
kubernetes版的Jenkins容器需要执行docker命令实现pipeline构建镜像流程1.容器运行的Jenkins无法使用docker容器运行的Jenkins,进入Jenkins容器,执行Docker命令,无法执行,如下报错,docker根本无法运行,更别说使用docker命令了2.解决方法临时方案:可以把宿主机的docker.sock文件挂载到容器中,Jenkins就能使用docker命令了······· volumeMounts: - name:原创 2021-05-26 16:16:27 · 837 阅读 · 1 评论 -
k8s核心组件报错Container image “k8s.gcr.io/kube-controller-manager:v1.19.6“ already present on machine
k8s报错Container image "k8s.gcr.io/kube-controller-manager:v1.19.6" already present on machine报错内容如下:这是由于核心组件pod启重复导致的根据报错将多余的容器查出来删除即可[root@k8s-master2 ~]# docker ps -a | grep sc1c4244acd117 bf39b6341770 "kube-scheduler --au…" Less原创 2021-05-20 15:56:15 · 15177 阅读 · 1 评论 -
通过环境变量将 Pod 信息呈现给容器
通过环境变量将 Pod 信息呈现给容器官方配置文档1.简述通过在pod中定义env的方式,将pod的信息定义成环境变量,然后输出给容器。pod的信息包括pod的ip地址、pod的名称、pod所在的namespace等等,这些信息都可以定义成变量,然后在程序配置文件中使用变量的形式来定义2.将POD的IP定义成环境变量env:- name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP3.将POD的名称定义原创 2021-05-17 09:27:58 · 668 阅读 · 1 评论 -
kubernetes以单个文件的方式挂载 configMap及挂载注意事项
kubernetes 以单个文件的方式挂载 configMap 及挂载注意事项问题现象默认挂载 configMap 时,kubernetes 会覆盖掉挂载的整个目录,哪怕使用 items 也会导致整个目录被覆盖。我们经常需要把一些程序的配置文件通过configmap挂载到容器中,一般都是单个文件,默认情况下,configmap就会将整个目录的文件情况,只保留configmap中存储的文件,这样一来其他配置文件丢失,我们的程序自然就起不来了。解决方案使用volumeMount.subPath来声明我原创 2021-05-16 15:25:52 · 9904 阅读 · 4 评论 -
解决harbor仓库拉镜像报错ErrImagePull: rpc error: code = Unknown desc = Error response from daemon: repository
拉取harbor仓库镜像报错ErrImagePull: rpc error: code = Unknown desc = Error response from daemon: repository拉取harbor仓库镜像报错,报错内容如下提示我没有拉取仓库的权限,让我docker login,可是我已经docker login过了解决方法:这是由于harbor仓库上的项目没有公开导致的,找到你的 项目—点击配置管理—公开,公开后就能正常拉取镜像了已经可以正常拉取镜像...原创 2021-05-12 10:13:47 · 14003 阅读 · 5 评论 -
解决kubernetes集群controller-manager 和scheduler状态 Unhealthy问题
解决kubernetes集群controller-manager 和scheduler状态 Unhealthy问题最近通过kubeadm安装K8s,组件controller-manager 和scheduler状态 Unhealthy [root@k8s-master1 ~]# netstat -lnpt | egrep '10251|10252'端口也不存在rancher上显示也比较难看解决方法如下:在所有master节点都要操作vim /etc/kubernetes/manifes原创 2021-05-11 10:52:19 · 1259 阅读 · 1 评论 -
kubelet重新安装新版本报错Unit kubelet.service entered failed state.
1.错误描述k8s-master2原来装个k8s1.15版本,由于种种原因,再次使用sealos安装高版本的k8s时就会报错,错误内容如下:[root@k8s-master2 ~]# systemctl status kubelet● kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: di原创 2021-05-07 11:37:41 · 12019 阅读 · 4 评论 -
K8S资源编排YAML文件详解
k8s各种资源yaml清单文件文章目录k8s各种资源yaml清单文件1.集群级别资源1.1.namespace资源清单文件2.pod资源2.1.pod资源清单文件-涵盖全部参数2.2.pod资源基本配置清单文件2.3.pod资源健康检查资源清单文件2.2.pod资源一级可配置属性2.4.pod初始化容器配置参数2.5.pod资源钩子函数配置参数2.6.Pod资源node调度策略配置参数2.7.Pode亲和性调度配置参数3.pod资源控制器资源3.1.ReplicaSet控制器资源清单文件3.2.Deplo原创 2021-04-27 11:07:02 · 69913 阅读 · 4 评论 -
解决kubernetes namespace无法删除问题
解决k8s namespace无法删除问题每当删除 namespace 或 pod 等一些 Kubernetes 资源时,有时资源状态会卡在 Terminating,很长时间无法删除,甚至有时增加 --force grace-period=0 之后还是无法正常删除。这时就需要 edit 该资源,或者将该资源导出为 json(通过调用原生接口进行删除), 将 finalizers 字段设置为 [],之后 Kubernetes 资源就正常删除了。1.查看正在删除的ns可以看到cattle-system命名原创 2021-04-21 16:52:54 · 1732 阅读 · 1 评论 -
kubernetes安全机制--Admission Control准入控制
kubernetes安全机制–Admission Control准入控制通过了认证和授权之后,还需要经过准入控制处理之后,apiserver才会处理请求。准入控制是一个可配置的控制器列表,可以通过在apiserver上使用命令行设置执行哪些准入控制器用于拦截请求的一种方式,运行在认证,授权之后,是权限认证链上的最后一环,对请求API资源对象进行修改和校验--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,Persiste原创 2021-04-20 16:19:35 · 725 阅读 · 2 评论 -
k8s强制删除pod以及namespace
Kubernetes强制删除一直处于Terminating状态的pod和namespace强制删除podkubectl get po -n NAMESPACE |grep Terminatingkubectl delete pod tomcat-deployment-7db86c59b7-9dbn7 -n dev --force --grace-period=0强制删除namespace[root@k8s-master ~/k8s_1.19_yaml]# kubectl delete ns aa原创 2021-03-25 16:17:54 · 1915 阅读 · 1 评论 -
kube-proxy支持的三种工作模式
kube-proxy支持的三种工作模式userspace模式userspace模式下,kube-proxy会为每一个service创建一个监听端口,用户请求首先发送给Cluster IP,然后由iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的pod并和其建立连接该模式下,kube-proxy充当了一个四层负载均衡器的角色,由于kube-proxy运行在userspace下,在转发的过程中会增加内核和用户空间之间的数据拷贝,虽然稳定但是效原创 2021-03-19 12:04:24 · 1640 阅读 · 1 评论 -
k8s创建资源yaml报错排查思路
k8s创建yaml报错如何排查经验总结报错内容如下[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f pod-xiangxipeizhi.yamlerror: error validating "pod-xiangxipeizhi.yaml": error validating data: [ValidationError(Pod.spec.containers[0].env): invalid type for io.k8s.api.core.原创 2021-03-06 23:42:23 · 3759 阅读 · 1 评论 -
kubernetes限制节点启动的pod数量
关于pod数量限制,在网上很多博客都只是写了一半,最主要的一点缺没有提到,所有博客都一模一样,也是厉害了,这样就会导致在实际操作中无法生效!!!!!进入正文1.node节点默认的pod数量k8s node节点每个默认允许最多创建110个pod,有时可能会由于系统硬件的问题,从而控制node节点的pod启动数量需要调整node节点的数量需要在kubelet启动命令中增加–max-pods参数即可生效2.限制pod启动数量为20个在第三行增加Environment="KUBELET_NODE_MA原创 2021-01-08 14:51:21 · 4419 阅读 · 2 评论 -
kubernetes解决pod中的日期与本地服务器不一致的情况
1.通过配置环境变量的方式解决通过env方式的环境变量实现env:- name: TZvalue: Asia/Shanghaiyaml实例apiVersion: apps/v1kind: Deploymentmetadata: name: nginx labels: app: nginxspec: selector: matchLabels: app: nginx replicas: 1 template: metadata:原创 2021-01-07 15:43:04 · 1265 阅读 · 3 评论 -
Prometheus+Grafana全方位监控Kubernetes集群资源利用率
Prometheus+Grafana全方位监控Kubernetes集群文章目录Prometheus+Grafana全方位监控Kubernetes集群1.k8s监控指标2.k8s基础环境准备2.1.环境准备2.2.部署nfs作为prometheus存储2.3.获取prometheus yaml文件2.4.创建命名空间prometheus3.在k8s中部署prometheus3.1.prometheus-yaml准备3.2.创建rbac资源3.3.创建configmap资源3.4.创建statefulset资原创 2021-01-06 17:03:20 · 18748 阅读 · 18 评论