首页 > 其他分享 >k8s结构设计

k8s结构设计

时间:2023-03-30 11:07:27浏览次数:54  
标签:Node 容器 对象 API pod k8s 结构设计

k8s理念

声明式API是k8s最核心的设计理念。

在k8s中推崇的使用方法是:

  • 首先通过一个任务编排对象,比如Pod,Job,CronJob等,描述你试图管理的应用。
  • 然后,为它定义一些运维能力对象,比如Service、Ingress等,这些对象会负责具体的运维能力侧功能。

这种使用方法就是所谓的“声明式API”,这种API对应的编排对象和服务器对象,都是k8s项目中的API对象。

“声明式API和控制器模式”的本质是将底层基础设施能力和运维能力接入k8s的一种手段。这个手段达成的最终效果就是如今k8s生态中数以千计的插件化能力,让用户能够基于k8s轻松构建出各种各样,面向用户的上层平台。

k8s组件

组件架构图

k8s结构设计_k8s架构设计

k8s结构设计_k8s架构设计_02

Master组件

kube-apiserver

k8s ApI,集群的统一入口,各组件的协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给etcd存储。

kube-controller-manger

处理集群中的常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

k8s控制器类型:

Deployment:适合无状态的服务部署  deployment详解

StatefulSet:适合有状态的服务部署 StatefulSet详解

DaemonSet:一次部署,所有的node节点都会部署 daemonSet详解

例如一些典型的应用场景:

运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph

在每个Node上运行日志收集 daemon,例如 fluentd、 logstash

在每个Node上运行监控 daemon,例如 Prometheus Node Exporter

Job:一次性的执行任务

Cronjob:周期性的执行任务

kube-scheduler

根据算法为新创建的pod选择一个Node节点,可以任意部署,可以部署在同一个节点上也可以部署在不同节点上。

etcd

分布式键值存储系统。用户保存集群状态,比如pod、service等对象信息。

Node组件

kubelet

kubelet是Master在Node节点上的Agent,管理本级运行容器的生命周期,比如创建容器、pod挂载数据卷,下载secret,获取容器和节点状态等工作。kubelet将每个pod转换成一组容器。

kube-proxy

在Node节点上实现pod网络代理,维护网络规则和四层负载均衡工作。

第三方容器引擎

例如:docker、containerd、podman

容器引擎,运行容器

k8s资源

Pod

k8s中的最小部署单元,一组容器的集合  pod详解

Deployment

最常见的控制器,用于更高级别部署和管理pod

Service

为一组pod提供负载均衡,对外提供统一的访问入口 service详解

Label

标签,附加在某个资源上,用于关联对象,查询和筛选

NameSpace

命名空间,将对象逻辑上分离,也有利于权限控制

k8s结构设计_k8s架构设计_03


k8s核心功能“全景图”

k8s结构设计_k8s架构设计_04

我们从最基础的容器出发,首先遇到了容器间紧密协作的难题,于是扩展到了pod;

有了pod之后,我们希望能一次性多启动几个应用实例,这样就需要deployment这个pod的多实例管理器;

而有了这样一组pod之后,我们又需要规定的IP和端口去以负载均衡的方式访问它,于是有了service;

两个pod之间不仅有访问关系,还要求在发起时加上授权信息,典型的比如web应用访问数据库,需要Credential(数据库的用户名密码)。Secret对象其实是保存在etcd里的键值对数据,这样你把Credential信息以Secret的方式存在etcd中,k8s就会在你指定的pod(web应用的pod)启动时,自动把Secret里的数据以Volumn的方式挂载到容器里,这样web应用就可以访问数据库了;

除了应用和应用之间的关系,应用的运行形态是影响“如何容器化这个应用”的第二个重要因素,比如Job用来描述一次性运行任务。DaemonSet用来描述每个宿主机上必须且只能运行一个副本的守护进程服务。CronJob用来描述定时任务等。





标签:Node,容器,对象,API,pod,k8s,结构设计
From: https://blog.51cto.com/landandan/6159273

相关文章

  • k8s-二进制安装
    安装前必读本文档适用于k8s1.17+安装说明:本文章将演示CentOS7二进制方式安装高可用k8s1.17+,相对于其他版本,二进制安装方式并无太大区别,只需要区分每个组件版本的对......
  • k8s的 Nginx Ingress 调优
    内核参数调优我们先看看通过内核的哪些参数能够提高Ingress的性能。保证在高并发环境下,发挥Ingress的最大性能。调大全连接队列的大小TCP全连接队列的最大值取决于som......
  • k8s搭建prometheus+grafana监控系统
    安装gityuminstallgit-y登录github,查看kube-prometheus项目https://github.com/prometheus-operator/kube-prometheus查看kubenetes对应版本拉取对应的......
  • 33、K8S-配置管理之Secret、DownwardAPI
    1、secret1.1、基础知识1.1.1、Secret简介secretvolume为Pod提供加密的信息,相比于直接将敏感数据配置在Pod的定义或者镜像中,Secret提供了更加安全的机制,将共享的数据......
  • 实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布
    1前言本文主要实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布2go服务镜像准备2.1初始化项目cd/Users/flying/Dev/Go/go-lesson/src/mkdirgoPubl......
  • K8s 弃用 Docker!一文介绍 containerd ctr、crictl 使用
    containerd是一个高级容器运行时,又名容器管理器。简单来说,它是一个守护进程,在单个主机上管理完整的容器生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等......
  • k8s service原理
    1.为什么需要servicePod是非永久性资源,会动态创建和销毁,pod的ip会变化,而service会动态感知pod的变化,而对调用方无感知,调用方只需要访问固定的servicename就可以动态地访......
  • 32、K8S-配置管理之Configmap
    1、基础知识1.1、场景需求生产中所有的应用程序中,都涉及到配置文件,而配置文件经常会有变更,比如数据库连接、代码版本号等.最典型场景就是:项目经历开发环境、测试环境......
  • k8s-hpa
    kubectlscale对运行在k8s环境中的pod数量进行扩容(增加)或缩容(减小)。HPA:(HorizontalPodAutoscaler)Pod自动弹性伸缩,K8S通过对Pod中运行的容器各项指标(CPU占用、内......
  • k8s-pv/pvc
    默认情况下容器中的磁盘文件是非持久化的,对于运行在容器中的应用来说面临两个问题,第一:当容器挂掉kubelet将重启启动它时,文件将会丢失;第二:当Pod中同时运行多个容器,容器之......