在上文中已经可以在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文件的访问限制。