Browsed by
Category: Kubernetes

kubernetes概念

kubernetes概念

cluster

cluster是计算、存储、和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用。

master

master是cluster的大脑,它的主要职责是调度,即决定应用放在哪运行。为了实现高可用,可以运行多个master。

node

node的职责是运行容器应用,node由master管理,node负责监控并汇报容器的状态,并根据master的要求管理容器的生命周期。

pod

pod是kubernetes的最小工作单元。每个pod包含一个或多个容器,pod中的容器会作为一个整体被master调度到一个node上运行。

pod的作用

方便管理关系密切的容器
方便通信和资源共享,pod中所有容器共享namespace,ip,port
Kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别由 Controller 和 Service 执行

controller

kubernetes通常不会直接创建pod,而是通过controller来管理pod,如定义pod有几个副本,在什么样的node上运行等等。

controller分类

deployment,是最常见的是controller,它可以管理pod的多个副本,并确保按预期状态运行。
job用于运行结束就删除的应用。而其他Controller中的pod通常是长期持续运行
statefuleset,它能够保证pod的每个副本在整个生命周期中的名称是不变的,同时保证副本按照固定的顺序启动、更新或者删除。
daemonset,它通常用于运行daemon
ReplicaSet 实现了 Pod 的多副本管理

service

kubernetes service定义了外界访问一组pod的方式。service有自己的ip和port,并为pod提供了负载均衡。

namespace

将多用户或项目组创建的controller,pod等资源分开,每个cluster就是一个namespace,不同的namespace的资源是完全隔离的。
Kubernetes默认创建了两个Namespace。

DNS查询过程

DNS查询过程

假设

www.abc.com

的主机要查询

www.xyz.abc.com

的服务器ip地址。

知识点

  1. hosts文件:以静态映射的方式提供IP地址与主机名的对照表,类似ARP表

  2. 域:abc.com是一个域,它可以划分为多个区域,如abc.com和xyz.abc.com

步骤

递归查询

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找
第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的DNS服务器查询
第四步:‘根DNS服务器’根据查询域名中的‘xyz.com’,再向xyz.com的区域服务器查询
第五步:

www.xyz.abc.com

的DNS服务器直接解析该域名,将查询到的ip再原路返回给请求查询的主机

迭代查询

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,在DNS本地服务器(即域服务器)查找所有本层次的区域服务器
第三步:本地DNS服务器查不到就查询上一层次的所有区域服务器,以此类推直至根域名DNS服务器‘.’
第四步:到达根域名服务器后又向下查询,直至查到结果为止。

迭代查询与递归查询结合

递归查询需要经过逐层查询才能获得查询结果,当查询具有许多层次的DNS结构时效率很低,所以一般采用两者相结合的查询方式。

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址
第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找
第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的根DNS服务器查询
第四步:根DNS服务器直接将其区域DNS服务器的ip地址返回给本地服务器,而不用再向xyz.com的区域服务器查询。
第五步:本地DNS服务器将结果返回给请求的主机

以下7个开源平台提供了serverless computing

以下7个开源平台提供了serverless computing

Apache OpenWhisk

是一个无服务器的开源云平台,允许您在任何规模的事件响应中执行代码。它是用Scala语言编写的。框架响应类似HTTP请求这样的触发事件,然后运行JavaScript或Swift代码片段。

Fission

 是一个serverless computing框架,使开发人员能够使用Kubernetes构建函数。它允许程序员用任何编程语言编写函数,并将其与任何事件触发器(如HTTP请求)进行映射。

IronFunctions

 是一个通过集成它现有的服务和Docker来提供了微服务的serverless computing框架。他要求开发人员使用Go语言编写函数。

Fn Project

 是一个开源的容器本地化服务器平台,您可以在任何地方、任何云上或在本地运行。它易于使用,支持每一种编程语言,具有高扩展性和高性能。

OpenLambda

 是一个apache授权的基于Linux容器,使用Go编写serverless computing项目。 OpenLambda的主要目标是探索新的serverless computing方法。

Kubeless

 是一个kubernets原生的serverless框架,允许您部署细粒度的代码,而不必担心底层基础设施。它利用Kubernetes资源提供自动缩放、API路由、监控、故障恢复等功能。

OpenFaas

 是一个使用Docker和Kubernetes构建serverless功能的框架,它为metrics提供了一流的支持。任何程序都可以打包为函数,使您能够使用一系列web事件,而无需重复编写样板代码。

解决 MacOS 下docker 启动 Kubernetes 总是 kubernetes is starting…的现象

解决 MacOS 下docker 启动 Kubernetes 总是 kubernetes is starting…的现象

在Mac上安装好docker ,再启动Kubernetes,然后一直卡在了kubernetes is starting...。最后从网上找到了解决办法

  1. git clone https://github.com/maguowei/k8s-docker-for-mac.git
  2. cd k8s-docker-for-mac/
  3. ./load_images.sh 同时要打开这docker desktop
  4. 设置 https://registry.docker-cn.com

等都安装完,重启docker desktop,静静的等待一会,你会发现k8s也运行起来了。