1396 字
7 分钟
Kubernetes笔记
2024-10-20

基本概念#

Kubernetes(K8S)是一个开源的容器编排平台,主要作用是管理和维护容器。

K8S的基本组件#

Node
节点,一个节点可以是一台虚拟机或者一台物理机,一个集群由若干个结点组成,节点上的组件包括kubelet,容器运行时,kubectl以及kube-proxy等组成。

Pod
Pod是K8S的最小调度单位,可以看成是容器的抽象,一个Pod是一个或者多个应用容器的组合,Pod可以看成一个容器运行时环境,在此环境中容器可以相互共享一些资源,如网络,存储以及运行时配置等。

在一般情况下,为了更好地解耦和扩展,一个Pod只运行一个容器,但如果一些容器间存在高度耦合的情况下,比如需要共享配置文件或者对其中的容器进行日志监控等情况,一个Pod中可以运行多个容器,这些与主要容器进行资源共享的容器被称为边车容器(Sidecar)。

Pod之间的通信通过集群内部的特定IP地址进行通信,每个Pod在被创建的时候都会被自动分配一个IP地址,这个IP地址只能被集群内部使用,外部应用无法访问此IP地址。

Pod并不是一个稳定的实体,它有可能会被频繁地销毁和创建,比如当Pod发生了故障的时候,K8S就会把Pod销毁然后重新创建一个,每当Pod被销毁后重新创建的时候集群内部的IP地址都会被重新分配,也就是说每个Pod的集群内部IP并不是固定的。

Service
为了解决Pod有可能会被销毁和重新创建带来的IP地址变动的问题,引入了一个叫做Service的资源对象,Service可以把一组Pod封装成一组服务(Service)这个服务可以通过一个统一且固定的IP地址来访问。 如下图所示,分别把一个应用程序Pod和三个数据库Pod分别封装成两个Service,应用程序通过数据库Service的IP地址访问数据库,当数据库Service中的Pod发生故障重新创建时,该Pod的IP地址变动并不会对应用程序的使用产生影响,Service会自动地将请求转发到其他正常运行的Pod上。 内部服务和外部服务
在K8S中,可以将服务分成内部服务和外部服务,内部服务即不需要暴露给外部和不能暴露给外部的服务,如数据库,缓存,消息队列等,这些服务只需要在集群内部被访问就足够了。外部服务就是需要暴露给用户使用的服务,比如后端的API接口,前端界面等。

外部服务常见的类型有 ExternalName、LoadBalancer、NodePort、ClusterIP,其中 NodePort 是我们常用的类型,它会在节点上开放一个端口,然后将这个端口映射到 Service 的 IP 地址和端口上,这样就可以通过节点的 IP 地址加端口来访问 Service 了。
类似于 http://127.0.0.1:8080 这种形式。

Ingress
Ingress 是用于管理从集群外部访问集群内部服务的入口和方式,Ingress 是集群中服务的外部访问进行管理的 API 对象,使用HTTP或HTTPS的方式来访问。Ingress也可以用于配置SSL证书或者负载均衡。

Ingress 提供从集群外部到集群内部服务的 HTTP 和 HTTPS 路由,流量的路由由 Ingress 所定义的规则来控制。

通过对 Ingress 的配置,Ingress 可以为 Service 绑定一个供外部访问的 URL 并对其流量进行负载均衡,添加SSL证书等操作。

ConfigMap
ConfigMap 用于将非机密数据保存到键值对中,如各种不包含敏感信息(如数据库账号密码等)的环境配置。使用ConfigMap的目的是将环境配置信息与容器镜像解耦,使得配置信息与代码分离开来,降低运维的成本和难度。
比如当数据库的地址或者端口等配置信息发生改变时,只需要修改ConfigMap对象中的配置信息,然后重新加载Pod即可应用改变,不需要重新编译和部署应用程序。

Secret
正如上面所述 ConfigMap 不能包含敏感信息,因为 ConfigMap 是以明文的方式存储配置信息的,如果将账号密码等敏感信息存入到 ConfigMap 会造成安全隐患,于是K8s提供了Secret组件用于封装和存储敏感信息,但是Secret仅仅只是将配置信息进行了一次 Base64 编码,可以被轻易地还原出敏感信息,因此还需要其他手段来保证敏感信息的安全。

Volume
Pod并不是一个稳定的实体,当 Pod 被销毁或重启时数据也会跟着消失,这对于需要持久化存储的应用程序比如数据库等应用来说肯定是不行的,K8s 提供了 Volume 组件,它可以将一些持久化存储的资源挂载到集群中的本地磁盘上,或者挂载到集群外部的远程存储上,比如说远程文件服务器,对象存储服务器等。

持续补全中。。。。。。

Kubernetes笔记
https://fuwari.vercel.app/posts/kubernetesnote/kubernetesnote/
作者
白露未晞
发布于
2024-10-20
许可协议
CC BY-NC-SA 4.0