k8s部署模板

1. 部署前端项目

yaml 复制代码
# 定义 Deployment 对象,用于部署前端应用
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: xingtu-ui          # 应用标签,用于选择器
  name: xingtu-ui           # 部署的名称
  namespace: xingtu-cloud   # 指定部署的命名空间
spec:
  progressDeadlineSeconds: 600  # 设置升级的最长时间限制
  replicas: 1                   # 设置副本数为1
  selector:                     # 选择器配置,用于匹配模板中的标签
    matchLabels:
      app: xingtu-ui            # 匹配模板中的标签为 app: xingtu-ui
  strategy:
    rollingUpdate:           # 定义滚动升级策略
      maxSurge: 50%          # 允许的最大扩容比例
      maxUnavailable: 50%    # 允许的最大不可用比例
    type: RollingUpdate      # 指定升级类型为 RollingUpdate 逐步替换每个Pod
  template:
    metadata:
      labels:
        app: xingtu-ui      # 模板中的标签,与选择器匹配
    spec:
      volumes:
        - name: xingtu-mysql-config  # 定义一个卷,用于挂载配置文件
          configMap:
            name: xingtu-ui-config # 指定 ConfigMap 的名称,用于存储配置数据
            items:
              - key: nginx.conf  # ConfigMap 中的键,表示要挂载的配置文件
                path: nginx.conf  # 挂载到容器中的路径
            defaultMode: 420   # 设置挂载的文件的默认权限(权限值为420对应八进制文件权限0644)
      imagePullSecrets:
        - name: horbor-134-160-180-87-secret  # 提前在项目中配置访问阿里云的账号密码
      containers:
        - image: $REGISTRY/$DOCKERHUB_NAMESPACE/xingtu-ui:SNAPSHOT-$BUILD_NUMBER # 定义容器使用的镜像,其中 $REGISTRY、$DOCKERHUB_NAMESPACE 和 $BUILD_NUMBER 是变量
          imagePullPolicy: Always   # 镜像拉取策略为始终拉取最新版本
          name: app  # 定义容器的名称
          ports:
            - containerPort: 80 # 容器监听的端口号
              protocol: TCP  # 定义协议为 TCP
          resources:  # 定义容器的资源限制,包括CPU和内存
            limits: #定义资源的上限
              cpu: 300m  # 容器的 CPU 资源限制为300m(300毫核)
              memory: 600Mi # 容器的内存资源限制为600Mi(600兆字节)
          terminationMessagePath: /dev/termination-log #定义容器终止时的日志路径
          terminationMessagePolicy: File #设置终止消息的策略为 File,表示终止消息将写入到文件中
          volumeMounts: #定义容器挂载的卷的配置
            - name: xingtu-ui-config #指定要挂载的卷的名称
              readOnly: true #设置挂载为只读,确保容器只能读取卷中的内容
              mountPath: /etc/nginx/nginx.conf #定义挂载到容器中的路径
              subPath: nginx.conf #指定卷中的子路径,即挂载的文件名
      dnsPolicy: ClusterFirst #指定 DNS 策略为 ClusterFirst,表示容器将使用 Kubernetes 集群内部的 DNS 解析服务
      restartPolicy: Always #定义容器的重启策略为 Always,表示当容器终止时,始终自动重启容器
      terminationGracePeriodSeconds: 30 #定义终止容器的优雅期限为30秒

# 定义 Service 对象,用于提供前端应用的访问服务
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: xingtu-ui      # 为服务添加标签,用于标识该服务
  name: xingtu-ui       # 定义服务的名称为 xingtu-ui
  namespace: xingtu-cloud   # 指定服务所在的命名空间
spec:
  ports:
    - name: http         # 定义端口的名称为 http
      port: 80           # 服务监听的端口号
      protocol: TCP      # 定义协议为 TCP
      targetPort: 80     # 将流量转发到 Pod 的 80 端口
  selector:
    app: xingtu-ui # 选择器,用于将服务与特定的 Pod 关联
  sessionAffinity: None # 会话亲和性设置为 None,表示没有会话保持
  type: ClusterIP    # 服务类型为 ClusterIP,适用于集群内部访问

使用教程:

  1. 创建 ConfigMap YAML 文件,例如 configmap.yaml:
yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: xingtu-ui-config
data:
  nginx.conf: |
    server {
    listen 80; # Nginx 监听的端口

    server_name your-domain.com; # 填写你的域名或者公共 IP 地址

    location / {
        proxy_pass http://xingtu-ui-service; # 这指定了代理请求的后端服务
        proxy_set_header Host $host; #设置一些代理请求的头信息
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; 
    }
}

在这个文件中,我们定义了一个名为 xingtu-ui-config 的 ConfigMap,其中包含了一个键为 nginx.conf 的配置文件。

  1. 使用 kubectl 应用 ConfigMap:

    kubectl apply -f configmap.yaml

  2. 将此 YAML 文件保存为 deployment.yaml。

  3. 使用 kubectl apply 命令部署应用:kubectl apply -f deployment.yaml。

  4. 查看部署状态:kubectl get deployments -n xingtu-cloud。

  5. 查看服务状态:kubectl get services -n xingtu-cloud。

  6. 获取服务的 ClusterIP 地址:kubectl get service xingtu-ui -n xingtu-cloud。

  7. 在浏览器中访问前端应用:http://(使用步骤5中获取的 ClusterIP 地址)。

2.部署后端项目

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: xingtu-auth
  name: xingtu-auth
  namespace: xingtu-cloud   #一定要写名称空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: xingtu-auth
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: xingtu-auth
    spec:
      imagePullSecrets:
        - name: horbor-134-160-180-87-secret  #提前在项目下配置访问阿里云的账号密码
      containers:
        - image: $REGISTRY/$DOCKERHUB_NAMESPACE/xingtu-auth:SNAPSHOT-$BUILD_NUMBER
#           readinessProbe: #检查容器是否准备好接收流量的设置
#             httpGet: #HTTP GET 请求检查容器的健康状态
#               path: /actuator/health #检查的路径 
#               port: 8080 #检查的端口
#             timeoutSeconds: 10 #容器健康检查的超时时间
#             failureThreshold: 30 #失败次数
#             periodSeconds: 5 #间隔时间
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: xingtu-auth
  name: xingtu-auth
  namespace: xingtu-cloud
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector: #指定该服务将关联到哪些标签匹配的 Pod
    app: xingtu-auth #关联到具有标签 app: xingtu-auth 的 Pod
  sessionAffinity: None # 设置会话亲和性。在这里,设置为 None,表示没有会话保持
  type: ClusterIP #定义服务的类型。在这里,服务类型为 ClusterIP,该服务只能在 Kubernetes 集群内部访问
  1. 保存配置文件: 将上述的 YAML 配置保存为一个文件,例如 xingtu-auth-deployment.yaml

  2. 应用配置: 使用 kubectl apply 命令将配置文件应用到 Kubernetes 集群。在终端中运行:

    kubectl apply -f xingtu-auth-deployment.yaml

这将在指定的命名空间 (xingtu-cloud) 中创建 Deployment 和 Service。

  1. 检查部署状态: 可以使用以下命令检查部署的状态:

    kubectl get deployments -n xingtu-cloud

确保 Deployment 的副本数量为 1,并且可以看到应用正常运行。

  1. 检查服务状态: 使用以下命令检查服务的状态:

    kubectl get services -n xingtu-cloud

获取服务的 ClusterIP 地址。

  1. 访问应用: 你可以使用获取到的 ClusterIP 地址和服务的端口(在这里是 8080)访问应用。例如,如果 ClusterIP 地址是 10.0.0.1

    curl http://10.0.0.1:8080

如果你是在浏览器中访问,可以打开 http://10.0.0.1:8080

相关推荐
moppol3 分钟前
Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
云原生·serverless·aws
IvanCodes34 分钟前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
栗子~~1 小时前
Milvus docker-compose 部署
docker·容器·milvus
没有名字的小羊2 小时前
2.安装Docker
运维·docker·容器
xiezhr2 小时前
50 个常用 Docker 命令
运维·docker·容器
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
被困者10 天前
Linux部署Sonic前后端(详细版)(腾讯云)
spring cloud·云原生·eureka
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
进击的码码码码N10 天前
Docker 镜像加速
运维·docker·容器