kubernetes

文章目录

  • kubernetes
    • 什么是k8s?
    • 为什么需要K8S?
      • 多机编排管理容器
    • k8s的特性
    • Kubernetes集群架构与组件
    • 核心组件
    • Master组件
      • Kube-apiserver
      • Kube-controller-manager
      • Kube-scheduler
    • 配置存储中心
      • Node组件
      • Kube-Proxy
      • docker或rocketdwf1
      • 小结
    • Kubernetes核心概念
      • Pod
      • Pod控制器
      • Label
      • Label 选择器(Label selector)
      • service
      • Ingress
      • Name
      • Namespace
    • 常见的K8s按照部署方式:
    • Minikube
    • Kubeadmin
    • 二进制安装部署
    • 常见的K8s按照部署方式:
    • Minikube
    • Kubeadmin
    • 二进制安装部署

什么是k8s?

kubernetes 是一个可移植、可扩展的开源平台,用于 管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes 服务、支持和工具随处可见。

Kubernetes 的名字来源于希腊语,意思是舵手或飞行员。K8s 作为缩写的结果来自计算“K”和“s”之间的八个字母。Google 于 2014 年开源了 Kubernetes 项目。Kubernetes 结合了 Google 超过 15 年的大规模运行生产工作负载的经验以及来自社区的最佳创意和实践。

参考文献官网:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/,

主要介绍kubernetes的基本概念以及应用场景,K8s的设计理念,以及K8s能干什么不能干什么。

作用:

用于自动部署、扩展和管理"容器化( containerized)应用程序"的开源系统。
可以理解成KBS是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来:

KBS由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经co语言延用Borg的思路重写并捐献毁CNCF基金会开源。

含义:

词根源于希腊语的舵手、飞行员

为什么需要K8S?

试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。

设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。这样问题就出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?而这就是K8S要做的事情:自动化运维管理容器化(Docker)程序。

K8S的目标是让部署容器化应用简单高效。

K8s解决了裸跑 Docker 的若干痛点:

  • 单机使用,无法有效集群

  • 随着容器数量的上升,管理成本攀升

  • 没有有效的容灾、自愈机制

  • 没有预设编排模板,无法实现快速、大规模容器调度

  • 没有统一的配置管理中心工具

  • 没有容器生命周期的管理工具

  • 没有图形化运维管理工具

K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。

多机编排管理容器

docker swam

apache-mesos

kubernetes

k8s的特性

  1. **弹性伸缩:**使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

  2. **自我修复:**在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

  3. **服务发现和负载均衡:**K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

  4. 自动发布(默认滚动发布模式)和回滚:K8S采用滚动策略更新应用,一个更新一个Pod,而不是同时删除所有的Pod,如果更新过程中出现问题,将回滚更改,确保升级不收影响业务。

  5. **集中化配置管理和密钥管理:**管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8S中,方便应用程序使用。

  6. **存储编排:**支持外挂存储并对外挂存储资源进行编排,挂载外部存储系统,无论是来自本地存储,公有云(如:AWS),还是网络村存储(如:NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

  7. **任务批量处理运行:**提供一次性任务,定时任务,满足批量数据处理和分析的场景。

Kubernetes集群架构与组件

K8S是属于主从设备模型(Master-Slave架构),即有 Master节点负责集群的调度、管理和运维,Slave节点是集群中的运算工作负载节点。

在K8S 中,主节点一般被称为Master节点,而从节点则被称为 worker Node 节点,每个 Node 都会被Master分配一些工作负载。

Master组件可以在群集中的任何计算机上运行,但建议Master节点占据一个独立的服务器。因为Master
是整个集群的大脑,如果Master所在节点宕机或不可用,那么所有的控制命令都将失效。除了Master,在K8S
集群中的其他机器被称为Worker Node节点,当某个Node 宕机时,其上的工作负载会被Master自动转移到其他节点上去。

核心组件

Master组件

Kube-apiserver

用于暴露Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver提供的接口进行。以HTTP Restful API提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给 Etcd存储。
可以理解成API Server 是KBS 的请求入口服务。API Server 负责接收K8S所有请求(来自UI界面或者CLIT命令行工具),然后根据用户的具体请求,去通知其他组件干活。可以说**API Server 是K8S集群架构的大脑。**

Kube-controller-manager

运行管理控制器,是K8S集群中处理常规任务的后台线程,是K8S集群里所有资源对象的自动化控制中心。在K8s集群中,一个资源对应一个控制器,而 Controller manager就是负责管理这些控制器的。

由一系列控制器组成,通过 API Server监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个Node意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态

这些控制器主要包括: