美国K8S经典

时间:2024-05-31 06:41:18编辑:奇事君

如何进行K8S存储系统

在K8S运行的服务,从简单到复杂可以分成三类:无状态服务、普通有状态服务和有状态集群服务。下面分别来看K8S是如何运行这三类服务的。

无状态服务,K8S使用RC(或更新的Replica Set)来保证一个服务的实例数量,如果说某个Pod实例由于某种原因Crash了,RC会立刻用这个Pod的模版新启一个Pod来替代它,由于是无状态的服务,新启的Pod与原来健康状态下的Pod一模一样。在Pod被重建后它的IP地址可能发生变化,为了对外提供一个稳定的访问接口,K8S引入了Service的概念。一个Service后面可以挂多个Pod,实现服务的高可用。

普通有状态服务,和无状态服务相比,它多了状态保存的需求。Kubernetes提供了以Volume和Persistent Volume为基础的存储系统,可以实现服务的状态保存。

有状态集群服务,与普通有状态服务相比,它多了集群管理的需求。K8S为此开发了一套以Pet Set为核心的全新特性,方便了有状态集群服务在K8S上的部署和管理。具体来说是通过Init Container来做集群的初始化工作,用Headless Service来维持集群成员的稳定关系,用动态存储供给来方便集群扩容,最后用Pet Set来综合管理整个集群。

要运行有状态集群服务要解决的问题有两个,一个是状态保存,另一个是集群管理。我们先来看如何解决第一个问题:状态保存。Kubernetes有一套以Volume插件为基础的存储系统,通过这套存储系统可以实现应用和服务的状态保存。

K8S的存储系统从基础到高级又大致分为三个层次:普通Volume,Persistent Volume和动态存储供应。

1.普通Volume

最简单的普通Volume是单节点Volume。它和Docker的存储卷类似,使用的是Pod所在K8S节点的本地目录。

第二种类型是跨节点存储卷,这种存储卷不和某个具体的K8S节点绑定,而是独立于K8S节点存在的,整个存储集群和K8S集群是两个集群,相互独立。

跨节点的存储卷在Kubernetes上用的比较多,如果已有的存储不能满足要求,还可以开发自己的Volume插件,只需要实现Volume.go里定义的接口。如果你是一个存储厂商,想要自己的存储支持Kubernetes上运行的容器,就可以去开发一个自己的Volume插件。

2.persistent volume

它和普通Volume的区别是什么呢?

普通Volume和使用它的Pod之间是一种静态绑定关系,在定义Pod的文件里,同时定义了它使用的Volume。Volume是Pod的附属品,我们无法单独创建一个Volume,因为它不是一个独立的K8S资源对象。

而Persistent Volume简称PV是一个K8S资源对象,所以我们可以单独创建一个PV。它不和Pod直接发生关系,而是通过Persistent Volume Claim,简称PVC来实现动态绑定。Pod定义里指定的是PVC,然后PVC会根据Pod的要求去自动绑定合适的PV给Pod使用。


如何入门k8s?

Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。节点 (Master node and Worker node)节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。工作节点(Worker Node):主要负责运行容器。命名空间 (Namespace)k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public。Objectk8s 对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s 对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。PODPod是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。副本集 (Replica Set,RS)是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。部署 (Deployment)表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。服务 (service)是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。Ingress是一种网关服务,可以将k8s服务通过http协议暴露到外部。无状态应用 & 有状态应用无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库

如何进行K8S存储系统

1.普通Volume

最简单的普通Volume是单节点Volume。它和Docker的存储卷类似,使用的是Pod所在K8S节点的本地目录。

第二种类型是跨节点存储卷,这种存储卷不和某个具体的K8S节点绑定,而是独立于K8S节点存在的,整个存储集群和K8S集群是两个集群,相互独立。

跨节点的存储卷在Kubernetes上用的比较多,如果已有的存储不能满足要求,还可以开发自己的Volume插件,只需要实现Volume.go里定义的接口。如果你是一个存储厂商,想要自己的存储支持Kubernetes上运行的容器,就可以去开发一个自己的Volume插件。


Kubernetes和Mesos有啥区别,我该使用哪个好

Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS
和Red Hat
Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。我们
(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种
与计算集群交互的标准方式。Kubernetes重新实现了Google在构建集群应用时积累的经验。这些概念包括如下内容:
Pods:一种将容器组织在一起的方法;
Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);
Labels:一种可以找到和查询容器的方法;
Services:一个用于实现某一特定功能的容器组;
因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。
Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。Mesos是分布式系统内核,它可以将不同的机器整
合在一个逻辑计算机上面。当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。有很多的现代化可扩展性的数据处理应
用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。在
某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
单并且容易管理。
有趣的是Mesos正在接受Kubernetes的理念,并已经开始支持Kubernetes
API。因此如果你需要它们的话,它将是对你的Kubernetes应用去获得更多能力的一个便捷方式(比如高可用的主干、更加高级的调度命令、去管控很
大数目结点的能力),同时能够很好的适用于产品级工作环境中(毕竟Kubernetes仍然还是一个初始版本)。
当被问到区别的时候,我会这样回答:
如果你是一个集群世界的新手,那Kubernetes是一个很棒的开始。它可以用最快的、最简单的、最轻量级的方式来解决你的问题,并帮
助你进行面向集群的开发。它提供了一个高水平的可移植方案,因为很多厂商已经开始支持Kubernetes,例如微软、IBM、Red
Hat、CoreOS、MesoSphere、VMWare等。
如果你拥有已经存在的工作任务(Hadoop、Spark、Kafka等),那Mesos可以给你提供了一个将不同工作任务相互交错的框架,然后还可以加入一些新的东西,比如Kubernetes应用。
如果你想使用的功能Kuberntes还没实现,那Mesos是一个不错的替代品,毕竟它已经成熟。


Apache的Mesos和Google的Kubernetes 有什么区别

Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。它可以完美运行在现代的操作系统环境(比如CoreOS
和Red Hat
Atomic),并提供可以被你管控的轻量级的计算节点。Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。我们
(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种
与计算集群交互的标准方式。Kubernetes重新实现了Google在构建集群应用时积累的经验。这些概念包括如下内容:

Pods:一种将容器组织在一起的方法;

Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);

Labels:一种可以找到和查询容器的方法;

Services:一个用于实现某一特定功能的容器组;

因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。

Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。Mesos是分布式系统内核,它可以将不同的机器整
合在一个逻辑计算机上面。当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。有很多的现代化可扩展性的数据处理应
用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。在
某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
单并且容易管理。

有趣的是Mesos正在接受Kubernetes的理念,并已经开始支持Kubernetes
API。因此如果你需要它们的话,它将是对你的Kubernetes应用去获得更多能力的一个便捷方式(比如高可用的主干、更加高级的调度命令、去管控很
大数目结点的能力),同时能够很好的适用于产品级工作环境中(毕竟Kubernetes仍然还是一个初始版本)。

当被问到区别的时候,我会这样回答:

如果你是一个集群世界的新手,那Kubernetes是一个很棒的开始。它可以用最快的、最简单的、最轻量级的方式来解决你的问题,并帮
助你进行面向集群的开发。它提供了一个高水平的可移植方案,因为很多厂商已经开始支持Kubernetes,例如微软、IBM、Red
Hat、CoreOS、MesoSphere、VMWare等。

如果你拥有已经存在的工作任务(Hadoop、Spark、Kafka等),那Mesos可以给你提供了一个将不同工作任务相互交错的框架,然后还可以加入一些新的东西,比如Kubernetes应用。

如果你想使用的功能Kuberntes还没实现,那Mesos是一个不错的替代品,毕竟它已经成熟。


如何利用minikube快速安装kubernetes

  我先整体看Kubernetes些理念基本架构 网络、 资源管理、存储、服务发现、负载均衡、高用、rolling upgrade、安全、监控等面向家简单介绍Kubernetes些主要特性
  包括些需要注意问题主要目帮助家快速理解 Kubernetes主要功能今研究使用具候所参考帮助
  1.Kubernetes些理念:
  用户需要关需要少台机器需要关软件(服务)运行所需环境服务需要关api何服务拆服务何使用api整合
  保证系统总按照用户指定状态运行
  仅仅提给供容器服务同提供种软件系统升级式;保持HA前提升级系统用户想要功能难实现
  些需要担需要担事情
  更支持微服务理念划、细服务间边界比lablel、pod等概念引入
  于Kubernetes架构参考官文档
  致由些主要组件构包括Master节点kube-apiserver、kube-scheduler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点kubelet、kube-proxy及底层网络支持(用Flannel、OpenVSwitch、Weave等)
  看微服务架构设计目前能支持单服务横向伸缩 Kubernetes 未版本解决
  2.Kubernetes主要特性
  网络、服务发现、负载均衡、资源管理、高用、存储、安全、监控等面向家简单介绍Kubernetes些主要特性 -> 由于间限能简单些
  另外于服务发现、高用监控些更详细介绍兴趣朋友通篇文章解
  1)网络
  Kubernetes网络式主要解决几问题:
  a. 紧耦合容器间通信通 Pod localhost 访问解决
  b. Pod间通信建立通信网比隧道、路由Flannel、Open vSwitch、Weave
  c. PodService及外部系统Service通信引入Service解决
  Kubernetes网络给每Pod配IP址需要Pod间建立链接基本需要处理容器主机间端口映射
  注意:Pod重建IP重新配所内网通信要依赖Pod IP;通Service环境变量或者DNS解决
  2) 服务发现及负载均衡
  kube-proxyDNS v1前Service含字段portalip publicIPs 别指定服务虚拟ip服务口机ippublicIPs任意指定集群任意包含kube-proxy节点portalIp 通NAT式跳转container内网址v1版本publicIPS约定废除标记deprecatedPublicIPs仅用作向兼容portalIp改ClusterIp, service port 定义列表增加nodePort项即应node映射服务端口
  DNS服务addon式需要安装skydnskube2dnskube2dns通读取Kubernetes API获取服务clusterIPport信息同watch式检查service变及收集变信息并于ip信息提交给etcd存档skydns通etcd内DNS记录信息启53端口外提供服务概DNS域名记录servicename.namespace.tenx.domain, tenx.domain提前设置主域名
  注意:kube-proxy 集群规模较能访问性能问题考虑用其式替换比HAProxy直接导流Service endpints 或者 PodsKubernetes官修复问题
  3)资源管理
  3 层资源限制式别Container、Pod、Namespace 层Container层主要利用容器本身支持比Docker CPU、内存、磁盘、网络等支持;Pod面限制系统内创建Pod资源范围比或者CPU、memory需求;Namespace层用户级别资源限额包括CPU、内存限定Pod、rc、service数量
  资源管理模型 -》 简单、通用、准确并扩展
  目前资源配计算相简单没资源抢占类强功能通每节点资源总量、及已经使用各种资源加权计算某Pod优先非配哪些节点没加入节点实际用资源评估需要自scheduler plugin支持其实kubelet已经拿节点资源要进行收集计算即相信Kubernetes续版本支持
  4)高用
  主要指Master节点 HA式 官推荐 利用etcd实现master 选举Masterkube-apiserver 保证至少master用实现high availability外loadbalancer式提供入口种式用作ha仍未熟据解未更新升级ha功能
  张图帮助家理解:
  etcd集群背景存kube-apiserver并用pod-master保证仅主master用同kube-shedullerkube-controller-manager存且伴随着kube-apiserver 同间能套运行
  5) rolling upgrade
  RC 始设计让rolling upgrade变更容易通替换Pod更新service实现服务断间化基本思路创建复本1新rc并逐步减少rc复本、增加新rc复本rc数量0其删除
  通kubectl提供指定更新镜像、替换pod间间隔rollback 前执行upgrade操作
  同 Kuberntes支持版本同部署并通lable进行区service变情况调整支撑服务Pod测试、监控新Pod工作情况
  6)存储
  家都知道容器本身般数据进行持久化处理Kubernetes容器异退kubelet简单基于原镜像重启新容器另外我同Pod运行容器经需要些容器间进行共享些数据Kuberenetes Volume主要解决面两基础问题
  Docker Volume概念相简单且目前支持限KubernetesVolume则着清晰定义广泛支持其核理念:Volume目录并同Pod所容器访问目录端用介质面内容则由使用特定Volume类型决定
  创建带VolumePod:
  spec.volumes 指定Pod需要volume信息 spec.containers.volumeMounts 指定哪些container需要用Volume KubernetesVolume支持非广泛贡献者其添加同存储支持反映Kubernetes社区跃程度
  emptyDir 随Pod删除适用于临存储、灾难恢复、共享运行数据支持 RAM-backed filesystemhostPath 类似于Docker本Volume 用于访问些本资源(比本Docker)
  gcePersistentDisk GCE disk - Google Cloud Engine 平台用
  awsElasticBlockStore 类似于GCE disk 节点必须 AWS EC2实例 nfs - 支持网络文件系统
  rbd - Rados Block Device - Ceph
  secret 用通Kubernetes API 向Pod 传递敏信息使用 tmpfs (a RAM-backed filesystem)
  persistentVolumeClaim - 抽象PV申请资源需关存储提供
  glusterfs
  iscsi
  gitRepo
  根据自需求选择合适存储类型反支持够总用款适合 :)
  7)安全
  些主要原则:
  基础设施模块应该通API server交换数据、修改系统状态且API server访问端存储(etcd)
  用户同角色:Developers/Project Admins/Administrators
  允许Developers定义secrets 象并pod启关联相关容器
  secret 例kubelet要pull 私镜像Kubernetes支持式:
  通docker login .dockercfg 文件进行全局授权
  通每namespace创建用户secret象创建Pod指定 imagePullSecrets 属性(统设置serviceAcouunt )进行授权
  认证 (Authentication)
  API server 支持证书、token、基本信息三种认证式
  授权 (Authorization)
  通apiserver安全端口authorization应用所http请求
  AlwaysDeny、AlwaysAllow、ABAC三种模式其需求自实现Authorizer接口
  8)监控
  比较版本Kubernetes需要外接cadvisor主要功能node主机container metrics抓取较新版本cadvior功能集kubelet组件kubelet与docker交互同外提供监控服务
  Kubernetes集群范围内监控主要由kubelet、heapsterstorage backend(influxdb)构建Heapster集群范围获取metrics事件数据pod式运行k8s平台单独运行standalone式
  注意: heapster目前未1.0版本于规模集群监控比较便于较规模集群heapster目前cache式吃掉量内存要定获取整集群容器信息信息内存临存储问题再加heaspter要支持api获取临metricsheapsterpod式运行容易现OOM所目前建议关掉cache并standalone式独立k8s平台


上一篇:pg one

下一篇:四川工商职业技术学校