Kubernetes初步认识(一)

本文源链接地址:https://www.93bok.com

前言

建议先把理论看过一遍,弄明白一些东西,再进行实践,由浅到深的学习,如果直接一头扎进去,学习K8s可能会比较困难一些

一、Kubernetes官网

官网:https://kubernetes.io/
中文社区:https://www.kubernetes.org.cn/
中文文档:https://www.kubernetes.org.cn/k8s

二、Kubernetes概述

1、概述

Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。 Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

2、简单点来说

Kubernetes 是 Google开源的容器集群管理系统,基于 Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。 基于容器的云平台,简写成K8s

3、官方介绍

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。

现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。

在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含0个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。

用户可以自己创建并管理Pod,Kubernetes将这些操作简化为两个操作:基于相同的Pod配置文件部署多个Pod复制品;创建可替代的Pod当一个Pod挂了或者机器挂了的时候。而Kubernetes API中负责来重新启动,迁移等行为的部分叫做“replication controller”,它根据一个模板生成了一个Pod,然后系统就根据用户的需求创建了许多冗余,这些冗余的Pod组成了一个整个应用,或者服务,或者服务中的一层。一旦一个Pod被创建,系统就会不停的监控Pod的健康情况以及Pod所在主机的健康情况,如果这个Pod因为软件原因挂掉了或者所在的机器挂掉了,replication controller 会自动在一个健康的机器上创建一个一摸一样的Pod,来维持原来的Pod冗余状态不变,一个应用的多个Pod可以共享一个机器。

我们经常需要选中一组Pod,例如,我们要限制一组Pod的某些操作,或者查询某组Pod的状态,作为Kubernetes的基本机制,用户可以给Kubernetes Api中的任何对象贴上一组 key:value的标签,然后,我们就可以通过标签来选择一组相关的Kubernetes Api 对象,然后去执行一些特定的操作,每个资源额外拥有一组(很多) keys 和 values,然后外部的工具可以使用这些keys和vlues值进行对象的检索,这些Map叫做annotations(注释)。

Kubernetes支持一种特殊的网络模型,Kubernetes创建了一个地址空间,并且不动态的分配端口,它可以允许用户选择任何想使用的端口,为了实现这个功能,它为每个Pod分配IP地址。

现代互联网应用一般都会包含多层服务构成,比如web前台空间与用来存储键值对的内存服务器以及对应的存储服务,为了更好的服务于这样的架构,Kubernetes提供了服务的抽象,并提供了固定的IP地址和DNS名称,而这些与一系列Pod进行动态关联,这些都通过之前提到的标签进行关联,所以我们可以关联任何我们想关联的Pod,当一个Pod中的容器访问这个地址的时候,这个请求会被转发到本地代理(kube proxy),每台机器上均有一个本地代理,然后被转发到相应的后端容器。Kubernetes通过一种轮训机制选择相应的后端容器,这些动态的Pod被替换的时候,Kube proxy时刻追踪着,所以,服务的 IP地址(dns名称),从来不变。

所有Kubernetes中的资源,比如Pod,都通过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(比如pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,所有的名字都是不同的,在对象只提供名称,不提供命名空间的情况下,这种情况是假定是默认的命名空间。UID是时间和空间上的唯一。

三、Kubernetes架构图

我们来大概分析一下这张架构图

首先先分解一下这张图,我分为5部分:

1、kubectl这部分,这是K8s平台的管理命令,代表我们的K8s管理员
2、Internet+Firewall部分,这部分代表我们的用户、客户端
3、Master部分,左下角的这部分,K8s的管理节点,管理节点一般包括etcd、API Server、controller-manager、scheduler等核心组件,而etcd组件相当于整个平台的数据库,一般我们会单台服务器部署etcd并做好集群,而不是和Master放在同一台服务器上
4、Node右上部分,真正运行容器container的物理机,K8s中需要很多Node机器来提供运算。Node节点一般包含了kubelet、Proxy、Container runtime、Pod、container等核心组件。
5、Node右下部分,和4一样

总结: 各组件之间的关系

1、Kubernetes的架构由一个master和多个node组成,master通过api提供服务,接受kubectl 的请求来调度管理整个集群。kubectl:是k8s平台的一个管理命令。
2、Replication controller定义了多个pod或者容器需要运行,如果当前集群中运行的pod或容器达不到配置的数量,replication controller会调度容器在多个node上运行,保证集群中的pod数量。
3、service则定义真实对外提供的服务,一个service会对应后端运行的多个container。
4、Kubernetes是个管理平台,node上的proxy拥有提供真实服务的公网IP。客户端访问kubernetes中提供的服务,是直接访问到kube-proxy上的。
5、在Kubernetes中pod是一个基本单元,一个pod可以是提供相同功能的多个container,这些容器会被部署在同一个node上。node是运行Kubelet中容器的物理机。node接受master的指令创建pod或者容器。

四、Kubernetes核心组件

Kubernetes主要由以下几个核心组件组成:

1、etcd保存了整个集群的状态;
2、apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
3、controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
4、scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
5、kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
6、Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
7、kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

1、kube-dns负责为整个集群提供DNS服务
2、Ingress Controller为服务提供外网入口
3、Heapster提供资源监控
4、Dashboard提供GUI
5、Federation提供跨可用区的集群
6、Fluentd-elasticsearch提供集群日志采集、存储与查询

五、各组件详细说明

1、 kubectl

k8s平台的一个管理命令,管理员通过该命令来管理平台

2、master

k8s管理节点,是集群的控制节点,负责整个集群的管理和控制。管理员通过kubectl发送的所有控制命令都发给master,它负责具体的执行过程。如果master宕机或不可用,那么集群内容器的管理都将失效

3、API Server

提供了资源操作的唯一入口(接口服务),并提供认证、授权、访问控制、API注册和发现等机制。API Server负责和etcd交互(其它组件不会直接操作etcd,只有API Server这么做),整个集群的所有交互都以API Server为核心,比如:

所有模块之间并不会互相调用,而是通过和API Server打交道来完成自己那部分的工作、API Server提供的验证和授权保证了整个集群的安全 
4、controller manager

负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

5、scheduler

负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上

6、etcd

etcd存储kubernetes的配置信息,可以理解为是k8s的数据库,存储着k8s容器云平台中所有节点、pods、网络等信息

7、kubelet

负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;

8、kube-proxy

负责为Service提供cluster内部的服务发现和负载均衡

9、Container runtime

负责镜像管理以及Pod和容器的真正运行(CRI)

10、Pod

Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。Pod对多容器的支持是K8s最基础的设计理念。

11、container

容器,运行我们的服务和程序

原文地址:https://www.cnblogs.com/93bok/p/9684899.html

时间: 2024-09-30 00:56:26

Kubernetes初步认识(一)的相关文章

Kubernetes初步

Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上.为容器化的应用提供资源调度.部署执行.服务发现.扩容缩容等整一套功能.本质上可看作是基于容器技术的mini-PaaS平台.本文旨在梳理Kubernetes的架构.概念及基本工作流,而且通过执行一个简单的演示样例应用来介绍怎样使用Kubernetes. 整体概览 例如以下图所看到的是我初步阅读文档和源码之后整理的整体概览,基本上能够从例如以下三个维度来认识Kubernetes. 操作对象 Kubernetes以

基于Neutron的Kubernetes SDN实践经验之谈

首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规范.响应规范等等.CNI只要求在容器创建时为容器分配网络资源.删除容器时释放网络资源.CNI与调用者之间的整个交互过程如下图所示: CNI实现与外界的交互都通过进程参数和环境变量传递,也只要求输出结果符合CNI规范即可,与实现语言也没什么特殊要求.比如Calico早期版本就使用Python实现了CN

TungstenFabric+K8s轻松上手丨通过Kubernetes命名空间实现初步的应用程序隔离

本文所有相关链接pdf:https://163.53.94.133/assets/uploads/files/tf-ceg-case3.pdf Kubernetes命名空间是"虚拟化"Kubernetes集群的一种内置方式.虽然目前尚无人讨论如何使用命名空间以及在何处使用命名空间,但是如果没有网络范围内的命名空间隔离能力,集群虚拟化将无法完成. Tungsten Fabric Kubernetes CNI插件包括对isolated命名空间的支持.部署到隔离的命名空间中的应用程序无法访问

Kubernetes Fluentd+Elasticsearch+Kibana日志搭建的填坑指南

在初步完成Kubernetes集群架构的建立后,通过搭建一些监控组件,我们已经能够实现 图形化的监控每个node,pod的状态信息和资源情况 通过scale进行replicateSet的扩展和伸缩 通过kubectl logs 或dashboard去查看每个Pod的运行日志 但是,在分布式架构中节点的规模往往是很庞大的,一个典型的生产环境可能有几十上百个minion节点,在这种情况下就需要建立一套集中的日志监控和管理系统,在本人前期的思考中,也想通过volumn外挂到存储的方式实现weblogi

Kubernetes环境下如何运行Coherence缓存集群

Oracle官方出了一个如何在Docker环境下运行Coherence的技术文档,大家可以参考: https://github.com/oracle/docker-images/tree/master/OracleCoherence 但是对于一个熟悉Coherence的老司机来说,简单搭建起来只是个初步方案,在客户的环境总是各种特性和定制化配置,所以本文研究的也是如何将已经客户化的Coherence架构构建在Kubernetes开源框架上. 背景架构说明 话不多说,找一个客户的典型的Cohere

kubernetes容器编排系统介绍

版权声明:本文由turboxu原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/152 来源:腾云阁 https://www.qcloud.com/community Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的经验与教训. Kubernetes提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方

Kubernetes初探(一)

Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台.本文旨在梳理Kubernetes的架构.概念及基本工作流,并且通过运行一个简单的示例应用来介绍如何使用Kubernetes. 总体概览 如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从如下三个维度来认识Kubernetes. 操作对象 Kubernetes以RESTFul

Kubernetes初探

Kubernetes是Google开 源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器 技术的mini-PaaS平台.本文旨在梳理Kubernetes的架构.概念及基本工作流,并且通过运行一个简单的示例应用来介绍如何使用Kubernetes. 总体概览 如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从如下三个维度来认识Kubernetes. 操作对象 Kubernetes以RESTF

Kubernetes(一)初探

Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台.本文旨在梳理Kubernetes的架构.概念及基本工作流,并且通过运行一个简单的示例应用来介绍如何使用Kubernetes. 总体概览   如下图所示是我初步阅读文档和源代码之后整理的总体概览,基本上可以从如下三个维度来认识Kubernetes. 操作对象   Kubernetes以RES