Linux学习 day13之k8s基础简介
k8s基础简介
一、Kubernetes 概述-开源的,用于管理云平台中多个主机上的容器化的应用
特点
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化,插件化,可挂载,可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
Kubernetes 组件
Master 组件—提供集群管理控制中心
Master
组件可以在集群中任何节点上运行,简单起见,通常子一台VM机器启动所有master
组件,并且不会在次VM机器上运行用户容器。 参考高可用群集构建multi-master-VM
kube-apiserver
用于暴露Kubernetes API
。
任何的资源请求/调用操作都是通过
kube-apiserver
提供的接口进行。—参考高可用群集
ETCD
提供的默认存储系统,保存所有集群数据,使用时需要为
etcd
数据提供备份计划
kube-controller-manager
:运行管理控制器
-
运行管理控制器,他们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,他们都被编译为单个二进制文件,并在单个进程中运行,
- 这些控制器包括
- 节点(Node)控制器
- 副本(Replication)控制器:负责维护系统中每个副本中的pod
- 端点(endpoints)控制器:填充
Endpoints
对象(即连接Services&Pods
) -
Service Account
和Token
控制器:位新的Namespace
创建默认账户访问API Token
cloud-controller-manager
- 云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是
Kubernets
版本1.6中引入的,还是Alpha
的功能 - 云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将
--cloud-providerflag
设置为external
启动kube-controller-manager
,来禁用控制器循环 -
cloud -controller-manager
具体功能:- 节点(Node)控制器
- Service控制器
- 卷(Volume)控制器
kube-scheduler
监视新创建没有分配到
Node
的pod
,为Pod
选择一个Node
。
插件 addons
是实现集群
Pod
和Services
功能的Pod
由Deployments
,ReplicationController
等进行管理。Namesace
插件对象是在Kude-dydtem Namespace
中创建
DNS
-
虽然不严格要求使用插件,但
Kubernetes
集群都应该具有集群DNS
。 -
群集
DNS
是一个DNS
服务器,能够为Kubernetes services
提供DNS
记录。 -
由
Kubernetes
启动的容器自动将这个DNS
服务器包含在他们的DNS searches
中。
用户界面
kube-ui
提供集群状态基础信息查看
容器资源监测
容器资源监控提供一个UI浏览器监控数据
Cluster-level Logging
负责保存容器日志,搜索/查看日志
节点(Node
)组件–提供k8s
运行时环境,以及维护Pod
kubelet
kubelet
是主要的节点代理,它会监视己分配给节点的Pod
,具体功能:
- 安装
Pod
所需的volume
- 下载
Pod
的Secrets
- 监视
Pod
中运行的docker
(或experimentally
,rkt
)容器。 - 定期执行容器健康检查
kube-proxy
通过在主机上维护网络规则并执行连接转发来实现
K8S
服务抽象
docker
用来运行容器
RKT
(了解即可)
运行容器,作为docker工具的替代方案
supervisord
(了解即可)
轻量级的监控系统,用于保障
Kubelet
和docker
运行
fluentd
(了解即可)
是一个守护进程,可提供
cluster-level logging
核心组件
- 配置存储中心→
etcd
服务 -
主控(
master
)节点-
kube-apiserver
服务 -
kube-controller-manager
服务 -
kube-scheduler
服务
-
- 运算(
node
)节点-
kube-kubelet
服务 -
kube-proxy
服务
-
-
CLI
客户端kubectl
- 核心附件
-
CNI
网络插件→flannel/calico
- 服务发现用插件→
coredns
- 服务暴露用插件→
traefik
-
GUI
管理插件→Dashboard
-
kubernetes
优势
- 自动装箱,水平扩展,自我修复
- 服务发现和负载均衡
- 自动发布(默认滚动发布模式)和回滚
- 集中化配置管理和密钥管理
- 存储编排
- 任务批处理运行
二、Kubernets 快速入门
四组概念
Pod/Pod
控制器
Pod
Pod
是k8s
里能够运行的最小的逻辑单元(原子单元)- 1个
Pod
里面可以运行多个容器,他们共享UTS +NET+IPC
名称空间 - 可以把
pod
理解为豌豆荚,而同一种Pod
内的每个容器都是一颗颗豌豆 - 一个
Pod
里运行多个容器,又叫:边车(sidecar
)模式
Pod
控制器
Pod
控制器是Pod
启动的一种模板,用来保证在k8s
里启动的Pod
应始终按照人门预期的运行(副本数,生命周期。健康状态检测)-
k8s
内提供了众多的pod
控制器,常用的有以下几种:Deployment
DaemonSet
ResplicaSet
StatfulSet
Job
Cronjob
Name/Namespace
Name
- 由于
k8s
内部,使用‘资源’来定义每一种逻辑概念(功能),故每种资源,都应该有自己的名称 - 资源 有
api
版本(apiVersion
)类别(Kind
),元数据(metadata
)、定义清单(spec
)、状态(staus
)等配置信息 - 名称 通常定义在资源 的元数据信息里
Namespace
- 随着项目增多、人员增加、集群规模的扩大、要能够隔离
k8s
内各种‘资源’的方法,这就是名称空间 - 名称空间可以理解为
k8s
内部的虚拟集群组 - 不同名称空间内的资源,名称可以相同,相同名称空间内的同种资源,名称不同
- 合理的使用
k8s
的名称空间,使得集群管理员能够更好的对交付到k8s
里的服务进行分类管理和浏览 k8s
里默认存在的名称空间有:default,kube-system,kube-public
- 查询
k8s
里特点资源要带上相应的名称空间
Label/Label
选择器
Label
:标签
- 标签是k8s特色的管理方式,便于分类管理资源对象
- 一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多地多的关系
- 一个资源拥有多个标签,可以实现不同维度的管理
- 标签的组成:
key=value
- 于标签类似的,还有一种注解(annotations)
Label
选择器
- 给资源打上标签后,可以 使用标签选择器过滤指定的标签
- 标签选择器目前有两个;基于等值关系(等于,不等于)和基于集合关系(属于,不属于,存在)
-
许多资源支持内嵌标签选择器字段
matchLalels
matchExpressions
Servie/Ingress
Service
- 在
K8S
的世界里,虽然每个Pod
都会被分配一个单独的ip
地址,但这个ip
地址会随着Pod
的销毁而消失 Service
(服务)就是用来解决这个问题的核心概念- 一个
Service
可以看作一组提供相同服务的Pod
的对外访问接口 Service
作用于那些Pod
是通过标签来定义的
Ingress
-
Ingress
是K8s
集群里工作在OSI
网络参考模型下,第七层的应用,对外暴露的接口 -
Service
只能进行L4
流量调度,表现形式是ip+port
-
Ingress
则可以调度不同业务域,不同URL
访问路径的业务流量
三、实验部署集群架构详解
- 部署
k8s
集群前准备工作 - 部署主控点服务
- 完成部署并验证集群
- 资源需求说明
四、k8s相关概念
主节点 ----Master
—大脑
-
API Server
: 整个系统的对外接口,供客户端使用和其他的组件调用,相当于 营业厅 -
Scheduler
:负责对集群内部的资源进行调度,相当于 调度室 将pod
调度到相应的机器上 -
Controller manager
:负责管控控制器,相当于 大总管 -
etcd
主要负责存储各个woker
节点的状态和其它相关数据,与数据库通信
计算节点—Node/worker
—多个 劳动者
-
docker
创建容器 -
kubelet
主要负责监视指派到它所在node
上的pod
,包括创建,修改,监控,删除等 维护容器的生命周期,负责volume
(CVI
)和网络(CNI
)的管理 -
kube-proxy
主要负责为pod
对象提供代理 -
fluentd
主要负责日志收集,存储与查询 -
kube-dns
(可选) pod
相关概念
Deployment
部署
- 类似于
docker
中的镜像image
,也就是容器(pods
)实例的模板,容器实例时根据deploy
创建出来的,在deployment
对象中会写明容器的镜像,容器的版本没人气要部署的数量等信息
容器组 pods
pods
是kubernetes
中的最小管理单元,pods
和docker
中的容器可以理解为包含关系,在pods
中可以包含有多个docker
容器-
我们可以把一个
pod
比作一个豌豆荚,里面一颗颗的豌豆就是容器,其中会有一颗豌豆是pod
派进去的监工:kube-proxy
服务 service
sercice
是一个对象,这个对象有自己的ip
,也就是clusterip
,可以理解为就是下层服务的负载均衡
路由 ingress
- 无论时容器组还是
service
,外网都是无法直接访问的,ingress
就可以通过一个负载ip
与kubernetes
集群内部进行通信,一般会和service
对象进行配合使用
配置项 configmap
- 简单理解为一个管理配置的对象,可以将项目的配置写入到
confgimap
中,,项目中的配置使用相应的变量名就可以读取相应的变量值
本文地址:https://blog.csdn.net/wuzeipero/article/details/111036173