当前位置:首页 > Web开发 > 正文

简单入门Kubernetes

2024-03-31 Web开发

标签:

什么是Kubernetes

官网

https://kubernetes.io/

中文版:https://kubernetes.io/zh/

技术图片

个人理解

基于容器技术

分布式架构

弹性伸缩

隔离物理机

和谷歌的Borg有关系

用于部署、管理、运维我们的应用

Kubernetes核心概念

Kubernetes中的大部分概念,如:Node、Pod、Replication Controller、Service,都可以被视作一种资源对象。几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行CRUD,并将其保存在etcd中进行持久化存储。

从这个角度看,Kubernetes是一个高度自动化的资源控制系统

它通过比较etcd中保存的资源期望值与当前环境的实际资源状态之间的差异,实现自动控制和自动纠错的高级功能

技术图片

Service

拥有唯一的名称

拥有一个虚拟IP和端口号

能够提供某种远程服务能力

被映射到提供这种服务能力的一组容器应用上

Node

物理机

云上的虚拟机

反正就是一台机器就对了

通常一个节点运行几百个Pod

Replication Controller

副本集

它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩

技术图片

RC会在每个节点上创建Pod,Pod上如果有相应的Images可以直接创建,如果没有,则会拉取这个镜像再进行创建

在Kubernetes集群中,只要为需要扩容的Service关联到Pod创建的一个RC,服务扩容和升级就会变得非常简单

一个RC文件,包含以下三个关键信息

目标Pod的定义

目标Pod需要运行的副本数量

要监控的目标Pod的标签

删除RC,,并不会删除通过该RC创建好的Pod

如果要删除RC对于的Pod,可以设置replicas值为0,然后更新RC

kubectl提供stop、delete命令,来一次性删除RC及其对应的Pod

在应用升级的时候

其实就是一个新的容器镜像替代旧版本的过程

通过改变RC中Pod模板的镜像版本,实现滚动升级

ReplicaSet

Replica Set是Replication Controller的下一代

当前唯一的区别就是RS支持基于集合的Label Selector

技术图片

我们很少单独设置RS,主要是被Deployment这个更高层的资源对象所使用

从而形成一整套Pod创建、删除、更新的编排机制

Replica Set和Deployment这两个重要的资源对象,主键替代了RC的作用

Deployment

为了更好的解决Pod的编排问题,Deployment内部使用Replica Set

我们把Deployment当做一次RC的升级即可

技术图片

技术图片

技术图片

Pod

技术图片

Pod是Kubernetes管理的最小运行单元

一个Pod规定了其能够使用的硬件资源,达到隔离的作用

Pod内运行一个特殊的Container---Pause,在Pod内的其他Container,共享Pause的网络栈和Volume挂载卷

Pause

用pause这个不易死亡的容器代表pod的存活与否

pod内的多个业务容器共享Pause的IP,共享Pause挂载的Volume

Kubernetes为每个Pod都分配了唯一IP--->Pod IP

一个Pod内的多个容器共享Pod IP

一个Pod内的容器与另外Node上的Pod容器可以直接通信

Container

镜像启动后,就是Container

Container运行在Pod中,多个紧密相关联的Container,我们一般会让他们运行在同一个Pod

Label

Kubernetes中的各个对象,都可以打上Label标签

标签是name=mysql这样子的键值对

一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上

Kubernetes架构设计

技术图片

Master

Master是集群控制节点

负责运行管理相关的进程

通常Master单独占用一个服务器,如果需要高可用,建议部署3台服务器

Master上运行着以下核心进程

Kubernetes API Server:kube-apiserver,集群控制入口

Kubernetes Controller Manager:kube-controller-manager,资源对象管理

Kubernetes Scheduler:kube-scheduler,资源调度

Master上通常还部署etcd服务,因为Kubernetes里的所有资源对象数据都保存在etcd中

Node

工作节点,运行应用程序

Node上运行着以下核心进程

kubelet:负责Pod对应容器的创建、启停,与Master的协作,实现集群管理

kube-proxy:实现Kubernetes Service的通信,负载均衡的重要组件

docker

Node可以在Kubernetes运行期间动态加入集群

前提是Node节点已经安装好了上述核心进程

默认情况下,kubelet会向Master注册自己

如果某个Node失联,Master会触发“工作负载大转移”的自动流程

HelloWorld

Kubernetes的安装先不讲了

现在要做的事情是

使用Kubernetes部署MySQL与JavaWeb程序

JavaWeb可以访问Kubernetes

基本步骤

MySQL副本集

MySQL Service

JavaWeb副本集

JavaWeb Service

MySQL RC

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/41571.html