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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。