当前位置: 代码网 > 服务器>软件设计>开源 > 【云原生】K8S超详细概述

【云原生】K8S超详细概述

2024年07月31日 开源 我要评论
k8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。

一、kubernets概述

在这里插入图片描述

1.1 k8s什么

  • k8s 的全称为 kubernetes (k12345678s),ps:“嘛,写全称也太累了吧,不如整个缩写”。

作用:

  • 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
    可以理解成 k8s 是负责自动化运维管理多个容器化程序(比如 docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来:

  • k8s由google的borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经go语言延用borg的思路重写并捐献给cncf基金会开源。

  • 云原生基金会(cncf)于2015年12月成立,隶属于linux基金会。cncf孵化的第一个项目就是kubernetes,随着容器的广泛使用,kubernetes已经成为容器编排工具的事实标准。

含义
词根源于希腊语的 舵手、飞行员

官网:

https://kubernetes.io

github:

https://github.com/kubernetes/kubernetes

1.2为什么要用k8s

kubernetes 主要功能如下:

二、kubernetes 集群架构与组件

在这里插入图片描述

2.1master组件

kube-apiserver

kube-controller-manager

这些控制器主要包括:

kube-scheduler

2.2 配置存储中心

etcd

2.3 node 组件

在这里插入图片描述

kubelet

kube-proxy

docker 或 rocket

三、 kubernetes 核心概念

3.1pod

在这里插入图片描述

3.2pod 控制器

k8s 内提供了众多的 pod 控制器,常用的有以下几种:

在这里插入图片描述

deployment:无状态应用部署。deployment 的作用是管理和控制 pod 和 replicaset,管控它们运行在用户期望的状态中。

replicaset:确保预期的 pod 副本数量。replicaset 的作用就是管理和控制 pod,管控他们好好干活。但是,replicaset 受控于 deployment。

replicaset:确保所有节点运行同一类 pod,保证每个节点上都有一个此类 pod 运行,通常用于实现系统级后台任务。

statefulset:有状态应用部署

job:一次性任务。根据用户的设置,job 管理的 pod 把任务成功完成就自动退出了。

cronjob:周期性计划性任务

3.3label

与 label 类似的,还有 annotation(注释)

3.4label 选择器(label selector)

3.5 service

在这里插入图片描述

  • 在k8s的集群里,虽然每个pod会被分配一个单独的ip地址,但由于pod是有生命周期的(它们可以被创建,而且销毁之后不会再启动),随时可能会因为业务的变更,导致这个 ip 地址也会随着 pod 的销毁而消失。

  • service 就是用来解决这个问题的核心概念。
    k8s 中的 service 并不是我们常说的“服务”的含义,而更像是网关层,可以看作一组提供相同服务的pod的对外访问接口、流量均衡器。
    service 作用于哪些 pod 是通过标签选择器来定义的。

  • 在 k8s 集群中,service 可以看作一组提供相同服务的 pod 的对外访问接口。客户端需要访问的服务就是 service 对象。每个 service 都有一个固定的虚拟 ip(这个 ip 也被称为 cluster ip),自动并且动态地绑定后端的 pod,所有的网络请求直接访问 service 的虚拟 ip,service 会自动向后端做转发。

  • service 除了提供稳定的对外访问方式之外,还能起到负载均衡(load balance)的功能,自动把请求流量分布到后端所有的服务上,service 可以做到对客户透明地进行水平扩展(scale)。

  • 而实现 service 这一功能的关键,就是 kube-proxy。kube-proxy 运行在每个节点上,监听 api server 中服务对象的变化, 可通过以下三种流量调度模式: userspace(废弃)、iptables(濒临废弃)、ipvs(推荐,性能最好)来实现网络的转发。

  • 优势非常明显:一方面外部用户不需要感知因为 pod 上服务的意外崩溃、k8s 重新拉起 pod 而造成的 ip 变更, 外部用户也不需要感知因升级、变更服务带来的 pod 替换而造成的 ip 变化。

3.6 ingress

  • service 主要负责 k8s 集群内部的网络拓扑,那么集群外部怎么访问集群内部呢?这个时候就需要 ingress 了。ingress 是整个 k8s 集群的接入层,负责集群内外通讯。
  • ingress 是 k8s 集群里工作在 osi 网络参考模型下,第7层的应用,对外暴露的接囗,典型的访问方式是 http/https。
  • service 只能进行第四层的流量调度,表现形式是 ip+port。ingress 则可以调度不同业务域、不同url访问路径的业务流量。
    比如:客户端请求 http://www.kgc.com:port —> ingress —> service —> pod

3.7name

  • 由于 k8s 内部,使用 “资源” 来定义每一种逻辑概念(功能),所以每种 “资源”,都应该有自己的 “名称”。
  • “资源” 有 api 版本(apiversion)、类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息。
  • “名称” 通常定义在 “资源” 的 “元数据” 信息里。在同一个 namespace 空间中必须是唯一的。

3.8namespace

  • 随着项目增多、人员增加、集群规模的扩大,需要一种能够逻辑上隔离 k8s 内各种 “资源” 的方法,这就是 namespace。
  • namespace 是为了把一个 k8s 集群划分为若干个资源不可共享的虚拟集群组而诞生的。
  • 不同 namespace 内的 “资源” 名称可以相同,相同 namespace 内的同种 “资源”,“名称” 不能相同。
  • 合理的使用 k8s 的 namespace,可以使得集群管理员能够更好的对交付到 k8s 里的服务进行分类管理和浏览。
  • k8s 里默认存在的 namespace 有:default、kube-system、kube-public 等。
  • 查询 k8s 里特定 “资源” 要带上相应的 namespace。

四、常见的k8s安装部署方式

4.1minikube

  • minikube是一个工具,可以在本地快速运行一个单节点微型k8s,仅用于学习、预览k8s的一些特性使用。
部署地址:https://kubernetes.io/docs/setup/minikube

4.2kubeadm

  • kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署k8s集群,相对简单。
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

4.3二进制安装部署

  • 生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签tls证书,组成k8s集群,新手推荐。
https://github.com/kubernetes/kubernetes/releases
  • kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

五、k8s部署 二进制与高可用的区别

5.1二进制部署

  • 部署难,管理方便,集群伸展性能好
  • 更稳定,集群规模到达一定的规模(几百个节点、上万个pod),二进制稳定性是要高于kubeadm部署
  • 遇到故障,宿主机起来了,进程也会起来

5.2kubeadm部署

  • 部署简单,管理难
  • 是以一种容器管理容器的方式允许的组件及服务,故障恢复时间比二进制慢
  • 遇到故障,启动宿主机,再启动进程,最后去启动容器,集群才能恢复,速度比二进制慢
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com