LEMON

记录站

0%

Kubernetes基础概念(一)

Kubernetes基本概念

1. 什么是Kubernetes ?

k8s是一组服务器集群,K8s所管理的集群节点上的容器。官方网站

Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes的服务,支持和工具广泛可用。

Kubernetes这个名字起源于希腊语,意思是舵手或飞行员。Google在2014年开源了Kubernetes项目。Kubernetes将超过15年的Google在大规模生产工作负载方面的经验与社区中最好的想法和实践相结合。

2. 为什么需要它?他的功能?

容器是捆绑和运行应用程序的好方法。在生产环境中,您需要管理运行应用程序的容器,并确保没有停机时间。例如,如果一个容器发生故障,则需要启动另一个容器。如果由系统处理此行为,会不会更容易?

这就是Kubernetes的救援方法!Kubernetes为您提供了一个可弹性运行分布式系统的框架。它负责应用程序的扩展和故障转移,提供部署模式等。例如,Kubernetes可以轻松管理系统的Canary部署。

自我修复

在节点故障时重新启动失败的容器,替换和重新部署容器,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

自动部署和回滚

Kubernetes采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,Kubernetes将回滚更改,升级保证业务不受影响。

存储编排

挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、iSCSI、GlusterFS、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

服务发现和负载均衡

Kubernetes为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。集群内应用可以通过DNS名称访问另一个应用,方便微服务之间通信。

机密和配置管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。

资源监控

Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示,可以快速实现对集群资源监控,满足基本监控需求。

提供认证和授权

支持属性访问控制 (ABAC)、角色访问控制(RBAC)认证授权策略,控制用户是否有权限使用Kubernetes API做某些事情,精细化权限分配。

3. Kubernetes架构

kubernetes分别有两种角色:1、master 管理节点 2、worker 工作节点

生产k8s集群图构

4. Kubernetes组件

kubernetes分为 Master节点和 Node节点,前者是管理节点,后者是容器运行的节点。其中Master节点主要有3个重要组件,分别是APIServer,sheduler 和 controller manager。

Node节点 有两个组件 kubelet 和 kubelet (有时候master节点也可以既是管理节点也是工作节点)

4.1 Master 组件

API Server

APIServer组件负责响应用户的管理请求、进行指挥协调工作,所有服务访问统一入口。

Scheduler

scheduler组件是将待调度的pod按照一定的调度算法绑定到合适的工作节点上,负责介绍任务,选择合适的点进行分配任务。

Controller manager

是一组控制器的合集,负责控制控制管理对应的资源,如副本(replication)和工作节点(node)等。维持副本期望数目

ETCD

etcd 负责以K/V的形式保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。键值对数据库储存K8S集群所有重要信息(持久化)

4.2 Node组件

管理维护pod运行的agent,直接跟容器引擎交互实现容器的生命周期管理

Kube-proxy

将service的流量转发到对应endpoint,负责写入规则至 IPTABLES、IPvs实现服务映射访间的

Flannel网络

维持各个节点上pod之间的通信。

4.3 重要组件

Coredns

可以为集群中的Svc创建一个域名IP的对应关系解析

Dashboard

给K8S集群提供一个B/S结构访问体系

Ingress Controller

官方只能实现四层代理, INGRESS可以实现七层代理

Federation

提供一个可以跨集群中心多K8S统一管理功能

Prometheus

提供K8sS集群的监控能力

ELK

提供K8s集群旦志统一分析介入平台

5. k8s网络架构概念

CNI(容器网络接口)

CNI是Container Network Interface的是一个标准的,通用的接口。现在容器平台:docker,kubernetes,mesos,容器网络解决方案:flannel,calico,weave。只要提供一个标准的接口,就能为同样满足该协议的所有容器平台提供网络功能,而CNI正是这样的一个标准接口协议。

pod的通信分类

同一个Pod内的多个容器之间:lo Network

各Pod之间 或 不同主机各Pod 的通讯:Over lay Network

Pod 与 Service之间的通讯:各节点的 Iptables规则 或者 IPVS

K8S整体网络模型图

K8S中的三种网络

node网络:负责不同主机之间的pod通信的入口和出口(物理网络)

service网络:负责对外提供服务(暴露网络)

pod网络:负责pod内部容器之间的通信 和 pod 与 pod之间的通信(内部网络)

K8S的网络通讯原理

同一个Pod内部通讯:

  • 同一个Pod共享同一个网络命名空间,共享同一个 Linux协议栈。

Pod1 至 Pod2:

  • Pod1至Pod2不在同一台主机:Pod的地址是与 docker0在同一个网段的,但 docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将PoIP和所在 Node’MJIP关联起来,通过这个关联让Pod可以互相访问
  • Podl与Pod2在同一台机器:由 Docker0网桥直接转发请求至Pod2,不需要经过 Flannel

Pod 至 Service的网络:

  • iptables 或者 IPVS维护和转发

Pod到外网:

  • Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后, iptables执行 Masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求

外网访问Pod:

  • 访问对应的Service即可

6. Kubernetes核心概念

6.1 container

容器可以运行服务和程序,容器是独立运行的一个或一组应用。容器可以进行启动、开始、停止、删除等操作,每个容器都是相互隔离的。可以把容器看作是一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行其中的应用程序。

6.2 namespace

可以将一个物理的cluster逻辑上划分成多个虚拟cluster,每个cluster就是一个namespace。不同的namespace里的资源是完全隔离的。

6.3 labels

标签用于区分对象(比如pod和services), kubernetes中的任意对象都是通过label进行标识,label的实质是一系列的key/value键值对,其中key与value由用户自己指定。label可以附加到各种资源对象上,如node、pod、service、RC等,一个资源对象可以定义任意数量的label,可以通过label selector(标签选择器)查询和筛选资源对象。label是rc和service运行的基础,两者通过label来进行关联node上运行的pod

6.4 pod

在kubernetes系统中, pod是最小部署单元, 一个pod包含一个或多个容器(一组容器的集合), pod 是一个可以被创建、销毁、调度、管理的最小部署单元。kubernates为每个pod都分配了唯一的ip地址, 称之为PodIP, 一个pod里的多个容器共享podip地址,它负责外部跟容器之间进行通信。

Pod主要分为两种类型:1、自主式pod,2、控制器管理pod

pod是kubernetes最重要的基本概念,也是k8s中的最小运行单元,一个pod中可以运行一个或多个的container及一个管理 container——pause

6.5 Controller Manager

Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成, 是Kubernetes 的大脑, 它通过 apiserver 监控整个集群的状态, 并确保集群处于预期的工作状态。

6.6 services

services 是kubernetes最外围的单元,通过虚拟一个访问ip及服务端口,可以访问我们定义好的pod资源,是通过iptables的nat转发来实现,转发的目标端口为kube_proxy生成的随机端口。services代理pod集合对外表现是一个访问入口,分配一个集群ip地址,来自这个ip的请求将负载均衡转发后端pod中的容器,service通过lable selector选择一组pod提供服务。

deployment可以部署多个副本,每个pod 都有自己的IP,外界如何访问这些副本那?

答案是:service

k8s的 service定义了外界访问一组特定pod的方式。service有自己的IP和端口,service为pod提供了负载均衡。

k8s运行容器pod与访问容器这两项任务分别由controller和service执行。

K8S-Service类型:

ClusterIp:默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP

NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样可以通过NodeIP:NodePort来访问服务

LoadBalancer:在NodePort基础上,借助cloud provider创建一个外部负载均衡器,并将请求转发到NodeIP:NodePort

-------------本文结束感谢您的阅读-------------