k8s pod部署到不同node_Kubernetes(K8S) 简介、架构、设计理念、安装方式整理

1.简介

Kubernetes 是一个开源的,用于管理云平台中的多个主机上的容器化的应用,提供了应用部署,规划,更新,维护的一种机制。

2.架构

1891fc0af36cf5d1295c0baf81d08ccc.png
9fa6aed48786c619c3bb7b7274b7f3bf.png

Master节点

etcd

所有master的持续状态都存在etcd的一个实例中,用于存储配置数据。

apiserver

提供资源对象的唯一操作入口(RESTFul Api接口),K8S其他的组件都必须通过它提供的API来操作资源数据。

controller manager

实现集群故障检测和恢复自动化工作,负责执行各种控制器,主要有:

endpoint-controller:定期关联service和pod,保证service到pod的映射是最新的

replication-controller:复制控制器,定期关联replication和pod,保证replication定义的复制数量与实际运行的pod数量一致

scheduler

收集和分析K8S集群所有节点的资源(内存、CPU)等负载情况,然后依次分发新建POD到K8S集群中的可用节点。

实时检测K8S集群中未分发和已分发的POD

实时检测所存在的节点信息

在分发POD到指定的节点后,会把绑定信息写回apiserver

Node节点

kubelet

负责node上的pod 创建、修改、监控、删除等生命周期管理。

定时上报Node的状态信息给Api Server。

接收apiserver 分配给的命令和任务,与apiserver进行交互

设置容器环境变量、给容器绑定卷、给容器绑定端口、给POD创建网络

kube-proxy

解决外部网络访问跨机器集群中容器提供的应用服务,每个节点都运行。

根据负载均衡的请求分发到容器中处理,提供了随机、轮询负载算法。

kubectl

通过客户端的kubectl 命令操作,apiserver响应命令结果,从而达到管理K8S集群的目的。

3.设计理念

API设计原则

所有的API应该是声明式的。

API对象是彼此互补而且可组合的。

高层API以操作意图为基础设计

底层API根据高层API的控制需求设计

尽量避免简单封装,不要有在外部API无法显示知道的内不隐藏机制。

API操作复杂度与对象数量成正比。

API对象状态不能依赖于网络连接状态

尽量避免让操作机制依赖于全局状态,因为分布式系统中要保证全局状态的同步时非常论难的

控制器的设计原则

控制逻辑应该只依赖于当前撞他

假设任何错误的可能,并做容器处理

尽量避免复杂状态机,控制逻辑不要依赖无法监控的内部状态。

架设任何操作都可能被任何操作对象拒绝,甚至被错误的解析

每个模块都可以在出错后自动恢复。

每个模块都可以在必要时优雅的降级服务

Pod

Pod是K8S集群中运行部署应用或服务的最小单元,是集群中所有业务类型的基础,它是可以支持多容器的。

复制控制器(Relication Controller,RC)

监控运行中的POD来保证集群中运行指定数目的POD副本。

副本集(replica set,RS)

RS是新一代的复制控制器,提供高可用能力,能够支持多种类的匹配模式,一般不单独使用,作为Deployment的参数使用。

部署(Deplpyment)

负责创建、更新、滚动升级一个服务。滚动升级则是创建一个RS,然后将RS的副本数量增加,然后将旧RS副本减少。

服务(Service)

RC、RS、Deployment保证支撑服务pod的数量,而Service是解决如何访问Pod。提供了服务发现和负载均衡的能力。每个service提供一个虚拟IP,集群内不通过虚拟IP访问一个服务。K8S中负载均衡是由kube-proxy实现的。

任务(Job)

JOB是ks控制批处理类型的API对象。

后台支撑服务集(DaemonSet)

后台支撑型服务包括,存储,日志和监控等在每个节点上支持K8s集群运行的服务。

有状态服务集(PetSet)

K8s在1.3版本里发布了Alpha版的PetSet功能,PetSet(宠物应用),是由一组有状态的Pod组成,每个Pod有自己特殊且不可改变的ID,且每个Pod中都有自己独一无二、不能删除的数据。

集群联邦(Federation)

K8s在1.3版本里发布了beta版的Federation功能。提供跨区域跨集群的能力。

存储卷(Volume)

K8s集群中的存储卷跟Docker的存储卷有些类似,只不过Docker的存储卷作用范围为一个容器,而K8s的存储卷的生命周期和作用范围是一个Pod。每个Pod中声明的存储卷由Pod中的所有容器共享。

持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim,PVC)

PV和PVC使得K8S具备了存储的逻辑抽象能力。使得配置POD逻辑可以忽略实际后台存储技术的配置。而把这项配置交给PV的配置人。PV和PVC的关系与Node和Pod的关系类似。PV和NODE是资源的提供者。PVC和POD是资源的使用者。

节点(Node)

K8S集群中的计算能力由node提供,是所有POD运行所在的工作主机。

密钥对象(Secret)

保存和传递密码、密钥、认证这些铭感信息的对象。使用secret的好处是可以避免把铭感信息明文写在配置文件里。

用户帐户(User Account)和服务帐户(Service Account)

用户账户时个人身份。服务账户是一个运行中程序的身份。

命名空间(Namespace)

为K8S集群提供虚拟的隔离作用。默认有两个命名空间default、kube-system。

RBAC访问授权

K8s在1.3版本中发布了alpha版的基于角色的访问控制(Role-based Access Control,RBAC)的授权模式。

4.创建K8S集群方式

国内部署方式

二进制部署:部署较为复杂

kubeadm:部署简单,需要离线镜像

厂商集成方案:rancher

通过阿里云:成本较高,一键搞定

通过yum方式:版本受yum源限制

Minikube:需要代理

大神制作的ansible安装脚本:需要大神的要求进行安装

本地服务器方式

本地服务器方案再一台物理机上创建拥有一个或者多个Kubernetes节点的单机集群。创建过程是全自动的,且不需要任何云服务商的账户。但是这种单机集群的规模和可用性都受限于单台机器。

托管方式

Google Container Engine 提供创建好的Kubernetes集群。

全套云端方案

GCE

AWS

Azure

阿里云

定制方案

Kubernetes可以在2云服务提供商和裸机环境运行,并支持很多基本操作系统

AWS + coreos

GCE + CoreOS

AWS + Ubuntu

Joyent + Ubuntu

Rackspace + CoreOS

私有虚拟机

Vagrant(虚拟化代理)(采用CoreOS和flannel)

CloudStack(采用Ansible,CoreOS和flannel)

Vmware(采用Debian)

juju.md(采用Juju,Ubuntu和flannel)

Vmware(采用CoreOS和flannel)

libvirt-coreos.md(采用CoreO)

oVirt

libvirt(采用Fedora和flannel)

KVM(采用Fedora和flannel)

裸机

Offline(无需互联网,采用CoreOS和flannel)

fedora/fedora_ansible_config.md

Fedora单节点

Fedora多节点

Centos

Ubuntu

Docker多节点

集成

Kubernetes on Mesos(采用GCE)

88ca85fbc187f3ec92c317f2e6815d13.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值