Kubernetes学习笔记
1.Kubernetes
1.作用
帮助管理容器化 的应用程序和服务(GooGle开源),用于容器化应用程序的部署 扩展和管理
2.特性 ———–>提高应用程序的性能 可用性 和稳定性
2.1.容器编排
通过配置文件(yaml)定义应用程序的部署方式,让容器的创建维护和管理变得更加简单和高效
2.2.高可用
系统可以在长时间内持续正常的运行,不会因为某一组件或服务的故障而导致整个系统不可用的情况发生
k8s提供: 自动重启 自动重建 自我修复etc —–>提高集群的可用性,让用户可以在任何时间内都能正常的使用系统
2.3.可扩展性
系统可以根据负载的变化来动态的扩展或者缩减系统的资源,从而提高系统的性能和资源的利用率
2.4灾难恢复
2.5弹性伸缩
2.Kubernetes组件
1.node:Kubernetes集群中的节点(物理机 虚拟机)
2.Pod
Kubernetes的最小调度单元,容器的一个抽象,一个Pod就是一个或者多个应用容器的组合(一般一个pod只运行一个容器)
3.service
将一组pod封装为一个服务,并且提供一个统一的入口来访问这个服务
解决pod ip地址不稳定问题
4.服务
内部服务:mysql 缓存 消息队列etc
外部服务: 微服务的后端API接口,给用户使用的前端页面
常用类型: Node :Port 在节点上开放一个端口,然后将这个端口映射到Service的IP地址和端口上,这样我们可以通过节点的IP地址和端口来访问Service
5.Ingress (对外提供服务)
将外部的请求路由转发到内部的service上
管理从集群外部访问集群内部服务的入口和方式,可以通过Ingress来配置不同的转发规则,来访问集群内部不同的Service,以及Service所对应的后端Pod
配置域名 负载均衡 ssl证书
6.ConfigMap
封装配置信息,在应用程序中读取和使用
保持容器化应用程序的可移植性,实现应用程序和数据库的解耦
注:配置信息明文
避免了配置变更带来的重新编译和部署的问题
7.Secret
封装敏感信息 在应用程序中读取和使用
避免了配置变更带来的重新编译和部署的问题
注:只是做了一层Base64的编码,不是加密方式,不安全 ——–>配合其他安全机制:网络安全 访问控制 身份认证etc
8.Volume
将一些持久化存储的资源挂载到集群中的本地磁盘上,或者挂载到集群外部的远程存储上,实现容器中数据的持久化存储
9.Deployment (部署无状态应用程序)(高可用性)
定义和管理应用程序的副本数量以及应用程序的更新策略,简化应用程序的部署和更新操作
副本控制 定义和管理应用程序的副本数量
滚动更新 定义和管理应用程序的更新策略,轻松地升级应用程序的版本,逐渐使用新的版本替换掉旧的版本,确保应用程序的平滑升级
数据库的多副本
自动扩缩容
10.StatefulSet (数据库 缓存 消息队列等有状态的应用及一些保留了会话状态的应用程序)(高可用性)
定义和管理应用程序的副本数量或者动态扩缩容等功能
保证每个副本都有自己稳定的网络标识符和持久化存储
3.Kubernetes架构(Master-Worker架构)
1.工作(Worker)节点上的3个组件及工作原理
对外提供服务,node上包含3个组件 kubelet kube-proxy container-runtime
kubelet
负责管理和维护每个节点上的Pod,并确保它们按照预期运行
也会定期从api-server组件接收新的或者修改后的Pod规范
也会监控工作节点的运行情况,然后将这些信息汇报给apiserver
kube-proxy
负责为Pod对象提供网络代理和负载均衡服务
在每个Node上启动一个网络代理,使发往Service的流量以一种高效的方式路由到正确的后端Pod中
container-runtime(容器运行时)
负责拉取容器镜像 创建容器 启动或者停止容器等

2.Master节点上的组件及工作原理
kube-apiserver
负责提供Kubernetes集群的API接口服务,所有的组件都会通过这个接口来进行通信
负责对所有资源对象的增 删 改查等操作进行认证 授权和访问控制,确保只有经过认证和授权的用户才能够访问到集群中的资源对象,提高整个集群系统的安全性
集群的网关,整个系统的入口
创建 更新 删除Pod的请求,或者是一些查询集群状态的命令,先经过apiserver,再转发给对应的组件来处理
Scheduler(调度器)
负责监控集群中所有节点的资源使用情况,然后根据一些调度策略将Pod调度到合适的节点上运行
ControllerManager(控制器管理器)
负责管理集群中各种资源对象的状态
监控集群中各种资源对象的状态(pod node service),然后根据这些状态来做出相应的响应,确保集群中的各种资源对象都处于我们预期的状态
etcd(高可用的键-值存储系统)
用来存储集群中所有资源对象的状态信息
集群的大脑,整个集群的数据存储中心
一般只存储各种资源对象的状态信息,而应用程序中的数据(比如数据库),一般不会存储在etcd
Cloud Controller Manager(云控制器管理器)
云平台相关的控制器,负责与云平台的API交互,并且可以提供一致的管理接口,使得用户可以更加方便地在不同的云平台中运行和管理他们的应用程序
minikube搭建环境
minikube(单节点 轻量级)
一个轻量级的Kubernetes发行版,可在本地计算机上创建虚拟机,并部署仅包含一个节点的简单集群。
在本地运行一个单节点的Kubernetes集群
其它工具: k3s k3d kind
minikube搭建环境
kubectl 和集群环境交互的命令行工具
webui api接口 —–>其他交互方式
安装minikube
minikube的安装:
# macOS brew install minikube # Windows choco install minikube # Linux curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64/usr/local/bin/minikube
也可以到官网直接下载安装包来安装:https://minikube.sigs.k8s.io/docs/start/
启动minikube
# 启动minikubeminikube start