聊聊K8S(文末送书~)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 聊聊K8S(文末送书~)

大家好,我是飘渺。

有不少人问什么是K8S,其实这很好理解。K8S就是Kubernetes的简称,取收尾两个字母K和S,剩下中间8个字母使用数字8代替,就成为了K8S。

开个玩笑,本文从开发人员的视角带大家理解一下Kubernetes。当然,文末还会给你送上一份惊喜。


概述


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

  1. 一个docker run 不是部署服务的可靠方法,因为它创建的容器在单个机器运行。虽然Docker引擎提供了一些基本的管理功能,例如在容器崩溃或计算器重启时自动重启容器。但是它不能处理机器崩溃。无法保证服务的高可用!
  2. 另一个问题是服务通常不是孤立存在,而是相互依赖的,例如数据库和消息队列。我们通常需要将服务及其依赖项作为一个单元部署或取消部署。

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

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


Kubernetes简介


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

Kubernetes有三个主要功能:

  • 资源管理:将一组计算机视为由CPU、内存和存储卷构成的资源池,将计算机集群视为一台计算机。
  • 调度:选择要运行容器的机器。默认情况下,调度考虑容器的资源需求和每个节点的可用资源。它还可以实现在同一节点部署具有亲和性(affinity)的容器,或保持特定几个容器分散部署在不同的节点上(反亲和性,anti-affinity)
  • 服务管理:实现命名和版本化服务的概念,这个概念可以直接映射到微服务架构中的具体服务。编排框架确保始终运行所需数量的正常实例。它实现请求的负载均衡。编排框架也可以执行服务的滚动升级,并允许你回滚到旧版本。

Kubernetes架构


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的一种形式。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
12月前
学IT上培训班有用吗?
学IT上培训班有用吗?
274 0
|
5月前
|
C语言
蓝桥杯入门题 赛前练一练,喝前摇一摇
这是一个C语言编程题目集,包含10个不同的任务。任务包括:1) 打印所有5位01串,2) 找出n个数的最大值、最小值和,3) 搜索整数在数列中的位置,4) 找出立方和等于自身的三位数,5) 找出回文数,6) 对数列进行排序,7) 将秒转换为HH:MM:SS格式,8) 比较两个字符串是否相同,9) 数字的中文读法,10) 计算阶乘。每个任务都有对应的代码示例。
34 2
|
5月前
|
网络协议 前端开发 Java
红中私教:计网那点事(1)
红中私教:计网那点事(1)
65 0
|
人工智能 算法 前端开发
8月博主有奖征文,百分百得奖
8月博主有奖征文,百分百得奖
1634 35
8月博主有奖征文,百分百得奖
|
人工智能 算法 前端开发
7月博主有奖征文,百分百得奖
7月博主有奖征文,百分百得奖
1360 14
|
新零售 机器学习/深度学习 人工智能
获得【ET勋章】后的感想
获得【ET勋章】后的感想
148 0
获得【ET勋章】后的感想
|
架构师 测试技术 程序员
全攻略!!!告诉学弟学妹怎么入行游戏行业
有粉丝问我想要做游戏,怎么才能进入游戏行业呐?忆当年,已过十余载,当年大学毕业的时候有学姐进入珠海西山居做测试,当时觉得很高端,好想进去,可惜没有如意,当时觉得很遗憾,不过两年后我还是进入了游戏行业,只是为了弥补遗憾,为了不让和我有同样想法的同学有遗憾,今天聊一下具体入行攻略。
245 0
全攻略!!!告诉学弟学妹怎么入行游戏行业
良心之作送你几个Xsheel使用小技巧(1)
良心之作送你几个Xsheel使用小技巧
120 0
良心之作送你几个Xsheel使用小技巧(1)
|
分布式计算 安全 自动驾驶
独享福利 | 5G和你想象的完全不同?!留言赢取《果壳中的5G》实体书
5G自2019年正式官宣以来,已经轰轰烈烈了一年多时间。随着各个领域的进展,5G的样貌也越来越清晰地展现在人们面前,而这一切可能与你曾经想象的 完 全 不 同!《果壳中的5G》带你了解5G真面目!文末独家福利,参与留言互动,原价79元《果壳中的5G》实体书免费赠!喜欢的同学千万别错过!
1441 0
独享福利 | 5G和你想象的完全不同?!留言赢取《果壳中的5G》实体书
|
Java C语言 C++
我与阿里云的恋爱笔记
首先自我介绍一下,我是一名软件工程专业的大三学生,目前接触阿里云服务器已经有一年多的时间了。虽然在技术层面不可能和众多大牛们相比,但是我还是想聊聊我和阿里云之间的故事
下一篇
无影云桌面