K8s基本概念入门,k8s基础知识

  K8s基本概念入门,k8s基础知识

  k8s概述前言在学习k8s之前,先对k8s中的具体部件做一个简单的了解。

  Pod是k8s中应用和服务集群部署的最小单元,一个pod中可以部署多个容器。

  Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,服务可以通过简单高效的进程间通信和文件共享的方式进行组合。多容器的吊舱支持是K8最基本的设计理念。

  复制控制器(RC)RC是k8s集群中最早保证Pod高可用性的API对象。它的功能是确保集群中有指定数量的pod在运行。

  如果当前正在运行的pod的数量少于指定的数量,RC将启动pod的新副本,以确保正在运行的pod的数量等于指定的数量。

  如果当前运行的pod的数量大于指定的数量,RC将杀死pod的冗余副本。

  副本集是新一代的副本集,它提供了同样的高可用性。主要区别是RS后来居上,可以支持更多种类的匹配模式。通常,副本对象不单独使用,而是用作部署的理想状态参数。

  部署)部署提供了一种管理Pod和ReplicaSet的方法。每个部署对应于集群中的一个部署,它是一个非常常见的Kubernetes对象。

  部署是一个应用模式比RS更广泛的API对象。它可用于创建新服务、更新新服务或通过滚动升级服务。

  滚动一个服务,滚动一个服务,其实就是创建一个新RS,然后把新RS中的副本数逐渐增加到理想状态,把旧RS中的副本数减少到0的复合操作;RS不能很好地描述这样的复合操作,所以用更一般的部署来描述。

  Service)RC、RS和Deployment只保证支持服务的微服务pod的数量。但是它没有解决如何访问这些服务的问题。

  一个Pod只是运行一个服务的实例,它可能随时在一个节点上停止,然后在一个新的节点上用一个新的IP启动一个新的Pod。因此,不能为该服务提供某个IP和端口号。对于服务来说,无法按照Pod的IP进行调度。Kubernetes引入了服务的概念,为Pod提供了一个入口,主要通过Labels标签选择后端Pod。此时,无论后端Pod的IP地址如何变化,只要Pod的Labels标签不变,通过服务调度业务就不会有问题。

  同时,该服务为绑定的Pod提供了负载均衡功能,因此我们可以在业务中直接使用该服务。

  当服务被声明时,它将自动生成一个集群IP,这是一个虚拟IP。我们可以通过这个IP访问后端的Pod。当然,如果集群配置了DNS服务,比如当前的CoreDNS,也可以通过服务的名称访问,它会自动通过DNS解析服务的IP地址。

  服务向外界公开服务的方式

  1.ClusterIP(默认):服务在集群的内部IP上公开。这种类型的服务只能从群集内部访问。一般这类服务的上层会挂一个Ingress,通过Ingress来公开服务;

  2.NodePort:在每个选中节点的同一个端口上打开服务,使用NodeIP: NodePort从集群外部访问服务;

  3.LoadBalancer:可以使用这种方式,通过使用云厂商的K8S集群来公开服务。一般不支持自建服务。使用LoadBalancer,将生成一个IP地址,通过它可以访问服务,通知这个IP也是高可用的;

  4.externalName:通过返回具有该名称的CNAME记录,使用任何名称(由规范中的ExternalName指定)来公开服务。不要使用代理。此类型需要1.7或更高版本的kube-dns。

  什么是CNAME:这种记录允许你将多个名字映射到同一台计算机上。

  比如,当你有多个域名需要指向同一个服务器IP时,那么你可以做一个其中一个域名指向服务器IP的记录,然后将其他域名(即CNAME)别名为A记录的域名;然后,当你的服务器IP地址改变时,你不必一个一个地改变域名的方向。您只需要将A中记录的域名更改为服务器的新IP地址,其他有别名的域名(即CNAME)的方向会自动更改为新的IP地址(以上操作都需要在DNS上进行)。

  IngressIngress是一个反向代理规则,用于指定HTTP/S请求应该转发到哪个服务,比如根据请求中不同的主机和url路径,将请求丢弃到不同的服务。

  Ingress控制器是一个反向代理程序,负责分析Ingress的反向代理规则。如果Ingress有任何变化,所有Ingress控制器都会及时更新其对应的转发规则,当Ingress控制器收到请求时,会根据这些规则将请求转发到相应的服务。

  Kubernetes没有自带入口控制器,它只是一个标准。具体实现有很多,需要单独安装。Nginx入口控制器和Traefik入口控制器是常用的。

  一个集群中可以有多个入口控制器,您可以指定在入口中使用哪个入口控制器。

  入口控制器部署在集群中。如何从外部访问入口控制器本身?

  1.通过部署来部署入口控制器,并向其添加一个LoadBalancer类型的服务,该服务将自动生成一个IP地址,可以通过该IP访问该IP地址。一般这个IP是高可用的(前提是集群支持LoadBalancer,通常是云服务提供商支持,自建集群不支持);2.使用主机端口;1.Ingress控制器以DaemonSet模式部署,使用集群内部的一个或多个节点作为边缘节点,给节点添加标签进行标识,用nodeSelector绑定到边缘节点,保证每个边缘节点启动一个Ingress控制器实例。使用hostPort直接暴露这些边缘节点中主机的端口,然后我们就可以访问边缘节点中Ingress控制器暴露的端口,这样外部就可以访问Ingress控制器;

  2.使用非亲和的策略,让每个需要部署入口控制器的节点都有一个入口控制器部署,然后直接用hostPort暴露这些边缘节点主机的端口,这样我们就可以通过这些节点的IP和hostPort访问入口控制器。

  但是,使用hostPort方法,我们需要在其上部署一层负载平衡。

  什么是主机端口?

  这是一种直接定义Pod网络的方法。

  Port直接将容器的端口与预定节点上的端口进行路由,以便用户可以通过添加主机的IP来访问Pod,例如:

  apiVersion: v1

  种类:豆荚

  元数据:

  名称:influxdb

  规格:

  容器:

  -名称:influxdb

  图片:influxdb

  端口:

  -集装箱港口:8086

  在port: 8086 Node)k8s中,通过将容器放入在Node节点上运行的Pod中来执行工作负载。k8s中的计算能力是由节点提供的。

  根据群集的配置,节点可以是物理机或虚拟机。通常,在k8s集群中,节点越多,计算能力越强。

  命名空间命名空间为Kubernetes集群提供虚拟隔离。Kubernetes集群最初有两个名称空间,即默认名称空间和系统名称空间kube-system。此外,管理员可以创建新的名称空间来满足他们的需求。

  命名空间适用于跨多个团队或项目有许多用户的场景。对于只有几个到几十个用户的集群,根本不需要创建或考虑名称空间。

  k8s中的部署过程这里用一个简单的栗子来看下,看下k8s中应用的部署过程。

  1、创建命名空间$ kubectl创建名称空间研究-k8s2,使用部署部署pod$ cat go-web.yaml

  apiVersion: apps/v1

  种类:部署

  元数据:

  creation时间戳:空

  标签:

  应用程序:转到网络

  名称:转到网络

  名称空间:研究-k8s

  规格:

  副本:5

  选择器:

  匹配标签:

  应用程序:转到网络

  策略:{}

  模板:

  元数据:

  creation时间戳:空

  标签:

  应用程序:转到网络

  规格:

  容器:

  -图片:liz2019/test-docker-go-hub

  名称:转到应用程序容器

  资源:{}

  状态:{}运行

  $ ku bectl apply-f go-web。YAML-n研究-k8s

  $ kubectl get pods -n study-k8s

  名称就绪状态重新开始老化

  go-web-59f7dc559c-g2hjg 1/1运行0 5h21m

  go-web-59f7dc559c-g6p8k 1/1运行0 5h21m

  go-web-59f7dc559c-l4fgm 1/1运行0 5h21m

  go-web-59f7dc559c-lqvpj 1/1运行0 5h21m

  go-web-59f7dc559c-rrdjp 1/1运行0 5h21m

  $ kubectl描述部署nginx部署n研究-k8s

  名称:转到网络

  名称空间:研究-k8s

  创世纪时间戳:2022年9月七日星期三15时33分58秒0800

  标签:app=go-web

  注释:deployment . kubernetes . io/revision:1

  选择器:app=go-web

  副本:5个需要的 5个更新的 5个总共 5个可用的 0个不可用的

  战略类型:滚动更新

  MinReadySeconds: 0

  滚动更新策略:最大25%不可用,最大25%激增

  豆荚模板:

  标签:app=go-web

  容器:

  go-app-容器:

  图片:liz2019/test-docker-go-hub

  端口:无

  主机端口:无

  环境:无

  坐骑:无

  卷:无

  条件:

  类型状态原因

  - - -

  可用真最小复制可用

  正在进行True NewReplicaSetAvailable

  OldReplicaSets:无

  新的副本集:go-we b-59 F7 DC 559 c(创建了5/5个副本)

  事件:无部署为豆荚和副本集提供声明式更新。所以可以看到创建的部署里面就同时也创建好了副本集。

  3、为服务创建服务上面我们创建了一组豆荚,接下来,我们借助于服务来实现对这些豆荚的访问。

  $ cat go-web-svc.yaml

  apiVersion: v1

  种类:服务

  元数据:

  名称:go-web-svc

  标签:

  运行:go-web-svc

  规格:

  选择器:

  应用程序:转到网络

  端口:

  -协议:TCP

  端口:8000

  目标港:8000

  名称:go-web-http运行

  $ ku bectl apply-f go-we b-SVC。YAML-n研究-k8s

  $ kubectl获取svc -n研究-k8s

  名称类型群集-IP外部-IP端口年龄

  go-web-svc集群IP 10.233.9.188无8000/TCP 37s

  $ kubectl描述svc go-web-svc -n研究-k8s

  名称:go-web-svc

  名称空间:研究-k8s

  标签:run=go-web-svc

  注释:无

  选择器:app=go-web

  类型:集群IP

  IP: 10.233.9.188

  端口:go-web-http 8000/TCP

  目标端口:8000/TCP

  端点:10.233.111.104:8000,10.233.111.105:8000,10.233.111.106:8000 2更多.

  会话关联性:无

  事件:无可以看到服务已经创建完成。

  4、配置进入的转发策略服务已经创建成功了,接下来我们使用进入

  $ cat go-web-ingress.yaml

  应用程序接口版本:networking.k8s.io/v1

  种类:入口

  元数据:

  名称:转到网络入口

  注释:

  kubernetes.io/ingress.class: nginx

  规格:

  规则:

  主持人:www.go-web.com

  http:

  路径:

  -路径:/索引

  路径类型:前缀

  后端:

  服务:

  名称:go-web-svc

  端口:

  数量:8000部署进入

  $ ku bectl应用-f go-we B- ingress。YAML-n研究-k8s

  $ kubectl get ingress -n study-k8s

  名称类别主机地址端口年龄

  无www.go-web.com11.11.111.113通过进入访问

  $ curl 11.11.111.113:80/index \

  -标题“主持人:www.go-web.com”

  h1 hello world /h1 div你好/div %也可以在本地添加主持人,通过域名访问

  $ sudo vi /etc/hosts

  //根据进入部署的互联网协议(互联网协议的缩写)

  11.11.111.113www.liz-test.com

  总结1、豆荚是k8s中集群部署应用和服务的最小单元;

  2、钢筋混凝土是k8s集群中最早的保证豆荚高可用的应用程序接口对象。它的作用就是保证集群中有指定数目的豆荚运行;

  3、RS是新一代RC,提供同样的高可用能力,是目前主要使用的对象;

  4.部署提供了一种管理Pod和ReplicaSet的方法,RS与部署结合使用。

  5.一般采用部署的方式通过滚动来升级一个服务,实际上是创建一个新的RS,然后把新RS中的副本数逐渐增加到理想状态,把旧RS中的副本数减少到0的复合操作;RS不能很好地描述这样的复合操作,所以用更一般的部署来描述。

  6.RC、RS和部署只保证支持服务的微服务pod的数量。但是它没有解决如何访问这些服务的问题。一个Pod只是运行一个服务的实例,它可能随时在一个节点上停止,然后在一个新的节点上用一个新的IP启动一个新的Pod。因此,无法为该服务提供特定的IP和端口号。对于服务来说,无法按照Pod的IP进行调度。Kubernetes引入了服务的概念,为Pod提供了一个入口,主要通过Labels标签选择后端Pod。此时,无论后端Pod的IP地址如何变化,只要Pod的Labels标签不变,通过服务调度业务就不会有问题。

  7.服务是真实后端服务的抽象,一个服务可以代表多个相同的后端服务;

  8.Ingress是一个反向代理规则,用于指定HTTP/S请求应该转发到哪个服务。比如根据请求中不同的主机和url路径,请求落到不同的服务;

  版权归作者所有:原创作品来自博主小二上九8,转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: