k8s(Kubernetes)是由Gogle开源的容器编排引擎,可以用来管理容器化的应用程序和服务,k
- 高可用:系统在长时间内持续正常地运行,并不会因为某一个组件或者服务的故障而导致整个系统不可用
- 可扩展性:系统可以根据负载的变化来动态的扩展或缩减系统的资源,从而来提高系统的性能和资源利用率
k8s提供了自动重启、自动重建、自动修复提高集群的可用性,以下概念稍微了解即可,看一看直接实操,know what->know how->know why
核心概念
Pod组件
Pod是k8s的最小调度单元,一个Pod是一个或者多个应用容器的组合,Pod里的容器共享存储、网络、运行时配置等
Node节点组件
一个节点就是一个物理机或者虚拟机,一个节点上可以运行一个或多个Pod;一个集群至少2个节点,一个Master-Node
一个Worker-Node
一个节点上有三个组件:
- kubelet:管理和维护每个基点上的Pod,监控Worker-Node运行情况
- kube-proxy:网络代理和负载均衡
- container runtime:保障Pod运行,相当于Docker Engine
Master-Node:管理整个集群
-
kube-apiserver
:提供k8s集群的api接口服务,所有组件通过这个接口通信 -
ControllerManager
控制器管理器,负责管理集群中各种资源对象的状态,包括Node Controller
:负责在节点出现故障时进行通知和响应Job Controller
:检测代表一次性任务的Job对象,然后创建Pods来运行这些任务直至完成EndpointSlice Controller
:填充端点分片对象ServiceAccount Controller
:为新的命名空间创建默认服务账号
-
Scheduler
:调度器,负责监控k8s集群所有节点的资源使用情况,根据调度策略将Pod调度到合适的节点中运行 -
etcd
:键值存储系统,负责存储所有资源对象的状态信息 -
Cloud Controller manager
:云控制器管理器,负责与云平台的api交互
Worker-Node: 运行应用和服务
kubelet
:在每个节点上运行,接受收PodSpecs确保PodSpec中描述的容器处于运行状态且健康kube-proxy
:在每个节点上运行的网络代理,实现内外部的网络通信Container Runtime
:容器运行时,支持多容器运行,如Docker、Containerd等,目前推荐Containerd
,因为Docker太重了,对于k8s来说,只需要有一个容器运行时就可以,而Docker自带的还有网络这些用k8s的proxy就行
Cluster 集群组件
Cluster将多个节点组织到一起共同为系统提供服务的过程称为集群
Control Plane 控制平面组件
控制平面为集群做全局决策,比如资源调度、检测和响应集群事件,一般在Master-Node运行
Addons 插件
DNS
:集群内部的DNS服务dashbord
:web界面,便于管理应用和集群Container Resource Monitoring
:容器资源监控Cluster-level Logging
:集群日志记录Network Plugins
:负责为Pod分配ip并使它们能够在集群内部互相通信
Service 服务
可以将一组Pod封装成一个服务,这个服务可以通过统一的入口来访问,可以防止Pod被销毁或创建后ip改变导致失联
内部服务
像mysql、redis等只需要被集群内部访问不需要外部访问的就是内部服务
外部服务
像后端接口等需要被暴露给外部使用的就是外部服务
常用类型
ClusterIP
:默认方式,分配一个稳定的IP地址,即VIP,只能在集群内部访问NodePort
:在每个节点开放一个端口来暴露服务,可以在集群外部访问,通过NodeIP:NodePort访问(端口范围:30000~32767)LoadBalancer
:与NodePort类似,在每个节点启用一个端口来暴露服务。除此之外,K8s请求底层云平台的负载均衡器,把每个[Node IP]:[NodePort]作为后端添加进去ExternalName
:外部名称类型,将服务映射到一个外部服务域名上Headless
:无头类型,主要用于DNS解析和服务发现Ingress
:是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS,还可以提供负载均衡、SSL 终结和基于名称的虚拟托管ConfigMap
:API 对象,用来将非机密性的数据保存到键值对中Secret
:包含少量敏感数据(如密码、令牌或密钥)的对象,Secret 可以独立于使用它们的 Pod 创建,因此在创建、查看和编辑 Pod 的工作流程中,Secret(及其数据)被泄露的风险较小Volumes
:数据持久化存储Deployment
:部署有状态应用StatefulSet
:部署无状态应用
k8s架构
环境搭建
需要Matser Node虚拟机和Worker-Node虚拟机
安装kubectl
kubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具,kubectl安装到Matser Node节点的虚拟机
#安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
#查看安装
kubectl version --client
#卸载
sudo rm /usr/local/bin/kubectl
安装k8s
环境准备
- 这里使用kvm Linux虚拟机,使用vmware、virtbox、multipss是一样的,只是虚拟机不同罢了,喜欢哪个用哪个
kvm教程
网上有很多虚拟机安装教程,这里就不赘述了,本人使用debian12,你用啥Linux都可以,操作基本相同
1、配置要求:
- 你使用的电脑内存配置16G以上
- 虚拟机内存:2G或更多
- 虚拟机CPU:2G或更多
- 虚拟机硬盘:40或更多
- 虚拟机网络:每个虚拟机都能访问外网
- ssh连接正常:一般新装的虚拟机远程登陆默认关闭,先开启再克隆方便用远程连接工具操作
- 关闭防火墙:生产主机别关,我们学习关了