Linux上部署Kubectl(k8s)

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。

Linux上部署Kubectl(k8s)_第1张图片

1.1.2 Deployment

Deployment负责创建和更新应用程序的实例。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的实例。这提供了一种自我修复机制来解决机器故障维护问题。

可以使用Kubernetes命令行界面Kubectl创建和管理Deployment。Kubectl使用Kubernetes API与集群进行交互。

Linux上部署Kubectl(k8s)_第2张图片

1.1.3 Pod

Pod相当于逻辑主机的概念,负责托管应用实例。包括一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源(共享存储、网络、运行信息等)。

Linux上部署Kubectl(k8s)_第3张图片

1.1.4 Service

Service是一个抽象层,它定义了一组Pod的逻辑集,并为这些Pod支持外部流量暴露、负载平衡和服务发现。

尽管每个Pod 都有一个唯一的IP地址,但是如果没有Service,这些IP不会暴露在群集外部。Service允许您的应用程序接收流量。Service也可以用在ServiceSpec标记type的方式暴露,type类型如下:

  • ClusterIP(默认):在集群的内部IP上公开Service。这种类型使得Service只能从集群内访问。
  • NodePort:使用NAT在集群中每个选定Node的相同端口上公开Service。使用:从集群外部访问Service。是ClusterIP的超集。
  • LoadBalancer:在当前云中创建一个外部负载均衡器(如果支持的话),并为Service分配一个固定的外部IP。是NodePort的超集。
  • ExternalName:通过返回带有该名称的CNAME记录,使用任意名称(由spec中的externalName指定)公开Service。不使用代理。

Linux上部署Kubectl(k8s)_第4张图片

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 离线资源包,如下图所示:

选择导入

Linux上部署Kubectl(k8s)_第5张图片

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

    重要

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

Linux上部署Kubectl(k8s)_第6张图片

Linux上部署Kubectl(k8s)_第7张图片

Linux上部署Kubectl(k8s)_第8张图片

4.规划并安装集群

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

  • 集群名称: 自定义名称,本文中填写为 kuboard123,此名称不可以修改;
  • 资源包:选择前面步骤中导入的离线资源包。

Linux上部署Kubectl(k8s)_第9张图片

添加完成之后

Linux上部署Kubectl(k8s)_第10张图片

注意事项

  • 最少的节点数量是 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 离线资源包中。

点击上图的 保存 按钮,再点击 执行 按钮,可以启动集群的离线安装过程,如下图所示:

选择添加节点

Linux上部署Kubectl(k8s)_第11张图片

这边输入一台什么都没有装的服务器

Linux上部署Kubectl(k8s)_第12张图片

然后点保存

Linux上部署Kubectl(k8s)_第13张图片

需要注意的是:Centos的镜像需要为以下版本

Linux上部署Kubectl(k8s)_第14张图片

分别在以下这三个节点

Linux上部署Kubectl(k8s)_第15张图片

设置下这个

Linux上部署Kubectl(k8s)_第16张图片

Linux上部署Kubectl(k8s)_第17张图片

出现这个界面表示你k8s已经搭建成功!!!

个人搭建项目代码地址:
https://github.com/hongjiatao/spring-boot-anyDemo

欢迎收藏点赞三连。谢谢!有问题可以留言博主会24小时内无偿回复。

你可能感兴趣的:(Kubernetes专栏,kubernetes,linux,docker)