码农行者 码农行者
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

DeanWu

软件工程师
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kubernetes 学习笔记 - 问题记录

    • 问题汇总
    • 云原生
    • k8s
    DeanWu
    2020-09-03
    目录

    Kubernetes 学习笔记 - 问题记录

    本篇为k8s学习笔记问题记录。基础概念和搭建可参考之前文章 Kubernetes 学习笔记-基础篇 (opens new window) 和 Kubernetes 学习笔记-集群搭建篇(二进制方式) (opens new window)。

    # 问题汇总

    上文记录了我搭建K8S集群的过程,这里记录些问题和解决方案便于查阅。

    1/ 各组件启动失败时,如何方便的查看错误?

    可使用命令 systemctl status <组件名> 或 journalctl -xefu <组件名>查看日志。

    2/ 注意cgroup启动问题

    failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
    
    1

    kubelet 默认使用 cgroupfs 启动,可修改为docker 的systemd, 或修改docker 启动为 cgroupfs。

    docker 修改的地方为 /etc/docker/daemon.json

    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    1
    2
    3

    kuberlet 可修改systemd 的service中启动命令增加--cgroup-driver参数:

    # 可指定启动参数 
    DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f3)
    
    --cgroup-driver=$DOCKER_CGROUPS
    
    
    1
    2
    3
    4
    5

    3/ 节点删除后如何重新授权?

    节点删除后,重启 kubelet。在Master 端是看不到申请信息的,需要将上次申请的证书删除,再重启。

    # master
    kubectl delete node node01
    
    # node01 
    rm -f /opt/kubernetes/ssl/kubelet*
    systemctl restart kubelet 
    
    1
    2
    3
    4
    5
    6

    4/ 排查pod无法启动的思路

    # 1. 先查看pod的最近的操作
    kubectl describe pod <pod-name> -n kube-system 
    
    # 2. 查看pod 的日志
    kubectl logs pod <pod-name>
    
    1
    2
    3
    4
    5

    5/ 解决Dashboard 2.0 chrome浏览器不能访问的问题

    mkdir key && cd key
    # 1 生成证书
    openssl genrsa -out dashboard.key 2048
    openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=kubernetes-dashboard-certs'
    openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
    # 2 删除原有的证书secret
    kubectl delete secret kubernetes-dashboard-certs -n kube-system
    # 3 创建新的证书secret
    kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system
    # 4 查看dashboard pod,v2.0是 -n kubernetes-dashboard
    kubectl get pod -n kube-system
    # 5 重启dashboard pod,v2.0是 -n kubernetes-dashboard
    kubectl delete pod <pod name> -n kube-system
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    6/ 如何彻底的删除一个pod?

    K8S中pod 是有deployments来发布的,所以直接删除pod后,k8s无法识别是人为还是故障,它会根据deployments 描述的信息,重新启动一个pod。所以要删除pod 时,直接删除对应的 deployments,pod会自动删除。

    kubectl delete deployment <deployment_name> -n <namespace>
    
    1

    7/ 节点维护时,如何手动驱赶pod?

    # 1、标记节点不可调度
    kubectl cordon <node name>
    # 2、手动迁移pod 
    kubectl drain <node name> --delete-local-data --ignore-daemonsets --force
    
    # 3、带节点维护完成之后,恢复可调度
    kubectl uncordon <node name>
    
    1
    2
    3
    4
    5
    6
    7
    #Kubernetes#docker
    上次更新: 2023/03/19, 15:09:33
    最近更新
    01
    chromebox/chromebook 刷bios步骤
    03-01
    02
    redis 集群介绍
    11-28
    03
    go语法题二
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2015-2024 DeanWu | 遵循CC 4.0 BY-SA版权协议
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式