一、K8s快速入门

1)简介

kubernetes简称k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。

部署方式的进化:

 

传统部署时代:

早期,各个组织机构在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。 例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况, 结果可能导致其他应用程序的性能下降。 一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展, 并且维护许多物理服务器的成本很高。

虚拟化部署时代:

作为解决方案,引入了虚拟化。虚拟化技术允许你在单个物理服务器的 CPU 上运行多个虚拟机(VM)。 虚拟化允许应用程序在 VM 之间隔离,并提供一定程度的安全,因为一个应用程序的信息 不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器上的资源,并且因为可轻松地添加或更新应用程序 而可以实现更好的可伸缩性,降低硬件成本等等。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代:

容器类似于 VM,但是它们具有被放宽的隔离属性,可以在应用程序之间共享操作系统(OS)。 因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

容器因具有许多优势而变得流行起来。下面列出的是容器的一些好处:

  • 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
  • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的 容器镜像构建和部署。
  • 关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像, 从而将应用程序与基础架构分离。
  • 可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
  • 跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行。
  • 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
  • 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度。

 

2)架构

(2)master节点架构

kube-apiserver

  • 对外暴露K8S的、接口,是外界进行资源操作的唯一入口
  • 提供认证、授权、访问控制、API注册和发现等机制

etcd

  • 是兼具一致性和高可用性的键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库。
  • Kubernetes集群的数据库通常需要有个备份计划

kube-scheduler

  • 主节点上的组件,该组件监视那些新创建的未指定运行节点的Pod,并选择节点让Pod在上面运行。
  • 所有对k8s的集群操作,都必须经过主节点进行调度

kube-controller-manager

  • 在主节点上运行控制器的组件
  • 这些控制器包括
    • 节点控制器(NodeController):负责在节点出现故障时进行通知和响应。
    • 副本控制器(ReplicationController):负责为系统中的每个副本控制器对象维护正确数量的Pod.
    • 端点控制器(EndpointsController):填充端点(Endpoints)对象(即加入service与Pod)
    • 服务帐户和令牌控制器(Service Account&Token Controllers).为新的命名空间创建默认帐户和API访可令牌

(3)Node节点架构

kubelet

  • 一个在集群中每个Node节点上运行的代理。它保证容器都运行在Pod中。
  • 负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理

kube-proxy

  • 负责为提供cluster内部的服务发现和负载均衡

容器运行环境(Container Runtime)

  • 容器运行环境是负责运行容器的软件。
  • Kubernetes支持多个容器运行环境.Docker、containerd、cri-o、rktlet以及任何实现Kubernetes CRI(容器运行环境接口)。

fluentd

  • 是一个守护进程,它有助于提供集群层面日志集群层面的日志

3)核心组件

1、Pod 是什么,Controller 是什么
Pod 和控制器
控制器可以为您创建和管理多个 Pod,管理副本和上线,并在集群范围内提供自修复能力。
例如,如果一个节点失败,控制器可以在不同的节点上调度一样的替身来自动替换 Pod。
包含一个或多个 Pod 的控制器一些示例包括:
Deployment
StatefulSet
DaemonSet
控制器通常使用您提供的 Pod 模板来创建它所负责的 Pod
 
2、Deployment&Service 是什么

 

3、Service 的意义
  1、部署一个 nginx
  kubectl create deployment nginx --image=nginx
  2、暴露 nginx 访问
  kubectl expose deployment nginx --port=80 --type=NodePort
  统一应用访问入口;
  Service 管理一组 Pod。
  防止 Pod 失联(服务发现)、定义一组 Pod 的访问策略
  现在 Service 我们使用 NodePort 的方式暴露,这样访问每个节点的端口,都可以访问到这
  个 Pod,如果节点宕机,就会出现问题。
 
4、labels and selectors 

 

5、Ingress
通过 Service 发现 Pod 进行关联。基于域名访问。
通过 Ingress Controller 实现 Pod 负载均衡
支持 TCP/UDP 4 层负载均衡和 HTTP 7 层负载均衡

步骤:
1)、部署 Ingress Controller
2)、创建 Ingress 规则
复制代码
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: web
spec:
   rules:
   - host: tomcat6.atguigu.com
      http:
         paths:
            - backend:
                 serviceName: tomcat6
                 servicePort: 80
复制代码
如果再部署了 tomcat8;看效果;
kubectl create deployment tomcat8 --image=tomcat:8.5.51-jdk8
kubectl expose deployment tomcat8 --port=88 --target-port=8080 --type=NodePort
kubectl delete xxx 删除指定资源
随便配置域名对应哪个节点,都可以访问 tomcat6/8;因为所有节点的 ingress-controller 路
由表是同步的。
 
6、网络模型
Kubernetes 的网络模型从内至外
由四个部分组成:
1、Pod 内部容器所在的网络
2、Pod 所在的网络
3、Pod 和 Service 之间通信的网络
4、外界与 Service 之间通信的网络

 

 

 

 

 

 

 

 

 

posted @   狂热搬砖家  阅读(655)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2021-07-07 设计模式-23种设计模式-行为型-命令模式
2021-07-07 设计模式-23种设计模式-行为型-模板模式
2021-07-07 设计模式-23种设计模式-结构型-代理模式
2021-07-07 递归-迷宫问题(回溯算法)
2021-07-07 数据结构-栈
点击右上角即可分享
微信分享提示