K8S搭建

文章目录

  • K8S搭建
      • 配置要求
    • 安装 Kuboard-Spray
    • 加载离线资源包
    • 规划并安装集群
    • 访问集群
    • 重启Kubernetes集群
      • Worker节点不能启动
      • 许多Pod一直Crash或不能正常访问
    • containerd配置网络代理
  • 常用的 kubectl 命令:

K8S搭建

安装高可用的Kubernetes集群

配置要求

对于 Kubernetes 初学者,在搭建K8S集群时,推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)

  • 至少 2 台 2核4G 的服务器
  • 本文档中,CPU 必须为 x86 架构,暂时未适配 arm 架构的 CPU
  • CentOS 7.8CentOS 7.9Ubuntu 20.04

操作系统兼容性

CentOS 版本本文档是否兼容备注
CentOS 7.9😄已验证
CentOS 7.8😄已验证
Ubuntu 20.04😄已验证

安装 Kuboard-Spray

  • 取一台服务器或虚拟机,执行一条命令,即可完成 Kuboard-Spray 的安装。

    对这台服务器的最低要求为:

    • 1核2G
    • 不少于 10G 磁盘空余空间
    • 已经安装好 docker

    待执行的命令如下:

    docker run -d \--privileged \--restart=unless-stopped \--name=kuboard-spray \-p 80:80/tcp \-v /var/run/docker.sock:/var/run/docker.sock \-v ~/kuboard-spray-data:/data \eipwork/kuboard-spray:latest-amd64# 如果抓不到这个镜像,可以尝试一下这个备用地址:# swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
    

    持久化

    • KuboardSpray 的信息保存在容器的 /data 路径,请将其映射到一个您认为安全的地方,上面的命令中,将其映射到了 ~/kuboard-spray-data 路径;
    • 只要此路径的内容不受损坏,重启、升级、重新安装 Kuboard-Spray,或者将数据及 Kuboard-Spray 迁移到另外一台机器上,您都可以找回到原来的信息。
  • 在浏览器打开地址 http://这台机器的IP,输入用户名 admin,默认密码 Kuboard123,即可登录 Kuboard-Spray 界面。

加载离线资源包

  • 在 Kuboard-Spray 界面中,导航到 系统设置 --> 资源包管理 界面,可以看到已经等候您多时的 Kuboard-Spray 离线资源包,如下图所示:
    在这里插入图片描述

  • 点击 导 入 按钮,在界面的引导下完成资源包的加载。

    重要

    • 权限问题
      • 导入资源包时,可能会碰到 no such file or directory 或者 permission denied 之类的错误提示,通常是因为您开启了 SELinux,导致 kuboard-spray 不能读取映射到容器 /data 的路径
    • 离线导入
      • 如果您处在内网环境,上图中的列表默认将是空的,请注意其中的 离线加载资源包 按钮,它可以引导您轻松完成资源包的离线加载过程。

规划并安装集群

  • 在 Kuboard-Spray 界面中,导航到 集群管理 界面,点击界面中的 添加集群安装计划 按钮,填写表单如下:

    • 集群名称: 自定义名称,本文中填写为 kuboard123,此名称不可以修改;

    • 资源包:选择前面步骤中导入的离线资源包。
      在这里插入图片描述

    • 点击上图对话框中的 确定 按钮后,将进入集群规划页面,在该界面中添加您每个集群节点的连接参数并设置节点的角色,如下图所示:

      重要: kuboard-spray 所在机器不能当做 K8S 集群的一个节点,因为安装过程中会重启集群节点的容器引擎,这会导致 kuboard-spray 被重启掉。
      在这里插入图片描述

      注意事项

      • 最少的节点数量是 1 个;

      • ETCD 节点、控制节点的总数量必须为奇数;

      • 全局设置 标签页,可以设置节点的通用连接参数,例如所有的节点都使用相同的 ssh 端口、用户名、密码,则共同的参数只在此处设置即可;

      • 在节点标签页,如果该节点的角色包含 etcd 则必须填写 ETCD 成员名称 这个字段;

      • 如果您 KuboardSpray 所在节点不能直接访问到 Kubernetes 集群的节点,您可以设置跳板机参数,使 KuboardSpray 可以通过 ssh 访问集群节点。

      • 集群安装过程中,除了已经导入的资源包以外,还需要使用 yum 或 apt 指令安装一些系统软件,例如 curl, rsync, ipvadm, ipset, ethtool 等,此时要用到操作系统的 apt 软件源或者 yum 软件源。全局设置 标签页中,可以引导您完成 apt / yum 软件源的设置,您可以:

        • 使用节点操作系统已经事先配置的 apt / yum 源,或者
        • 在安装过程中自动配置节点的操作系统使用指定的软件源
      • 如果您使用 docker 作为集群的容器引擎,还需要在全局设置 标签页指定安装 docker 用的 apt / yum 源。

        如果您使用 containerd 作为容器引擎,则无需配置 docker 的 apt / yum 源,containerd 的安装包已经包含在 KuboardSpray 离线资源包中。

    • 点击上图的 保存 按钮,再点击 执行 按钮,可以启动集群的离线安装过程,如下图所示:
      在这里插入图片描述

    • 取决于您机器的性能和网络访问速度,大概喝一杯茶的功夫,集群就安装好了,安装成功时,日志界面的显示如下图所示:
      在这里插入图片描述

访问集群

  • 如果集群日志界面提示您集群已经安装成功,此时您可以返回到集群规划页面,此界面将自动切换到 访问集群 标签页,如下图所示:

    界面给出了三种方式可以访问 kubernetes 集群:

    • 在集群主节点上执行 kubectl 命令
    • 获取集群的 .kubeconfig 文件
    • 将集群导入到 kuboard管理界面
      在这里插入图片描述

重启Kubernetes集群

Kubernetes集群的设计目标是setup-and-run-forever,然而许多学习者使用自己笔记本上的虚拟机安装K8S集群用于学习,这就必然会出现反复重启集群所在虚拟机的情况。本文针对重启后会出现一些的一些令人困惑的问题做了解释。

Worker节点不能启动

Master 节点的 IP 地址变化,导致 worker 节点不能启动。请重装集群,并确保所有节点都有固定内网 IP 地址。

许多Pod一直Crash或不能正常访问

kubectl get pods --all-namespaces

重启后会发现许多 Pod 不在 Running 状态,此时,请使用如下命令删除这些状态不正常的 Pod。通常,您的 Pod 如果是使用 Deployment、StatefulSet 等控制器创建的,kubernetes 将创建新的 Pod 作为替代,重新启动的 Pod 通常能够正常工作。

kubectl delete pod <pod-name> -n <pod-namespece>

containerd配置网络代理

没有配置containerd运行时代理设置。因为K8使用containerd运行时拉取图像。如果您的PC位于代理之后,如果它不直接使用代理系统设置(例如docker,containerd等),您应该始终配置应用设置。

sudo mkdir -p /etc/systemd/system/containerd.service.d
sudo touch /etc/systemd/system/containerd.service.d/http-proxy.conf
vi /etc/systemd/system/containerd.service.d/http-proxy.conf
# 在http-proxy.conf里写入以下配置
[Service]
Environment="HTTP_PROXY=http://xx.x.xx.xxx:xxxx/" "HTTPS_PROXY=http://xx.x.xx.xxx:xxxx/" 
"NO_PROXY=localhost,127.0.0.1,192.168.182.xxx"
# 重启containerd服务
sudo systemctl daemon-reload
sudo systemctl restart containerd 	
sudo systemctl show --property=Environment containerd

常用的 kubectl 命令:

  1. kubectl get: 获取资源列表

    • kubectl get pods: 获取 Pod 列表
    • kubectl get nodes: 获取节点列表
    • kubectl get services: 获取服务列表
    • kubectl get deployments: 获取部署列表
  2. kubectl describe: 显示资源的详细信息

    • kubectl describe pod <pod-name>: 显示 Pod 的详细信息
    • kubectl describe node <node-name>: 显示节点的详细信息
    • kubectl describe service <service-name>: 显示服务的详细信息
  3. kubectl create: 创建资源

    • kubectl create deployment <name> --image=<image>: 创建一个部署
    • kubectl create service <name> --tcp=<port>:<targetPort>: 创建一个服务
  4. kubectl delete: 删除资源

    • kubectl delete pod <pod-name>: 删除 Pod
    • kubectl delete deployment <deployment-name>: 删除部署
    • kubectl delete service <service-name>: 删除服务
  5. kubectl exec: 在容器内执行命令

    • kubectl exec -it <pod-name> -- <command>: 在 Pod 内执行命令
  6. kubectl logs: 获取容器日志

    • kubectl logs <pod-name>: 获取 Pod 的日志
  7. kubectl apply: 应用配置文件

    • kubectl apply -f <filename>: 应用配置文件
  8. kubectl scale: 调整副本数

    • kubectl scale deployment <deployment-name> --replicas=<replica-count>: 调整部署的副本数
  9. kubectl rollout: 管理滚动更新

    • kubectl rollout status deployment/<deployment-name>: 查看滚动更新状态
    • kubectl rollout history deployment/<deployment-name>: 查看滚动更新历史
    • kubectl rollout undo deployment/<deployment-name>: 回滚滚动更新
  10. kubectl port-forward: 将本地端口映射到 Pod 端口

    • kubectl port-forward <pod-name> <local-port>:<pod-port>: 将本地端口映射到 Pod 的端口

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

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

相关文章

【Linux】高效文本处理命令

目录 一.sort命令&#xff08;排序&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 二.unip命令&#xff08;去重&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 三.tr命令&#xff08;替换&#xff09; 1.语法格式 2.常用选项 3.相关示例…

TiDB学习2:TiDB Sever

目录 1. TiDB Server架构 2. sql语句的解析和编译 2.1 Parse ​编辑 2.2 compile 3. 行转化为KV对(聚簇表) ​编辑4. SQL 读写相关模块 4.1 DistSQL(复杂查询) 4.2 KV(简单查询) 5. 在线DDL相关模块 6. GC机制与相关模块 7. TiDB Server的缓存 8. 热点小表缓存 9. …

做好串口控制是源代码防泄密的基础

在信息化时代&#xff0c;数据安全与保密工作的重要性日益凸显。尤其是在涉密单位&#xff0c;如军工、政府、金融等行业&#xff0c;防泄密工作直接关系到国家安全、社会稳定和企业利益。串口作为计算机与外部设备通信的重要接口&#xff0c;其安全性同样不容忽视。本文将探讨…

react18【系列实用教程】useMemo —— 缓存数据 (2024最新版)

为什么添加了 memo &#xff0c;子组件2依然重新渲染了呢&#xff1f; 因为父组件向子组件2传递了引用类型的数据 const userInfo {name: "朝阳",};<Child2 userInfo{userInfo} />memo() 函数的本质是通过校验Props中数据的内存地址是否改变来决定组件是否重新…

TEMU电商行情分析:未来趋势与盈利机遇探讨

近年来&#xff0c;跨境电商行业风起云涌&#xff0c;其中TEMU作为新兴力量&#xff0c;其市场表现备受关注。那么&#xff0c;TEMU电商现在的行情究竟如何?对于卖家而言&#xff0c;是否仍然是一个能够赚钱的平台呢? 首先&#xff0c;从市场趋势来看 TEMU电商正处于一个快速…

vant添加列表, 日期选择总是填充到最后一个组内原因

添加多个行程, 无论在哪个行程上修改时间, 时间总是只显示在最后一个行程里 错误代码: <div class"journey"><divv-for"(item, index) in ruleform.hrms_business_item":key"index"><div class"journey-title">&l…

Linux之函数应用实例--加法器

一、创建一个对2个整数求和的加法器 首先&#xff0c;定义了一个名为 adder 的 Bash 函数&#xff0c;该函数接受两个参数 $1 和 $2 并输出它们的和。 function adder { echo $[ $1$2 ] } 注意&#xff1a; function 关键字是可选的。在 Bash 中&#xff0c;可以简单地使…

前端 JS 经典:数组去重万能方法

前言&#xff1a;只需要掌握这一个方法&#xff0c;就可以对有任何重复的数据数组&#xff0c;进行去重了。 可以自己思考下&#xff0c;怎么对以下对象数组去重&#xff1a; const arr [{ a: 1, b: 2 },{ b: 2, a: 1 },{ a: 1, b: 2, c: { a: 1, b: 2 } },{ b: 2, a: 1, c:…

Geotrust哪种通配符证书800

Geotrust是成立了几十年的CA认证机构&#xff0c;每年都会通过WebTrust审计&#xff0c;旗下拥有各种类型的SSL数字证书产品&#xff0c;例如单域名SSL证书、多域名SSL证书和通配符SSL证书等。而为了更好地区分SSL证书产品&#xff0c;Geotrust旗下还分了几个子品牌&#xff0c…

MySQL存储引擎介绍

查看MySQL数据库中创建表的信息 如上图所示&#xff0c;当我们使用命令show create table server_info\G;可以显示我们所创建的表的信息&#xff0c;只显示两个字段&#xff0c;第一个字段是Table 即是创建的表的名称&#xff0c;第二个字段是Create Table即是创建的表的字段的…

Redis过期删除策略和内存淘汰策略有什么区别?

Redis过期删除策略和内存淘汰策略有什么区别&#xff1f; 前言过期删除策略如何设置过期时间&#xff1f;如何判定 key 已过期了&#xff1f;过期删除策略有哪些&#xff1f;Redis 过期删除策略是什么&#xff1f; 内存淘汰策略如何设置 Redis 最大运行内存&#xff1f;Redis 内…

buildroot添加ssh功能

在制作了自己的buildroot生成的根文件系统之后&#xff0c;是没有ssh服务的&#xff0c;需要自行添加。 在buildroot的menuconfig里&#xff1a; Target packages -> Networking applications -> openssh 重新编译&#xff0c;还不能通过电脑连接&#xff0c;还需配置并…

react 图片没有加载出来的问题

react 图片没有加载出来的问题 我原来是这样写的 <Layout><Sider><imgsrc"../images/login/topdivbg20221202.png"/></Sider><Content><Menu onClick{onClick} selectedKeys{[current]} mode"horizontal" it…

如何进行事务处理

1、问题背景 在数据库存储系统中&#xff0c;事务处理是一种保证多个数据库操作作为单个逻辑单元执行的技术。事务处理可以确保数据的一致性、完整性和隔离性。 在使用 Google Cloud Datastore 时&#xff0c;可以使用 datastore.transaction() 函数来进行事务处理。datastor…

水离子雾化壁炉与会所房间的氛围搭配

水离子雾化壁炉在会所房间的氛围搭配可以为房间增添舒适、温馨和现代感&#xff0c;以下是一些建议&#xff1a; 主题定位&#xff1a; 根据会所房间的主题和定位选择合适的水离子雾化壁炉款式和设计风格。可以是现代简约、欧式古典或是豪华奢华&#xff0c;确保与房间整体风格…

富唯智能复合机器人:CNC铝块上下料安全新标准

在CNC铝块加工过程中&#xff0c;上下料环节的安全问题一直是企业关注的焦点。富唯智能复合机器人的应用&#xff0c;为这一环节树立了新的安全标准。 传统的上下料方式往往依赖于人工操作&#xff0c;存在着较大的安全隐患。而富唯智能复合机器人采用先进的视觉识别技术和精准…

本机搭建RabbitMQ

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、下载安装包&#xff0c;搭建过程 二、重要概念介绍 三、创建用户 方式一&#xff1a;命令行 方式二&#xff1a;管理后台 3.1 创建用户 3.2 分配权限 3.3 提…

2024/5/15 英语每日一段

Many pet owners are now turning to pet insurance policies to avoid higher vet bills should something bad happen unexpectedly. But Carlson said that preventive veterinary care—like vaccination, parasite control and weight management—is "the best way …

工作高效记事软件是什么 好用的高效记事软件

阳光斜洒在办公桌上&#xff0c;我埋头于一堆杂乱的文件中&#xff0c;头脑里充斥着各种待办事项。电话铃声突然响起&#xff0c;是老板打来的&#xff0c;提醒我下午三点有个重要会议。挂断电话后&#xff0c;我赶紧拿起笔想在便签上记下&#xff0c;却发现桌面已经被各种便签…

详解NodeJS事件循环

官网&#xff1a;node官网-事件循环 浏览器中的事件循环是由HTML规范来定义&#xff0c;之后由各浏览器厂商实现的&#xff0c;而node中的事件循环的定义与实现均由libuv引擎完成。 node使用chrome v8引擎作为js解释器&#xff0c;v8引擎分析代码后&#xff0c;主线程立即执行…