Kubernetes
1.Kubernetes概述
官网:https://kubernetes.io
由来:谷歌的Borg系统,后经Go语言重写并捐献给CNCF基金会开源
作用:开源的容器编排框架工具(生态丰富)
学习意义:解决跑裸docker的痛点
K8S优势
自动装箱,水平扩展、自我修复
服务发现和负载均衡
自动发布(默认滚动发布模式)和回滚
集中化配置管理和秘钥管理
存储编排
任务批处理运行
...
2.K8S快速入门
四组概念
Pod/Pod控制器
Name/Namespace
Label/Label选择器
Service/Ingress
2.1.Pod
Pod
Pod是K8S里能够被运行的最小的逻辑单元(原子单位)
1个Pod里面可以运行多个容器,它们共享UTS+NET+IPC名称空间
UTS命名空间用于隔离主机名和域名
NET命名空间用于隔离网络接口和网络栈
IPC命名空间用于隔离进程间通信资源
可以把Pod理解成豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆
一个Pod里面运行容器,又叫边车(SideCar)模式
Pod控制器
Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod应始终安装人们的预期运行(副本数、声明周期、健康状态检查)
K8S内提供了众多的Pod控制器,常用的有
Deployment:无状态的服务部署
DaemonSet:确保所有(或某些)节点运行一个Pod的副本
ReplicaSet:负责维护集群中运行的Pod数量
StatefulSet:有状态的服务部署
Job:任务
Cronjob:定时周期任务
Nod:监控节点状态,并在节点出现故障时及时做出响应
2.2.Name
Name
由于K8S内部,使用"资源"来定义每一种逻辑概念(功能),故每种"资源"都应该有自己的名称
"资源"有api版本(apiVersion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息
"名称"通常定义在"资源"的"元数据"信息里
Namespace
随着项目增多、人员增加、集群规模的扩大,需要一种能隔离K8S内各种"资源"的方法,这就是名称空间
名称空间可以理解为K8S内部的虚拟集群组
不同名称空间内的"资源",名称可以相同,相同名称空间内的同种"资源","名称"不能相同
合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览
查询K8S里特定"资源"要带上相应的名称空间
K8S里默认存在的名称空间有:default、kebu-system、kebu-public、kubu-node-lease
default:默认的Namespace,用于存放没有指定Namespace的对象。kube-system:用于存放Kubernetes系统组件创建的对象。kube-public:用于存放公共资源,所有用户(包括未经身份验证的用户)都可以访问。kube-node-lease:用于存放与节点心跳相关的Lease对象。
可以使用
kubectl get namespaces命令查看集群中所有可用的Namespace
2.3.Label
Label
标签是K8S特色的管理方式,便于分类管理资源对象
一个标签可以对应多个资源,一个资源也可以有多个标签,它们是多对多的关系
一个资源拥有多个标签,可以实现不同纬度的管理
标签的组成:key=value
与标签类似的,还有一种"注释"(annotations)
Annotations不用于选择和查找对象,而是用于存储额外的信息,以便工具和库能够检索它们。
Label选择器
给资源打上标签后,可以使用标签选择器过滤指定的标签
标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
许多资源支持内嵌标签选择器字段
matchLacels
matchExpressions
2.4.Service
Service
在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
Service(服务)就是用来解决这个问题的核心概念
一个Service可以看做一组提供相关服务的Pod的对外访问接口
Service作用域那些Pod是通过标签选择器来定义的
Ingress
Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口
Service只能进行L4流量调度,表现形式是ip+port
Ingress则可以调度不同业务域、不同URL访问路径的业务流量
2.5.K8S架构
K8S网络
Node网络
Pod网络
Service网络

核心组件
配置存储中心--->etcd服务
为了高可用性,最好配置奇数个
主控(master)节点
kube-apiserver服务

image-20230501203640947 kube-controller-manager服务

image-20230501203743732 kube-scheduler服务

image-20230501203854799 运算(node)节点
kubu-kubelet服务

image-20230501204144365 kubu-proxy服务

image-20230501204306437
CLI客户端
kubectl
核心组件
CNI网络插件--->flannel/calico
服务发现用插件--->coredns
服务暴露用插件--->traefik
GUI管理插件--->Dashboard

3.K8S集群架构

3.1.常见的K8S安装部署方式
单节点微型K8S(仅供学习、预览使用)
二进制安装部署(生成首选,新手推荐)
使用Kubeadmin进行部署,K8S的部署工具,跑在K8S里(相对简单,熟手推荐)
3.2.部署准备
准备五台虚拟机
关闭防火墙并安装阿里源和epel源
安装必要工具
1.搭建DNS服务
安装bind服务
配置DNS
验证解析
更改客户端DNS
2.准备签发证书环境
200
安装证书签发工具CFSSL
签发根证书
签发承载式证书
3.部署docker环境
21、22、200
部署docker环境
编辑配置文件
4.部署harbor
200
安装部署harbor
安装nginx做反向代理
配置DNS,并使用harbor
3.3.搭建K8S
1.搭建etcd集群
12/21/22
签署etcd证书
部署etcd服务
检查etcd服务是否正常运行
2.部署kubu-apiserver集群
21/22安装kubu-apiserver,11/12使用nginx做4层负载均衡器
最后更新于