3、k8s项目的生命周期和yaml文件

项目的生命周期

创建------>发布------>更新------>回滚------>删除

为什么宿主机不能直接与pod映射

为什么宿主机不能直接与pod映射,中间要有集群?

service一旦和控制器的标签关联之后,会自动的发现该控制器pod的变化自动的获取pod的数量和ip地址的变化。

service既可以关联一个控制器,也可以关联多个控制器,也可以关联pod。

pod是不断变化的,service是不变的。所以必须要有一个中间的状态。

service的类型

1、ClusterIP:当设置控制器的暴露端口时,不指定type,默认就是clusterip,是service的默认类型。访问这个IP可以直接访问pod,但是外部的请求是不能直接到达的。仅限于集群内部的通信。

2、NodePort:需要在创建的时候指定端口类型:--type=NodePort,一旦设定NodePort,会在每个节点上都开放一个端口,每个节点上的端口都是相同的,NodePort的端口号的范围30000-32767

3、LoadBalancer:这个地址一般是云平台服务商提供的地址,仅限于公有云服务平台上设置的service。可以通过这个地址直接访问,实现负载均衡。

4、ExternalName:不能提供负载均衡的服务,service映射到集群外的域名,不涉及后端的pod负载均衡。(一般不用,了解即可)

pod的镜像更新-set

  • deployment的更新方式是滚动更新,也更新其中一部分,然后更新所有

pod的镜像更新就是修改pod的镜像文件

pod的镜像回滚-rollout

回滚用于命令行控制。可以回滚到上一次的操作,也可以隔代。

查看更新过的历史版本

  • 更新时加上record可以记录版本
  • 数字越大表示最近的版本

pod的镜像回滚

项目的发布3种方式

蓝绿发布

把应用服务器分为蓝组和绿组。

要先升级蓝组,先把蓝组从负载均衡中移除出去,绿组继续为用户提供服务。升级蓝组,蓝组升级完毕之后,加入到负载均衡当中,把绿组移除,再升级绿组完成之后,再把绿组加入到负责均衡当中去。

特点:

1、如果升级有问题,影响范围比较大。

2、发布策略简单

3、用户无感知,平滑过度。

早期成本是比较高的,现在有了负载均衡之后,成本也降低了。

金丝雀发布

在升级的时候,先升级一小部分,然后暂停整个升级,一部分是新的,另一大部分还是旧的。

筛选出一小部分用户在新的版本上应用,观察,如果没有问题再把剩余的部分全部更新到新的版本。

特点:

1、一旦出现问题,影响范围很小,调整和修复也很快。

2、充分评估了版本的性能,稳定,出问题的话对用户的体验影响也很小。

3、用户无感知,平滑过渡。

滚动更新

k8s的deploymen的t默认更新方式。

yaml文件

基于yml文件创建pod

配置pod.yml文件

运行yml文件创建pod

删除基于yml文件的pod

  • 删除yml文件会删除基于这个yml文件创建的pod

基于yml文件创建deployment

配置deployment.yml文件

运行之后可以看出,由deployment控制器创建的pod成功。

也可以直接暴露宿主机的端口做映射,但是这种方式只能映射node节点的80端口而不能映射master的端口。

如果想要所有节点都做映射,需要将kind:deployment换成daemonset,并删除下面的副本才可以。

基于yml文件创建service

配置service.yml文件

  • 可以在targetPort下面,添加nodePort: 30001,指定宿主机暴露端口

运行之后可以看出,给上面创建deployment的pod创建了对外服务。

当然也可以把deployment和service的yml文件写在一起,用---分割符分开,可以直接创建pod并建立对外服务。

pod内容器的重启策略

基于控制器创建的pod重启策略只能是Always(默认策略),如果用其他策略只能使用基于pod创建的yaml文件。

当pod内的容器启动失败或者运行时报错的重启策略:

  • Always:默认模式,一直重启(自愈机制的核心)
  • Never:都不重启,docker就是Never
  • OnFailure:只有状态是非0才会重启,是0不重启

command和args

command和args都会覆盖的原有容器的命令输出。

类似于docker的cmd和entrypoint,command和args级别比cmd和entrypoint要高。

args也会给command传参数,在非传参的情况下,只能有一个command,args。

command术lagrs在个yaml文件中,非传参的情况下,只能存在一个,表示容器的启动命令,

会覆盖原容器的启动命令。

1、在创建pod时,使用OnFailure策略,可以使用command和args进行传参。

2、command和args具体用法

这里使用command和args都行。

相关推荐
谷隐凡二22 分钟前
Kubernetes主从架构简单解析:基于Python的模拟实现
python·架构·kubernetes
陈陈CHENCHEN1 小时前
SuperMap iManager for K8s 离线环境镜像仓库 Containerd 部署
kubernetes
会飞的小蛮猪3 小时前
Ubuntu24.04 基于Containerd部署K8s1.34(私服部署)
docker·云原生·kubernetes
间彧14 小时前
Kubernetes滚动发布详解
kubernetes
间彧15 小时前
在实际生产环境中,Kubernetes声明式API如何实现蓝绿部署、金丝雀发布等高级部署策略?
kubernetes
间彧15 小时前
Kubernetes声明式API相比传统命令式API在故障恢复场景下的具体优势有哪些?
kubernetes·github
间彧15 小时前
为什么说Kubernetes的API设计是其成功的关键因素之一?
kubernetes
间彧15 小时前
Kubernetes Deployment 配置简化实战:从复杂到高效
kubernetes
可爱的小小小狼19 小时前
k8s:服务网格Service Mesh(服务网格)istio和envoy
kubernetes·istio·service_mesh
稚辉君.MCA_P8_Java1 天前
Gemini永久会员 containerd部署java项目 kubernetes集群
后端·spring cloud·云原生·容器·kubernetes