开发人员如何理解kubernetes

简介: 在JAVA开发中使用 docker run命令配合上自建的Docker仓库可以很容易部署JAVA服务

概述


在JAVA开发中使用 docker run命令配合上自建的Docker仓库可以很容易部署JAVA服务,但是使用Docker部署应用会有几个问题:


  1. 一个docker run 不是部署服务的可靠方法,因为它创建的容器在单个机器运行。虽然Docker引擎提供了一些基本的管理功能,例如在容器崩溃或计算器重启时自动重启容器。但是它不能处理机器崩溃。无法保证服务的高可用!


  1. 另一个问题是服务通常不是孤立存在,而是相互依赖的,例如数据库和消息队列。我们通常需要将服务及其依赖项作为一个单元部署或取消部署。


在开发过程中特别好用的方法是使用Docker Compose。Docker Compose是一个工具,它允许使用YAML文件以声明方式定义一组容器,然后以组的形式启动和停止这些容器。

但是使用Docker Compose也有个很明显的问题就是它仅限于一台机器。要可靠的部署服务,必须使用Docker编排框架,例如Kubernetes


Kubernetes简介


Kubernates是一个Docker编排框架,是Docker之上的一个软件层,它将一组计算机硬件资源转变成用于运行服务的单一资源池。它努力保持每个服务所需要的实例数量,并确保它们一直在线,即使服务实例或机器崩溃也是如此。容器的灵活性和Kubernetes的复杂性相结合是部署服务的一种强有力的方式。


Kubernetes有三个主要功能:


  • 资源管理:将一组计算机视为由CPU、内存和存储卷构成的资源池,将计算机集群视为一台计算机。


  • 调度:选择要运行容器的机器。默认情况下,调度考虑容器的资源需求和每个节点的可用资源。它还可以实现在同一节点部署具有亲和性(affinity)的容器,或保持特定几个容器分散部署在不同的节点上(反亲和性,anti-affinity)


  • 服务管理:实现命名和版本化服务的概念,这个概念可以直接映射到微服务架构中的具体服务。编排框架确保始终运行所需数量的正常实例。它实现请求的负载均衡。编排框架也可以执行服务的滚动升级,并允许你回滚到旧版本。


Kubernetes架构


1.png

Kubernetes架构


Kubernetes在一组机器上运行。Kubernetes集群中的计算机角色分为主节点和普通节点。集群中只有很少的几个主节点(可能只有一个)和很多普通节点。


「主节点」负责管理集群。Kubernetes的「普通节点」称为 “工作节点”,它会运行一个或多个Pod。Pod是Kubernetes的部署单元,由一组容器组成。


主节点运行多个组件,包括以下内容:


  • API服务器:用于部署和管理服务的REST API,例如,可被kubectl命令行使用。


  • Etcd:存储集群数据键值的NoSQL数据库。


  • 调度器:选择要运行POD的节点。


  • 控制器管理器:运行控制器,确保集群状态与预期状态匹配。例如,一种被称为 复制(replication)控制器 的控制器通过启动和终止实例来确保运行所需要的服务实例。


普通节点运行多个组件,包括以下内容:


  • Kubelet:创建和管理节点上运行的Pod。


  • Kube-proxy:管理网络,包括跨Pod的负载均衡。


  • Pods:应用程序服务。


接下来我们看一下Kubernetes上部署服务需要掌握的关键Kubernetes概念,掌握这几个概念就抓住了Kubernetes的核心。


Kubernetes的关键概念


Kubernetes是很复杂的,但是,一旦掌握了一些「关键对象」的概念,就可以高效的使用Kubernetes。Kubernetes定义了许多类型的对象,从开发人员的角度来看,最重要的对象如下:


  • Pod
    Pod是Kubernetes的基本部署单元。它由一个或多个共享IP地址和存储卷的容器组成。服务实例的pod通常由单个容器组成,例如运行 JVM 的容器。但在某些情况下,Pod包含一个或多个实现支持功能的 「边车」(sidecar)容器。例如,Nginx 服务器可以有一个边车容器,定期执行 git pull 以下载最新版本的网站。Pod的生命周期很短,因为Pod的容器或它运行的节点可能会崩溃。


  • Deployment
    Deployment : Pod 的声明性规范。Deployment是一个控制器,可确保始终运行所需数量的Pod实例 (服务实例)。它通过滚动升级和回滚来支持版本控制。
  • Service
    向应用程序服务的客户端提供的一个静态/稳定的网络地址。它是基础设施提供的服务发现的一种形式。每个 Service具有一个 IP 地址和一个可解析为该 IP 地址的 DNS 名称,并跨一个或多个 Pod对 TCP 和 UDP 流量进行负载均衡处理。IP地址和 DNS 名称只能在Kubernetes内部访问。
    Service默认是使用ClusterIp模式,如果需要外部能访问到这个Service则需要使用另外两种类型的对象:NodePort 和 LoadBalancer。


  • ConfigMap
    名称与值对的命名集合,用于定义一个或多个应用程序服务的外部化配置。Pod容器的定义可以引用ConfigMap来定义容器的环境变量。它还可以使用ConfigMap在容器内创建配置文件。可以使用Secret来存储敏感信息(如密码),它也是 ConfigMap的一种形式。


2.jpg


以上,希望对你有所帮助!

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
Kubernetes 应用服务中间件 数据中心
kubernetes—五个概念入门(一)
kubernetes—五个概念入门(一)
78 0
|
3月前
|
Kubernetes 负载均衡 Perl
kubernetes—五个概念入门(二)
kubernetes—五个概念入门(二)
67 0
|
5月前
|
Kubernetes Linux Shell
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
【K8S 系列】k8s 学习二,kubernetes 核心概念及初步了解安装部署方式
105 0
|
3月前
|
运维 监控 安全
深入探究 Rancher 容器编排平台的核心概念与实践
Rancher 是一款开源的容器编排平台,它可以帮助开发人员和 IT 运维团队更加高效地管理容器化应用程序。本文将深入探究 Rancher 的核心概念和实践,包括其架构、功能和部署流程等方面的内容。
|
9月前
|
Kubernetes 数据可视化 Cloud Native
一文搞懂Kubernetes资源管理工具-KUI
Hello folks,我是 Luga,今天我们来分享一下关于 Kubernetes 资源管理的工具-KUI,全称为“K ubernetes U ser Interface”。作为一款 Kubernetes 工具的集合,KUI 旨在为管理 Kubernetes 资源提供一种更直观和可视化的方式。
135 0
|
8月前
|
运维 Kubernetes 监控
kubernetes学习-概念及特点
kubernetes学习-概念及特点
|
10月前
|
存储 Kubernetes 负载均衡
开发人员如何理解kubernetes
开发人员如何理解kubernetes
49 0
|
11月前
|
存储 运维 Kubernetes
【K8S】kubernetes概念和架构(一)
【K8S】kubernetes概念和架构(一)
149 0
|
存储 Kubernetes 监控
k8s实战系列: 再谈为什么需要Kubernetes
k8s实战系列: 再谈为什么需要Kubernetes
800 1
k8s实战系列: 再谈为什么需要Kubernetes
|
数据采集 缓存 Kubernetes
Kubernetes必备知识: 扩展调度器
Kubernetes 自带了一个默认调度器kube-scheduler,其内置了很多节点预选和优选的调度算法,一般调度场景下可以满足要求。但是在一些特殊场景下,默认调度器不能满足我们复杂的调度需求。我们就需要对调度器进行扩展,以达到调度适合业务场景的目的。
938 0
Kubernetes必备知识: 扩展调度器

推荐镜像

更多