在上文中已经可以在docker中部署应用,并且还有k8s集群了,下面在k8s集群中部署应用。
在k8s集群中部署应用,主要关注两个配置文件,deployment.yaml,和service.yaml,
deployment.yaml是Kubernetes中用于定义部署(Deployment)资源的配置文件
Service资源对象用于定义一种抽象的方式来访问一组特定的Pod。Service提供了一种负载均衡机制,使得一组Pod实例可以被集群内的其他组件访问
deployment配置
配置主要如下:
apiVersion: apps/v1 # 指定API版本
kind: Deployment # 资源类型
metadata: # 元数据
name: huq-deployment # Deployment的名称
namespace: default # 可选,部署所在的命名空间,默认为default
labels: # 标签,用于关联服务
app: huq-app
spec: # 规范
replicas: 3 # 指定Pod副本数,就是启动相同服务的个数
selector: # 选择器,用于选择要管理的Pod
matchLabels:
app: huq-app
template: # Pod模板定义
metadata:
labels:
app: huq-app
spec: # Pod规范
containers: # 容器配置
- name: huq-container # 容器名称
image: huq-app-image:latest # 容器使用的镜像,这里可以配置镜像仓库连接
ports:
- containerPort: 80 # 容器端口
resources: # 可选,指定容器的资源请求和限制
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
strategy: # 可选,滚动更新策略
type: RollingUpdate # 更新策略类型,RollingUpdate或Recreate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 10 # 可选,保留的修订历史记录数
这个配置文件定义了一个名为huq-deployment的Deployment,它将启动3个拥有单个容器的Pod副本。每个Pod都会运行一个huq-app-image镜像最新版本的容器,并暴露端口80。所有的Pod都带有app: huq-app的标签,以便Deployment可以精确地管理它们
service配置
主要配置如下:
apiVersion: v1 #指定创建资源对象所使用的Kubernetes API版本。
kind: Service #指定要创建的资源对象类型,这里是Service。
metadata:
name: huq-service # 指定Service的名称
spec:
selector:
app: huq-app #指定标签选择器,用于选择符合条件的Pod。
ports:
- protocol: TCP #访问协议
port: 80 #访问端口
targetPort: 9376 #对应提供服务端口
type: LoadBalancer # 定义Service类型,如ClusterIP(默认)、NodePort或LoadBalancer。
这个YAML文件定义了一个名为huq-service的Service,它将端口80上的外部请求负载均衡到标签为app=huq-app的Pod的端口9376上。
在部署应用的时候,先执行deployment.yaml,再执行service.yaml,Service将引流到Deployment定义的Pod。
以上操作可以借助Jenkins自动化执行。 主要流程在本地打包镜像上传到仓库,然后服务器执行deployment文件,再执行service引流完成一次部署
本人尝试在本地搭建仓库进行部署应用,使用本地docker新建了一个register,但是是镜像仓库需要认证,需要配置https路径,还有在k8s配置文件中设置service文件的访问限制。