当前位置: 首页 > article >正文

K8S 快速实战

K8S 核心架构原理:

我们已经知道了 K8S 的核心功能:自动化运维管理多个容器化程序。那么 K8S 怎么做到的呢?这里,我们从宏观架构上来学习 K8S 的设计思想。首先看下图:

K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责核心的调度、管理和运维,Slave 节点则执行用户的程序。但是在 K8S 中,主节点一般被称为Master Node 或者 Head Node,而从节点则被称为Worker Node 或者 Node。

注意:Master Node 和 Worker Node 是分别安装了 K8S 的 Master 和 Woker 组件的实体服务器,每个 Node都对应了一台实体服务器(虽然 Master Node 可以和其中一个 Worker Node 安装在同一台服务器,但是建议Master Node 单独部署),所有 Master Node 和 Worker Node 组成了 K8S 集群,同一个集群可能存在多个Master Node 和 Worker Node。

首先来看Master Node都有哪些组件:

  • API Server。K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具),然后,API Server 根据用户的具体请求,去通知其他组件干活。
  • Scheduler。K8S 所有 Worker Node 的调度器。当用户要部署服务时,Scheduler 会选择最合适的Worker Node(服务器)来部署。
  • Controller Manager。K8S 所有 Worker Node 的监控器。Controller Manager 有很多具体的

Controller, Node Controller、Service Controller、Volume Controller 等。Controller 负责监控和调整在 Worker Node 上部署的服务的状态,比如用户要求 A 服务部署 2 个副本,那么当其中一个服务挂了的时候,Controller 会马上调整,让 Scheduler 再选择一个 Worker Node 重新部署服务。

  • etcd。K8S 的存储服务。etcd 存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

接着来看Worker Node的组件:

  • Kubelet。Worker Node 的监视器,以及与 Master Node 的通讯器。Kubelet 是 Master Node 安插在 Worker Node 上的“眼线”,它会定期向 Master Node 汇报自己 Node 上运行的服务的状态,并接受来自 Master Node 的指示采取调整措施。负责控制所有容器的启动停止,保证节点工作正常。
  • Kube-Proxy。K8S 的网络代理。Kube-Proxy 负责 Node 在 K8S 的网络通讯、以及对外部网络流量的负载均衡。
  • Container Runtime。Worker Node 的运行环境。即安装了容器化所需的软件环境确保容器化程序能够跑起来,比如 Docker Engine运行环境。

在大概理解了上面几个组件的意思后,我们来看下上面用K8S部署Nginx的过程中,K8S内部各组件是如何协同工作的:

我们在master节点执行一条命令要master部署一个nginx应用(kubectl create deployment nginx --
image=nginx)

  1. 这条命令首先发到master节点的网关api server,这是matser的唯一入口
  2. api server将命令请求交给controller mannager进行控制
  3. controller mannager 进行应用部署解析
  4. controller mannager 会生成一次部署信息,并通过api server将信息存入etcd存储中
  5. scheduler调度器通过api server从etcd存储中,拿到要部署的应用,开始调度看哪个节点有资源适合部署
  6. scheduler把计算出来的调度信息通过api server再放到etcd中
  7. 每一个node节点的监控组件kubelet,随时和master保持联系(给api-server发送请求不断获取最新数据),拿到master节点存储在etcd中的部署信息
  8. 假设node2的kubelet拿到部署信息,显示他自己节点要部署某某应用
  9. kubelet就自己run一个应用在当前机器上,并随时给master汇报当前应用的状态信息
  10. node和master也是通过master的api-server组件联系的
  11. 每一个机器上的kube-proxy能知道集群的所有网络,只要node访问别人或者别人访问node,node上的kube-proxy网络代理自动计算进行流量转发

K8S 快速实战:

1、kubectl命令使用
kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver实现各种增删改查等操作
kubectl官方使用文档:https://kubernetes.io/zh/docs/reference/kubectl/overview/

K8S的各种命令帮助文档做得非常不错,遇到问题可以多查help帮助

2、创建一个Tomcat应用程序
使用 kubectl create deployment 命


http://www.kler.cn/a/516084.html

相关文章:

  • 计算机网络之网络层
  • 分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法
  • SSM开发(一)JAVA,javaEE,spring,springmvc,springboot,SSM,SSH等几个概念区别
  • 网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁
  • MySQL(4)多表查询
  • tinykv Project2ab 实现思路
  • 【ARTS】【LeetCode-704】二分查找算法
  • 洛谷刷题1-3
  • Java如何实现反转义
  • 【Ubuntu】安装SSH启用远程连接
  • UE 像素流Pixel Streaming笔记
  • 五种高频设计模式及其在 Spring 中的应用揭秘
  • Git克隆 提示证书验证失败解决
  • Python OrderedDict 实现 Least Recently used(LRU)缓存
  • 【易康eCognition实验教程】002:创建工作空间、工程
  • 分布式光纤应变监测是一种高精度、分布式的监测技术
  • element tbas增加下拉框
  • Windows Server 虚拟化环境中SR-IOV网络I/O增强功能
  • HTML5 常用事件详解
  • JavaScript图像处理,常用图像边缘检测算法简单介绍说明
  • 51 单片机矩阵键盘密码锁:原理、实现与应用
  • 微信小程序中实现进入页面时数字跳动效果(自定义animate-numbers组件)
  • 前后端交互过程
  • mysql my.ini 配置参数结束
  • 高性能队列 Disruptor 在 IM 系统中的实战
  • Linux进程间通信(补充)