本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!
首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…
一 . 前言
本篇文章梳理了二进制安装 Kubernetes 的主流程以及异常的解决流程.
在这里首先要感谢先驱者扩展的大路 , 节省了大量时间 , 个人参考文档配的时候 , 使用的最新版 , 或多或少出现了一些问题 , 在这里整理了下来 , 用于参考.
原文地址为 :简书 , 由于文章又被审核了 , 这里附上转载的地址知乎 , 可以参照原文配 , 也可以按照我的来.
二 . 公用模块配置
公用模块需要集群中每一台机器都进行配置. 这个环节需要为每个服务器安装 Docker 同时配置 Linux 基本配置
2.1 安装 Docker
1 | java复制代码// Step 1 : 安装docker所需的工具 |
2.2 Kubernetes 基本配置
1 | java复制代码// Step 1 : 关闭防火墙 |
三 . Kubernetes Master 配置
安装好基础配置后 , 就可以开启 Master 服务器的配置了
3.1 Master 安装主流程
1 | java复制代码// Step 1 : 执行配置k8s阿里云源 |
PS31014 初始化操作答疑
下载管理节点中用到的6个docker镜像,你可以使用docker images查看到 , 此时如果源配置正确 , 大概 5 分钟以内就会处理完成 , 但是这个过程中会查询很多问题
这里需要大概两分钟等待,会卡在[preflight] You can also perform this action in beforehand using ‘’kubeadm config images pull
- image-repository : 该参数为镜像地址 ,如果下载慢或者 timeout , 需要重新选择新的地址
- kubernetes-version : 当前的版本, 可以去官方查询最新版本
- apiserver-advertise-address : 该地址为你的 apiServer 地址 , node 会调用该地址 (该地址需要外部可调)
- pod-network-cidr : 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络网络插件
- 10.244.0.0/16 : Flannel
- 192.168.0.0/16 : Calico
3.2 init 初始化完成的结果
1 | java复制代码//安装成功后会得到如下的信息 : |
如果你一次性拿到了那个结果 , 恭喜一切顺利 , 如果出现异常 , 请参考如下问题记录 :
3.3 detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.
问题原因 : 此处由于你的 Docker 存在问题
解决方案 : 修改 Cgroup , 参考自 Hellxz博客
1 | java复制代码// Step 1 : 问题的判断 |
3.4 Error response from daemon: Head registry-1.docker.io/v2/coredns/…: connection reset by peer
问题原因 : 主要原因为docker 源的配置问题
1 | java复制代码// 修改 /etc/docker/daemon.json 中镜像的配置 , 可以直接去阿里云中申请 |
3.5 failed to pull image …./coredns:v1.8.0: output: Error response from daemon: manifest for …../coredns:v1.8.0 not found: manifest unknown
问题原因 : 这里最核心的关键字是 coredns ,该问题是镜像中下载 coredns 出现问题
关键字 : coredns , coredns:v1.8.0 , manifest unknown , registry.aliyuncs.com/google_containers/coredns
1 | java复制代码 |
3.6 Failed to watch *v1.Service: failed to list *v1.Service: Get “h……/api/v1/services?limit=500&resourceVersion=0”: dial tcp …..:6443: connect: connection refused
问题原因 : 原因为 api server 没有启动 , 这种情况主要是 init 后 ,但是运行时出现
1 | java复制代码 |
3.7 listen tcp 81.888.888.888:2380: bind: cannot assign requested address
1 | java复制代码详情请看 : 6.1 |
如果看到这里 , 你的问题还没有解决 , 参考第六节 ,问题的排查和解决流程 !!!!!!!!!!!!!!!!!!
四 . Kubernetes Nodes 配置
第一不要忘记第一节通用模块中的处理!!!
4.1 Node 创建主流程
1 | java复制代码// Step 1 : 配置阿里源 |
如果安装失败, 会出现如下问题 :
4.2 configmaps “cluster-info” is forbidden: User “system:anonymous” cannot get resource “configmaps” in API group “” in the namespace “kube-public”
问题原因 : 此处是匿名登录的问题 , 在测试环境中 , 不需要太复杂 , 添加匿名即可
1 | java复制代码kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous |
4.3 error execution phase preflight: couldn’t validate the identity of the API Server: configmaps “cluster-info” not found
问题原因 : 安装 Master 的时候 init 不成功 ,导致 API Server 参数获取出现问题 , 重装 , 注意 init 时的替换操作 (4.)
1 | java复制代码这种问题需要排查 Master 的问题 , 详见 6.2 Master 排查流程 |
4.5 Failed to load kubelet config file” err=”failed to load Kubelet config file /var/lib/kubelet/config.yaml
1 | java复制代码如果是要把节点加到集群中 , 再未运行加入命令之前 , 该配置确实为空 <br> |
4.6 failed to pull image k8s.gcr.io/kube-proxy:v1.21.2: output: Error response from daemon
1 | java复制代码kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers |
4.7 err=”failed to run Kubelet: misconfiguration: kubelet cgroup driver: “systemd” is different from docker cgroup driver: “cgroupfs””
1 | java复制代码**详见 3.2** |
五 . Flannel 安装
5.1 什么是 Fiannel ?
1 | java复制代码Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。 |
5.2 Flannel 的安装
1 | java复制代码 |
5.3 “Unable to update cni config” err=”no networks found in /etc/cni/net.d”
注意 ,此处有2种场景 :
场景一 : Master 出现该问题 , flannel 可能版本和 K8S 不匹配 , 我使用的 K8S 为 1.21 , 重新安装 0.13 的 flannel 后正常
场景二 : node 出现该问题 , 原因为 node 节点缺少 cni @ blog.csdn.net/u010264186/…
- 复制 master cni 文件到 node 中 : scp -r master:/etc/cni /etc/
- 重启 : systemctl daemon-reload && systemctl restart kubelet
核心关键在 cni 文件的创建 ,成功后会在 /etc/cni/net.d 下出现一个 10-flannel.conflist 文件夹
六 . 问题及排查流程
6.1 Master kubelet 问题异常排查步骤 (以 bind: cannot assign requested address 为例)
如果上述的问题解决方案还是无法解决你的问题 , 你可能需要自行排查和定义相关的问题
通常问题会处在 init 环节中 , 如果在之前 ,大概率是镜像地址的问题 , 自行调整
问题详情: init 初始化出现问题 , 始终执行失败
解决思路:
- 判断 Docker 运行情况
- 查看对应 pod log
- 根据 log 解决问题
1 | js复制代码// Step 1 : 查看 Docker 运行情况 |
七 . 操作命令补充
7.1 完全卸载 Kubernetes
1 | java复制代码# 卸载服务 |
7.2 API Server
1 | java复制代码https://youKurbernatesHost:6443/ |
7.3 Master 常见命令
1 | java复制代码显示 Token 列表 : kubeadm token list |
总结
虽然Kubernetes 每次都是一样的流程部署 ,但是每次都会出现各种各样的问题...
零零碎碎记录了这么多, 后续继续补充 TODO
附录
kube-flannel.yml 文件
原版的 URL 还是存在问题 , 主要修改 quay-mirror.qiniu.com/coreos/flannel:v0.13.0-ppc64le
1 | yml复制代码--- |
参考和感谢
本文转载自: 掘金