k8s部署模板

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: k8s部署模板

1. 部署前端项目

# 定义 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:
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
  1. 将此 YAML 文件保存为 deployment.yaml。
  2. 使用 kubectl apply 命令部署应用:kubectl apply -f deployment.yaml。
  3. 查看部署状态:kubectl get deployments -n xingtu-cloud。
  4. 查看服务状态:kubectl get services -n xingtu-cloud。
  5. 获取服务的 ClusterIP 地址:kubectl get service xingtu-ui -n xingtu-cloud。
  6. 在浏览器中访问前端应用:http://(使用步骤5中获取的 ClusterIP 地址)。

2.部署后端项目

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
123 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
215 62
|
5天前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
14 0
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
49 2
|
1月前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
219 2
|
1月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
75 3
|
1月前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
52 0
下一篇
无影云桌面