引言

再使用kubeadm部署集群时会多少遇到一些问题,这里做下记录,方便后面查找问题时有方向,同时也为刚要入坑的你指明下方向,让你少走点弯路

问题汇总

  • The connection to the server localhost:8080 was refused - did you specify the right host or port?
# root 用户
export KUBECONFIG=/etc/kubernetes/admin.conf # 非root
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • failed to run Kubelet: misconfiguration: kubelet cgroup driver: “systemd“ is different from docker
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
  • Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get node
  • Kubeadm:如何解决kubectl get cs显示scheduler Unhealthy,controller-manager Unhealthy

root用户

配置文件路径为:

/etc/kubernetes/manifests/kube-scheduler.yaml

/etc/kubernetes/manifests/kube-controller-manager.yaml

user账号

$HOME/.kube/

将两个配置文件中 –port 注释掉

  • 解决 Kubernetes 中 Kubelet 组件报 failed to get cgroup 错误

http://www.mydlq.club/article/80/

  • 解决k8s"failed to set bridge addr: "cni0" already has an IP address different from 10.244.1.1/24"

    具体原因
ifconfig cni0 down
ip link delete cni0
  • 查看kubelet日志
journalctl -xeu kubelet

高可用 HA

  • Haproxy

    查看 haproxy.cfg 配置文件
    global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
    maxconn 4096
    #chroot /usr/share/haproxy
    #user haproxy
    #group haproxy
    #daemon
    stats socket /var/lib/haproxy/stats defaults
    mode http
    log global
    option httplog
    option dontlognull
    option http-server-close
    option forwardfor except 127.0.0.0/8
    option redispatch
    retries 3
    timeout http-request 10s
    timeout queue 1m
    timeout connect 10s
    timeout client 1m
    timeout server 1m
    timeout http-keep-alive 10s
    timeout check 10s
    maxconn 3000 frontend kube-apiserver
    bind *:6444
    mode tcp
    timeout client 1h
    log global
    option tcplog default_backend kube-apiserver backend kube-apiserver
    option httpchk GET /healthz
    http-check expect status 200
    mode tcp
    option ssl-hello-chk
    balance roundrobin
    balance roundrobin
    server k8s-master01 192.168.4.41:6443 check #主要配置这里
    server k8s-master02 192.168.4.42:6443 check
    server k8s-master03 172.17.0.66:6443 check
    docker run -d --restart=always --name haproxy -p 6444:6444 \
    -v ~/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
    haproxy
  • Keepalived

    • ip address associated with VRID 160 not present in MASTER advert : xx.xx.xx.xx

      可能是keepalive master的virtual_router_id和局域网内的其它的keepalive master的virtual_router_id有冲突

      修改 /etc/keepalived/keepalived.conf 中的 virtual_router_id 重启即可

    • 配置文件详解

    https://blog.csdn.net/u012758088/article/details/76599500

      #!/bin/bash
    VIRTUAL_IP=192.168.4.200 # 设置虚拟IP
    INTERFACE=eth0 #所使用的的网卡
    NETMASK_BIT=24
    CHECK_PORT=6444
    RID=10
    VRID=160 #虚拟路由ID 需要唯一
    MCAST_GROUP=224.0.0.18 docker run -itd --restart=always --name=Keepalived-K8S \
    --net=host --cap-add=NET_ADMIN \
    -e VIRTUAL_IP=$VIRTUAL_IP \
    -e INTERFACE=$INTERFACE \
    -e CHECK_PORT=$CHECK_PORT \
    -e RID=$RID \
    -e VRID=$VRID \
    -e NETMASK_BIT=$NETMASK_BIT \
    -e MCAST_GROUP=$MCAST_GROUP \
    wise2c/keepalived-k8s

    使用 ip addr 即可看到所设置网卡上的虚拟IP(PS:ifconfig是看不到的)

【kubernetes 问题排查】使用 kubeadm 部署时遇到的问题的更多相关文章

  1. 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)

    系列目录 kubernetes简介 Kubernetes节点架构图: kubernetes组件架构图: 准备基础环境 我们将使用kubeadm部署3个节点的 Kubernetes Cluster,整体 ...

  2. kubernetes 1.17.2 kubeadm部署 证书修改为100年

    [root@hs-k8s-master01 ~]# cd /data/ [root@hs-k8s-master01 data]# ls docker [root@hs-k8s-master01 dat ...

  3. 02 . Kubeadm部署Kubernetes及简单应用

    kubeadm部署Kubernetes kubeadm简介 # kubeadm是一位高中生的作品,他叫Lucas Kaldstrom,芬兰人,17岁用业余时间完成的一个社区项目: # kubeadm的 ...

  4. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

  5. 使用kubeadm部署Kubernetes v1.13.3

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

  6. Kubernetes Kubeadm部署集群

    Kubernetes高可用架构 Kubenetes 2个高可用核心 apiserver.etcd etcd:集群数据中心,需要保持高可用,用于存放集群的配置信息.状态信息及Pod等信息.如果数据丢失集 ...

  7. kubeadm部署高可用集群Kubernetes 1.14.1版本

    Kubernetes高可用集群部署 部署架构: Master 组件: kube-apiserver Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,所有对象 ...

  8. 附012.Kubeadm部署高可用Kubernetes

    一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...

  9. Kubernetes学习续之一键部署kubeadm

    1.Kubernetes的架构和组件,在部署时,它的每一个组件都是一个需要被执行的.单独的二进制文件,所以不难想象,SaltStack这样的运维工具或由社区维护的脚本的功能,就是要把这些二进制文件传输 ...

随机推荐

  1. Linux 环境部署Skywalking支持Elasticsearch

    一.环境准备 1.Java JKD 1.8(建议) 2.Elasticsearch 3.Skywalking 二. 环境搭建 安装Skywalking分为两个步骤: a.安装Backend后端服务 b ...

  2. java中的四种引用类型

    为什么需要引用: Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收. Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分别为:强引用.软 ...

  3. 本地连接MySQL云服务器步骤与解决方案

    云服务器:aliyun MySQL 版本:mysql8 第一步首先,检查云服务器的 网络与安全 -> 安全组 是否开放了(MySQL)3306端口 第二步,登陆云服务器上的MySQL,检查需要远 ...

  4. 在原生CSS中使用变量

    本文首发于我的博客 一直以来,CSS作为一种申明式的样式标记语言,很难像如javascript等命令式编程语言一样通过定义和使用变量的方式来维护和追踪某些状态.后来随着scss,less等CSS预处理 ...

  5. testview属性之详解

    安卓开发当中TextView是最常用的组件之一了,那么现在就来详细的了解下TextView的属性: Android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示 ...

  6. C++:Abstract class : invalid abstract return type for member function ‘virtual...’

    #include <iostream> #include <cmath> #include <sstream> using namespace std; class ...

  7. 解决vscode开发react项目没有html标签自动补全

    怎么设置自动补全: 左下角齿轮按钮--设置-- 在搜索框中输入Include Languages,选择Emmet,并在Emmet:include language下点击在setting.json中编辑 ...

  8. 微信小程序支付框样式以及功能

    1.页面代码 <view catchtap='showInputLayer' class="btn_pay">立即支付</view> <!-- 密码输 ...

  9. DOCTYPE(⽂档类型) 的作⽤

    DOCTYPE是HTML5中一种标准通用标记语言的文档类型声明,它的目的是告诉浏览器(解析器)应该以什么样(html或xhtml)的文档类型定义来解析文档,不同的渲染模式会影响浏览器对 CSS 代码甚 ...

  10. Mybatis模糊查询结果为空的解决方案

    写在前面 Mybatis使用模糊查询,查询结果为空的解决方案,我的代码是 select * from sp_user where 1=1 <if test="username!=nul ...