k8s:快速入门
Posted neozheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s:快速入门相关的知识,希望对你有一定的参考价值。
Kubernetes 优势:
- 自动装箱,水平扩展,自我修复
- 服务发现和负载均衡
- 自动发布(默认滚动发布模式)和回滚
- 集中化配置管理和密钥管理
- 存储编排
- 任务批量运行
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
以上是关于k8s:快速入门的主要内容,如果未能解决你的问题,请参考以下文章