Linux上部署Kubectl(k8s)
1.k8s简介
1.1 Kubernetes 概念
在 k8s 上进行部署前,首先需要了解一个基本概念 Deployment
Deployment 译名为 部署。在k8s中,通过发布 Deployment,可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 Pod 的概念中,Pod 是 k8s 中最小可管理单元。
在 k8s 集群中发布 Deployment 后,Deployment 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体的节点上。
创建应用程序实例后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的 worker 节点关机或被删除,则 Kubernetes Deployment Controller 将在群集中资源最优的另一个 worker 节点上重新创建一个新的实例。这提供了一种自我修复机制来解决机器故障或维护问题。
在容器编排之前的时代,各种安装脚本通常用于启动应用程序,但是不能够使应用程序从机器故障中恢复。通过创建应用程序实例并确保它们在集群节点中的运行实例个数,Kubernetes Deployment 提供了一种完全不同的方式来管理应用程序
1.1.1 Node
Kubernetes集群是指Kubernetes协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作。
一个Kubernetes集群包含两种类型的资源:
- Master:负责管理整个集群。协调集群中的所有活动,例如调度应用、维护应用的所需状态、应用扩容以及推出新的更新。
- Node:用于托管正在运行的应用。可以是一个虚拟机或者物理机,它在Kubernetes集群中充当工作机器的角色,每个Node都有Kubelet,它管理Node而且是Node与Master通信的代理,Node还具有用于处理容器操作的工具,例如Docker或rkt。
1.1.2 Deployment
Deployment负责创建和更新应用程序的实例。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的实例。这提供了一种自我修复机制来解决机器故障维护问题。
可以使用Kubernetes命令行界面Kubectl创建和管理Deployment。Kubectl使用Kubernetes API与集群进行交互。
1.1.3 Pod
Pod相当于逻辑主机
的概念,负责托管应用实例。包括一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源(共享存储、网络、运行信息等)。
1.1.4 Service
Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载平衡和服务发现。
尽管每个Pod 都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在群集外部。Service允许您的应用程序接收流量。Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:
- ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。
- NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用
<NodeIP>:<NodePort>
从集群外部访问Service。是ClusterIP的超集。 - LoadBalancer:在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部IP。是NodePort的超集。
- ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开Service。不使用代理。
1.2 Kubernetes 功能
-
服务发现和负载均衡
Kubernetes 可以通过 DNS 名称或 IP 地址暴露容器的访问方式。并且可以在同组容器内分发负载以实现负载均衡
-
存储编排
Kubernetes可以自动挂载指定的存储系统,例如 local stroage/nfs/云存储等
-
自动发布和回滚
您可以在 Kubernetes 中声明您期望应用程序容器应该达到的状态,Kubernetes将以合适的速率调整容器的实际状态,并逐步达到最终期望的结果。请参考 声明式的配置
-
自愈
Kubernetes提供如下自愈能力:
- 重启已经停机的容器
- 替换、kill 那些不满足自定义健康检查条件的容器
- 在容器就绪之前,避免调用者发现该容器
-
密钥及配置管理
Kubernetes可以存储和管理敏感信息(例如,密码、OAuth token、ssh密钥等)。您可以更新容器应用程序的密钥、配置等信息,而无需:
- 重新构建容器的镜像
- 在不合适的地方暴露密码信息
2.安装 Kuboard-Spray(192.168.1.219)
-
取一台服务器或虚拟机,执行一条命令,即可完成 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 界面。
3.加载离线资源包
- 在 Kuboard-Spray 界面中,导航到
系统设置
-->资源包管理
界面,可以看到已经等候您多时的Kuboard-Spray 离线资源包
,如下图所示:
选择导入
-
点击
导 入
按钮,在界面的引导下完成资源包的加载。重要
- 权限问题
- 导入资源包时,可能会碰到
no such file or directory
或者permission denied
之类的错误提示,通常是因为您开启了 SELinux,导致 kuboard-spray 不能读取映射到容器/data
的路径
- 导入资源包时,可能会碰到
- 离线导入
- 如果您处在内网环境,上图中的列表默认将是空的,请注意其中的
离线加载资源包
按钮,它可以引导您轻松完成资源包的离线加载过程。
- 如果您处在内网环境,上图中的列表默认将是空的,请注意其中的
- 权限问题
4.规划并安装集群
在 Kuboard-Spray 界面中,导航到 集群管理
界面,点击界面中的 添加集群安装计划
按钮,填写表单如下:
- 集群名称: 自定义名称,本文中填写为 kuboard123,此名称不可以修改;
- 资源包:选择前面步骤中导入的离线资源包。
添加完成之后
注意事项
-
最少的节点数量是 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 离线资源包中。
点击上图的 保存
按钮,再点击 执行
按钮,可以启动集群的离线安装过程,如下图所示:
选择添加节点
这边输入一台什么都没有装的服务器
然后点保存
需要注意的是:Centos的镜像需要为以下版本
分别在以下这三个节点
设置下这个
出现这个界面表示你k8s已经搭建成功!!!
个人搭建项目代码地址:
https://github.com/hongjiatao/spring-boot-anyDemo
欢迎收藏点赞三连。谢谢!有问题可以留言博主会24小时内无偿回复。