Kubernetes

1.Kubernetes概述

K8S优势

  • 自动装箱,水平扩展、自我修复

  • 服务发现和负载均衡

  • 自动发布(默认滚动发布模式)和回滚

  • 集中化配置管理和秘钥管理

  • 存储编排

  • 任务批处理运行

  • ...

2.K8S快速入门

四组概念

  • Pod/Pod控制器

  • Name/Namespace

  • Label/Label选择器

  • Service/Ingress

2.1.Pod

  • Pod

    • Pod是K8S里能够被运行的最小的逻辑单元(原子单位)

    • 1个Pod里面可以运行多个容器,它们共享UTS+NET+IPC名称空间

      • UTS命名空间用于隔离主机名和域名

      • NET命名空间用于隔离网络接口和网络栈

      • IPC命名空间用于隔离进程间通信资源

    • 可以把Pod理解成豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆

    • 一个Pod里面运行容器,又叫边车(SideCar)模式

  • Pod控制器

    • Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod应始终安装人们的预期运行(副本数、声明周期、健康状态检查)

    • K8S内提供了众多的Pod控制器,常用的有

      • Deployment:无状态的服务部署

      • DaemonSet:确保所有(或某些)节点运行一个Pod的副本

      • ReplicaSet:负责维护集群中运行的Pod数量

      • StatefulSet:有状态的服务部署

      • Job:任务

      • Cronjob:定时周期任务

      • Nod:监控节点状态,并在节点出现故障时及时做出响应

2.2.Name

  • Name

    • 由于K8S内部,使用"资源"来定义每一种逻辑概念(功能),故每种"资源"都应该有自己的名称

    • "资源"有api版本(apiVersion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息

    • "名称"通常定义在"资源"的"元数据"信息里

  • Namespace

    • 随着项目增多、人员增加、集群规模的扩大,需要一种能隔离K8S内各种"资源"的方法,这就是名称空间

    • 名称空间可以理解为K8S内部的虚拟集群组

    • 不同名称空间内的"资源",名称可以相同,相同名称空间内的同种"资源","名称"不能相同

    • 合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理浏览

    • 查询K8S里特定"资源"要带上相应的名称空间

    • K8S里默认存在的名称空间有:default、kebu-system、kebu-public、kubu-node-lease

      • default:默认的Namespace,用于存放没有指定Namespace的对象。

      • kube-system:用于存放Kubernetes系统组件创建的对象。

      • kube-public:用于存放公共资源,所有用户(包括未经身份验证的用户)都可以访问。

      • kube-node-lease:用于存放与节点心跳相关的Lease对象。

    • 可以使用kubectl get namespaces命令查看集群中所有可用的Namespace

2.3.Label

  • Label

    • 标签是K8S特色的管理方式,便于分类管理资源对象

    • 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系

    • 一个资源拥有多个标签,可以实现不同纬度的管理

    • 标签的组成:key=value

    • 与标签类似的,还有一种"注释"(annotations)

      • Annotations不用于选择和查找对象,而是用于存储额外的信息,以便工具和库能够检索它们。

  • Label选择器

    • 给资源打上标签后,可以使用标签选择器过滤指定的标签

    • 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)

    • 许多资源支持内嵌标签选择器字段

      • matchLacels

      • matchExpressions

2.4.Service

  • Service

    • 在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失

    • Service(服务)就是用来解决这个问题的核心概念

    • 一个Service可以看做一组提供相关服务的Pod的对外访问接口

    • Service作用域那些Pod是通过标签选择器来定义的

  • Ingress

    • Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口

    • Service只能进行L4流量调度,表现形式是ip+port

    • Ingress则可以调度不同业务域、不同URL访问路径的业务流量

2.5.K8S架构

  • K8S网络

    • Node网络

    • Pod网络

    • Service网络

  • 核心组件

    • 配置存储中心--->etcd服务

      • 为了高可用性,最好配置奇数个

    • 主控(master)节点

      • kube-apiserver服务

      image-20230501203640947
      • kube-controller-manager服务

      image-20230501203743732
      • kube-scheduler服务

      image-20230501203854799
    • 运算(node)节点

      • kubu-kubelet服务

      image-20230501204144365
      • kubu-proxy服务

      image-20230501204306437
  • CLI客户端

    • kubectl

  • 核心组件

    • CNI网络插件--->flannel/calico

    • 服务发现用插件--->coredns

    • 服务暴露用插件--->traefik

    • GUI管理插件--->Dashboard

image-20230501205500801

3.K8S集群架构

image-20230502104836658

3.1.常见的K8S安装部署方式

  1. 单节点微型K8S(仅供学习、预览使用)

  1. 二进制安装部署(生成首选,新手推荐)

  2. 使用Kubeadmin进行部署,K8S的部署工具,跑在K8S里(相对简单,熟手推荐)

3.2.部署准备

  • 准备五台虚拟机

  • 关闭防火墙并安装阿里源和epel源

  • 安装必要工具

1.搭建DNS服务

  • 安装bind服务

  • 配置DNS

  • 验证解析

  • 更改客户端DNS

2.准备签发证书环境

200

  • 安装证书签发工具CFSSL

  • 签发根证书

  • 签发承载式证书

3.部署docker环境

21、22、200

  • 部署docker环境

  • 编辑配置文件

4.部署harbor

200

  • 安装部署harbor

  • 安装nginx做反向代理

  • 配置DNS,并使用harbor

3.3.搭建K8S

1.搭建etcd集群

12/21/22

  • 签署etcd证书

  • 部署etcd服务

  • 检查etcd服务是否正常运行

2.部署kubu-apiserver集群

21/22安装kubu-apiserver,11/12使用nginx做4层负载均衡器

最后更新于