Kubernetes(k8s)学习笔记(七)--KubeSphere 最小化安装

前情提要

可视化操作面板对于开发、运维绝对是提升工作效率的一大利器,因此很有必要搭建一套可视化操作来管理Kubernetes。

可视化面板有多种:

1.Kubernetes官方提供的默认面板:dashboard,用处不大,放弃;
2.Kuboard 也很不错, 集群要求不高,可通过访问https://kuboard.cn/support/作进一步了解;3.Kubesphere 集成了很多套件, 集群要求较高,可通过访问https://kubesphere.io/作进一步了解。

本文主要围绕KubeSphere进行讲解。

 简介


KubeSphere 是一款面向云原生设计的开源项目, 在目前主流容器调度平台 Kubernetes 之上构建的分布式多租户容器管理平台, 提供简单易用的操作界面以及向导式操作方式, 在降低用户使用容器调度平台学习成本的同时, 极大降低开发、 测试、 运维的日常工作的复杂度。

安装前置环境

主要是安装helm,tiller和openebs,这个在上一篇中已完成。

然后是最小化安装 kubesphere,本文要介绍的。

须确保集群可用的资源符合 CPU > 1 Core, 可用内存 > 2 G

下面具体的搭建的过程

搭建过程


1.创建一个kubesphere-mini.yaml文件

并写入下面的内容 :

---
apiVersion: v1
kind: Namespace
metadata:name: kubesphere-system---
apiVersion: v1
data:ks-config.yaml: |---persistence:storageClass: ""etcd:monitoring: FalseendpointIps: 192.168.0.7,192.168.0.8,192.168.0.9port: 2379tlsEnable: Truecommon:mysqlVolumeSize: 20GiminioVolumeSize: 20GietcdVolumeSize: 20GiopenldapVolumeSize: 2GiredisVolumSize: 2Gimetrics_server:enabled: Falseconsole:enableMultiLogin: False  # enable/disable multi loginport: 30880monitoring:prometheusReplicas: 1prometheusMemoryRequest: 400MiprometheusVolumeSize: 20Gigrafana:enabled: Falselogging:enabled: FalseelasticsearchMasterReplicas: 1elasticsearchDataReplicas: 1logsidecarReplicas: 2elasticsearchMasterVolumeSize: 4GielasticsearchDataVolumeSize: 20GilogMaxAge: 7elkPrefix: logstashcontainersLogMountedPath: ""kibana:enabled: Falseopenpitrix:enabled: Falsedevops:enabled: FalsejenkinsMemoryLim: 2GijenkinsMemoryReq: 1500MijenkinsVolumeSize: 8GijenkinsJavaOpts_Xms: 512mjenkinsJavaOpts_Xmx: 512mjenkinsJavaOpts_MaxRAM: 2gsonarqube:enabled: FalsepostgresqlVolumeSize: 8Giservicemesh:enabled: Falsenotification:enabled: Falsealerting:enabled: False
kind: ConfigMap
metadata:name: ks-installernamespace: kubesphere-system---
apiVersion: v1
kind: ServiceAccount
metadata:name: ks-installernamespace: kubesphere-system---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:creationTimestamp: nullname: ks-installer
rules:
- apiGroups:- ""resources:- '*'verbs:- '*'
- apiGroups:- appsresources:- '*'verbs:- '*'
- apiGroups:- extensionsresources:- '*'verbs:- '*'
- apiGroups:- batchresources:- '*'verbs:- '*'
- apiGroups:- rbac.authorization.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiregistration.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiextensions.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- tenant.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- certificates.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- devops.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- monitoring.coreos.comresources:- '*'verbs:- '*'
- apiGroups:- logging.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- jaegertracing.ioresources:- '*'verbs:- '*'
- apiGroups:- storage.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- admissionregistration.k8s.ioresources:- '*'verbs:- '*'---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: ks-installer
subjects:
- kind: ServiceAccountname: ks-installernamespace: kubesphere-system
roleRef:kind: ClusterRolename: ks-installerapiGroup: rbac.authorization.k8s.io---
apiVersion: apps/v1
kind: Deployment
metadata:name: ks-installernamespace: kubesphere-systemlabels:app: ks-install
spec:replicas: 1selector:matchLabels:app: ks-installtemplate:metadata:labels:app: ks-installspec:serviceAccountName: ks-installercontainers:- name: installerimage: kubesphere/ks-installer:v2.1.1imagePullPolicy: "Always"

2.执行apply命令

#KubeSphere 最小化安装:
kubectl apply -f kubesphere-mini.yaml

 3.检查kubesphere pod启动运行情况

执行下面的命令,观察kubesphere相关pods启动情况,确保所有的都处于Running状态

kubectl get pods --all-namespaces


如果哪个pod失败,使用下面的命令找出失败的原因

# pod替换为失败的pod名,n后面的参数换成对应的命名空间
kubectl describe pod default-http-backend-5d464dd566-wtr98 -n kubesphere-controls-system

 如果失败的原因是ImagePullBackOff,可以使用这个命令,找到需要的镜像

# pod和n 后面的参数替换为失败的pod名和对应的命名空间
kubectl describe pod  node-exporter-kjs4p -n kubesphere-monitoring-system | grep -A5 "Containers"

 像上图中出现一个pod:default-http-backend镜像拉取失败,最后试了这个才拉取到本地

registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4

拉取到以后需要打标签,伪装成mirrorgooglecontainers/defaultbackend-amd64:1.4

拉取和打标签通过下面的命令来实现:

# 拉镜像

docker pull registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4

# 打标签

docker tag registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4 mirrorgooglecontainers/defaultbackend-amd64:1.4

然后删除失败的pod进行重建,注意替换pod后面的参数自己的Pod名,n后面的参数为自己的命名空间

kubectl delete pod  default-http-backend-5d464dd566-z2bt2 -n kubesphere-controls-system

 删除后重建如果还是失败上面提到的命令再次查看原因,注意查看输出的原因分析的Event部分

Events:
  Type     Reason     Age                  From                Message
  ----     ------     ----                 ----                -------
  Normal   Scheduled  <unknown>            default-scheduler   Successfully assigned kubesphere-controls-system/default-http-backend-5d464dd566-9dqlz to k8s-node2
  Warning  Failed     74s (x2 over 3m38s)  kubelet, k8s-node2  Failed to pull image "mirrorgooglecontainers/defaultbackend-amd64:1.4": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     74s (x2 over 3m38s)  kubelet, k8s-node2  Error: ErrImagePull
  Normal   BackOff    59s (x2 over 3m37s)  kubelet, k8s-node2  Back-off pulling image "mirrorgooglecontainers/defaultbackend-amd64:1.4"
  Warning  Failed     59s (x2 over 3m37s)  kubelet, k8s-node2  Error: ImagePullBackOff
  Normal   Pulling    47s (x3 over 6m4s)   kubelet, k8s-node2  Pulling image "mirrorgooglecontainers/defaultbackend-amd64:1.4"
 

从上面输出可以看出

Pod 被调度到了 node2,但 node2 去拉镜像时失败了(因为网络问题,连不上 Docker Hub)。

问题本质

只在 k8s-node1docker pulldocker tag 了镜像,
但是 k8s-node2 也要这个镜像,它自己本地没有,所以还会去拉。
Kubernetes 不会自动把 node1 的镜像复制给 node2

因此需要在k8s-node2上执行下面的命令

# 拉镜像

docker pull registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4

# 打标签

docker tag registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4 mirrorgooglecontainers/defaultbackend-amd64:1.4

 验证本地是否有相关镜像

docker images | grep defaultbackend

 输出下图的提示才正常

[root@k8s-node2 ~]# docker images | grep defaultbackend
mirrorgooglecontainers/defaultbackend-amd64                          1.4                 846921f0fe0e        7 years ago         4.84MB
registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64   1.4                 846921f0fe0e        7 years ago         4.84MB

 如果本地有镜像但还是ImagePullBackOff,需要使用下面的命令指定imagePullPolicy: IfNotPresent

kubectl -n kubesphere-controls-system patch deployment default-http-backend -p '{"spec":{"template":{"spec":{"containers":[{"name":"default-http-backend","imagePullPolicy":"IfNotPresent"}]}}}}'

经过上面的处理,再次查看kubesphere所有pod的状态,全部变为Running状态了

还可以使用下面的命令查看安装日志,整个过程所需时间跟网络紧密相关, 请耐心等待安装成功:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

 当所有kubesphere pod都处于Running状态时,就可以使用浏览器访问kubesphere了,kubeSphere v2.x默认的账号为admin,密码为P@88w0rd,因此使用这个它们即可登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCP连接Agent:AI时代的TCP/IP

介绍 2023年&#xff0c;生成式AI爆发。2024年&#xff0c;智能体&#xff08;Agent&#xff09;接棒成为AI新焦点。2025年&#xff0c;智能体似乎已经要开始爆发了。目前的智能体更像一个“单机App”&#xff1a;彼此不了解、无法通信&#xff0c;更不能协作。类似互联网早期…

交换机工作原理(MAC地址表、VLAN)

目录 一、交换机的基本工作原理 数据帧的转发 MAC地址表的作用 交换机的转发方式 二、VLAN&#xff08;虚拟局域网&#xff09; VLAN的定义 VLAN的作用 VLAN的实现方式 VLAN的帧标记 VLAN的通信 三、交换机与VLAN的结合 四、交换机与VLAN的实际应用场景 交换机是局…

eFish-SBC-RK3576工控板外部RTC测试操作指南

备注&#xff1a; 1&#xff09;测试时一定要接电池&#xff0c;否则外部RTC断电后无法工作导致测试失败&#xff1b; 2&#xff09;如果连接了网络&#xff0c;系统会自动同步NTP时钟&#xff0c;所以需要关闭自动同步时钟。 关闭自动同步NTP时钟方法&#xff1a; 先查看是…

淘宝按图搜索商品(拍立淘)Java 爬虫实战指南

在电商领域&#xff0c;按图搜索商品功能为用户提供了更直观、便捷的购物体验。淘宝的拍立淘功能更是凭借其强大的图像识别技术&#xff0c;成为许多开发者和商家关注的焦点。本文将详细介绍如何利用 Java 爬虫技术实现淘宝按图搜索商品功能&#xff0c;包括注册账号、上传图片…

【Redis】List类型

文章目录 List的特点介绍lpush&#xff0c;lpushx&#xff0c;rpush&#xff0c;rpushx命令lrange命令lpop和rpoplindex命令linsert命令llen命令lrem 命令ltrim命令lset命令阻塞版本的命令blpop和brpop 命令小结list的内部编码List的应用场景 List的特点介绍 列表相当于一个数…

QT:qt5调用打开exe程序并获取调用按钮控件实例2025.5.7

为实现在 VS2015 的 Qt 开发环境下打开外部 exe&#xff0c;列出其界面按钮控件的序号与文本名&#xff0c;然后点击包含特定文本的按钮控件。以下是更新后的代码&#xff1a; #include <QCoreApplication> #include <QProcess> #include <QDebug> #include…

基于Jenkins的DevOps工程实践之Jenkins共享库

文章目录 前言Jenkins共享库结构1、共享库演示2、知识点补充3、实践使用共享库格式化输出日志4、groovy基础语法4.1、 什么是 Groovy&#xff1f;4.2、groovy特点4.3、运行方法4.4、标识符4.5、基本数据类型4.5.1、string类型4.5.2、list类型 4.6、函数使用4.7、正则表达式 5、…

【Qt4】Qt4中实现PDF预览

方案一&#xff1a; 在Qt4中预览PDF文件&#xff0c;你可以使用多种方法&#xff0c;但最常见和简单的方法之一是使用第三方库。Qt本身并没有内置直接支持PDF预览的功能&#xff0c;但你可以通过集成如Poppler、MuPDF等库来实现这一功能。下面我将展示如何使用Poppler库在Qt4中…

php artisan resetPass 执行密码重置失败的原因?php artisan resetPass是什么 如何使用?-优雅草卓伊凡

php artisan resetPass 执行密码重置失败的原因&#xff1f;php artisan resetPass是什么 如何使用&#xff1f;-优雅草卓伊凡 可能的原因 命令不存在&#xff1a;如果你没有正确定义这个命令&#xff0c;Laravel 会报错而不是提示”重置密码失败”用户不存在&#xff1a;’a…

ai说什么是注解,并以angular ts为例

在编程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一种特殊的语法结构&#xff0c;用于为代码添加元数据&#xff08;metadata&#xff09;&#xff0c;从而在不修改代码逻辑的情况下&#xff0c;提供额外的信息或指示编译器、框架、工具如何处理这些代码。注解通…

【MySQL】-- 联合查询

文章目录 1. 简介1.1 为什么要使用联合查询1.2 多表联合查询时MySQL内部是如何进行计算的 2. 内连接2.1 语法2.2 示例 3. 外连接3.1 语法3.2 示例 4. 自连接4.1 应用场景4.2 示例4.3 表连接练习 5. 子查询5.1 语法5.2 单行子查询5.3 多行子查询5.4 多列子查询5.5 在from 子句中…

【多线程】六、基于阻塞队列的生产者消费者模型

文章目录 Ⅰ. 生产者消费者模型的概念Ⅱ. 生产者消费者模型的优点Ⅲ. 基于阻塞队列的生产者消费者模型MakefileBlock_queue.hpptask.hpptest.cpp Ⅳ. 如何理解提高了效率❓❓❓ Ⅰ. 生产者消费者模型的概念 ​ 生产者消费者模型是一种常见的并发模式&#xff0c;用于解决生产者…

【Vue】全局事件总线 TodoList 事件总线

目录 一、 实现所有组件看到x事件 二、 实现$on $off 以及 $emit 总结不易~ 本章节对我有很大的收获&#xff0c; 希望对你也是&#xff01;&#xff01;&#xff01; 本节素材已上传至Gitee&#xff1a;yihaohhh/我爱Vue - Gitee.com 全局事件总线图&#xff1a; 本节素材…

Python编程virtualenv库的简介和使用方法

Python编程virtualenv库的简介和使用方法 virtualenv和conda的区别是什么

MySQL的行级锁锁的到底是什么?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL的行级锁锁的到底是什么?】面试题。希望对大家有帮助&#xff1b; MySQL的行级锁锁的到底是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL的行级锁是数据库管理系统&#xff08;DBMS&#xff09;的一…

【C++游戏引擎开发】第33篇:物理引擎(Bullet)—射线检测

一、射线检测核心理论体系 1.1 射线检测的数学基础 1.1.1 参数化射线方程 射线在三维空间中的数学表达采用参数方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系统】线程崩溃机制详解

在分布式系统与多线程编程的世界里&#xff0c;一个看似简单的问题却暗藏玄机&#xff1a;当某条线程突然崩溃&#xff0c;其所属进程会随之消亡吗&#xff1f;这个问题背后隐藏着操作系统与编程语言的精妙设计&#xff0c;本文将从底层原理到工程实践层层剖析。 一、线程崩溃…

无人机 | 无人机设计概述

无人机设计是一个复杂的系统工程&#xff0c;涉及空气动力学、电子技术、材料科学、控制算法等多个领域的综合应用。以下是无人机设计的主要模块和关键要素概述&#xff1a; 一、总体设计目标 任务需求定义 用途&#xff1a;航拍、物流、农业、军事侦察、环境监测等性能指标&am…

强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 从 Oracle Database 23ai 开始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不…

Modbus 转 IEC61850 网关

第一章 产品概述 Modbus 转 IEC61850 网关型号 SG-IEC61850-Modbus &#xff0c;是三格电子推出的工业级网关&#xff08;以 下简称盒子或网关&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 数据采集、 DLT645-1997/2007 数据采集&#xff0c; 可接多功能电力仪表…