k8s(1):快速入门

Kubernetes 优势:

  1. 自动装箱,水平扩展,自我修复
  2. 服务发现和负载均衡
  3. 自动发布(默认滚动发布模式)和回滚
  4. 集中化配置管理和密钥管理
  5. 存储编排
  6. 任务批量运行

k8s四组基本概念:

  • Pod/Pod控制器
  • Name/Namespace
  • Label/Label选择器
  • Service/Ingress

Pod :

1、Pod 是K8S里能够被运行的最小逻辑单元(原子单元) 

2、1个Pod中可以运行多个容器,它们共享 UTS + NET + IPC 名称空间

3、一个POD可以运行多个容器,又叫:边车(SideCar)模式

Pod控制器:

Pod控制器是Pod启动的一种模板,用来保证K8S里启动的POD始终按照人们预期运行(副本数、生命周期、健康状态检查等);

K8S提供了众多的POD控制器,常用的有以下几种:

  • Deployment
  • DaemonSet
  • ReplicaSet
  • StatefulSet
  • Job
  • Cronjob

Name:

1、由于K8S内部,使用“资源”来定义每一种逻辑概念(功能),故每种“资源”,都应该有自己的“名称”;

2、“资源”有:api版本(apiVersion),类别(kind),元数据(metadata),定义清单(spec),状态(status)等配置信息;

3、“名称”通常定义在“资源”的“元数据”信息里。

Namespace:

1、随着项目、人员的增多和集群规模的扩大,需要一种能够隔离K8S内各种“资源”的方法,这就是名称空间;

2、名称空间可以理解为K8S内部的虚拟集群组;

3、不同名称空间内的“资源”,名称可以相同,相同名称空间内的同种“资源”,“名称”不能相同;

4、合理的使用K8S名称空间,使得集群管理员能够更好的对交付到k8S里的服务进行分类管理和浏览;

5、K8S里默认的名称空间有: default、kube-system、kube-public;

6、查询K8S里特定“资源”要带上相应的名称空间。

Lable:

1、标签是K8S特色的管理方式,便于分类管理资源对象;

2、一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系;

3、一个资源拥有多个标签,可以实现不同维度的管理;

4、标签的组成:key=value

5、与标签类似,还有一种“注释”(annotation)

Lable选择器:

1、给资源打卡标签后,可以使用标签选择器过滤指定的标签;

2、标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在);

3、许多资源支持内嵌标签选择器字段:

  matchLables

  matchExpressions

Service:

1、在K8S的世界里,虽然每个POD都会分配一个单独的IP地址,但这个IP地址会随着POD的销毁而消失;

2、Service(服务)就是用来解决这个问题的核心概念;

3、一个Service可以看作一组提供相同服务的POD的对外访问接口;

4、Service 作用于哪些POD是通过标签选择器来定义的。

Ingress:

1、Ingress是K8S 集群里工作在OSI网络模型下,第7层的应用,对外暴露的接口;

2、Service只能进行L4流量调度,表现形式是 ip + port;

3、Ingress 则可以调度不同业务域、不同URL访问路径的业务流量。

核心组件

核心组件包括:

配置存储中心 -> etcd 服务;

主控(master)节点;

  • kube-apiserver 服务
  • kube-controller-manager 服务
  • kube-scheduler 服务

运算(node)节点:

  • kube-kubelet 服务
  • kube-proxy 服务

apiserver 服务的作用:

1、提供了集群管理的REST API接口(包括鉴权、数据校验及集群状态变更);

2、负责其他模块之间的数据交互,承担通信枢纽功能;

3、资源配额的入口;

4、提供完备的集群安全机制。

controller-manager服务:由一系列控制器组成,通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态;包括有:Node Controller,Deployment  Controller,Service Controller, Volume Controller, Endpoint  Controller,Garbage Controller, Namespace Controller, Job Controller, Resource quta  Controller 等。

scheduler 服务:主要功能是接收调度pod适合的运算节点上;预算策略(predict); 优先策略(priorities) 

kubelet 服务:

  1、简单来说,kubelet 的主要功能就是定时从某个地方获取节点上POD的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态;

  2、定时汇报当前结点的状态给 apiserver,以供调度的时候使用;

  3、镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源。

kube-proxy 服务:

  1、是K8S在每个节点上运行网络的代理,service资源的载体;

  2、建立了POD网络和集群网络的关系(cluster ip -> pod ip);

  3、常用三种流量调度模式:Userspace(废弃)、 Iptables(濒临废弃)、 Ipvs(推荐);

  4、负责建立和删除包括更新调度规则、通知 apiserver 自己的更新、或者从 apiserver 那里获取其它 kube-proxy 的调度规则变化来更新自己。

k8s 三条网络示意图:

节点网络就是运算节点宿主机网络;所有的pod网络都是从宿主机上 NAT 出来的;kube-proxy 把 pod 网络和 service 网络连接了起来,注意:service 网络是一个虚的网络

k8s 逻辑架构图:

 

CLI客户端

k8s的客户端为 kubectl

核心附件

核心附件包括:

CNI网络插件 -> flannel/calico

服务发现插件 -> coredns

服务暴露插件 -> traefik

GUI管理插件 -> Dashboard

Code your future.
原文地址:https://www.cnblogs.com/neozheng/p/15291462.html