Azure AKS 部署程序



项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、程序部署微服务

  1. App Services(单体架构可自动伸缩)
  2. Container Apps
  3. Kubernetes services

1.1 App Services

在这里插入图片描述

1.2 Azure Container Registry

1. 创建Registry

在这里插入图片描述

2. 上传image

  1. 查看当前registry的所有images
az acr list --output table
  1. 登录ACR
az acr login --name harshacontainerregistry
  1. 创建docker image 指定docker file的路径,并创建到当前目录
docker build -t demowebapp:latest -f ./DemoWebaaplication/Dockerfile .
  1. 给image添加tag
docker tag demowebapp:latest harshacontinerregistry.azurecr.io/demowebapp:latest
  1. 由于已经登录过了ACR所以直接push image
dokcer push harshacontainerregistry.azurecr.io/demowebapp:latest
  1. 上传成功可以看到
    在这里插入图片描述

1.3 K8s

在这里插入图片描述

  • 流程

在这里插入图片描述

1.创建k8s

  1. 创建resource group
  2. 创建k8s所需的服务
    在这里插入图片描述
  3. 创建aks
    在这里插入图片描述
  4. 获取crendentials用于本地登录
    在这里插入图片描述
  5. 绑定container registry到k8s项目,这样他就会自动拉去images

在这里插入图片描述

2. 常用命令

  1. 获取当前所有的node
kubectl get nodes
  1. 获取namespace
kubectl get namespaces

二、程序部署K8S

  • 课程地址
Udemy:Develop and Deploy Cloud Native Applications at Scale with Kubernetes(Jose Portilla)

2.1 Pod 和 Service

字段含义
portService 暴露的端口(K8s 集群内访问时使用)
targetPort实际容器(Pod)监听的端口
nodePort每个节点暴露的端口(供集群外部访问)
  • 实际工作流程
外部访问:    http://<NodeIP>:32000
              │
              ▼
        NodePort: 32000 (node port)
              │
              ▼
        ClusterIP Service: port 5001 (port)
              │
              ▼
        Pod: containerPort 5001 (target port)
  • 后端服务:由于是后端服务,端口3000用于服务内容,前端访问后端用3000接口;serice使用selector通过lables进行选择时,必须和pod里的labels完全一样才行
    在这里插入图片描述
  • 前端服务
    在这里插入图片描述
  • 前端服务的env:前端可以直接http://{GRAGE_SERVICE_HOST}:3000 直接访问
    在这里插入图片描述

2.2 Deployments和Pod Replicas

  • 使用了Deployments就不需要pod了
    在这里插入图片描述

2.3 Rolling updates and Rollbacks

1. Rolling updates

  • 滚动更新:为了解决更新时候的停机时间
参数作用举例(副本数 4)
maxUnavailable最多多少个 Pod 暂时不可用如果是 1,表示更新过程中最多可以下线 1 个旧 Pod
maxSurge最多临时额外启动多少个新 Pod如果是 1,表示更新时可以临时多建 1 个新 Pod

在这里插入图片描述

2. rollback

kubectl rollout undo deployment/grade-submission-api -n grade-submission

2.4 Liveness and Readiness probe

  • 可以根据自定义的方式进行self-healing

  • Kubernetes 中的 livenessProbe 正是用来定期检查你的 .NET Web API 是否还“活着”的(即:是否还健康、还在响应请求),通常会配置去访问你服务的 健康检查接口(Health Check Endpoint)

在这里插入图片描述

2.5 Storage orchestration

在这里插入图片描述

  • 对MongoDB进行持久化,这里只是用一个replicates,如果直接使用多副本,需要解决数据库主从一致问题
    mongodb-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
  namespace: grade-submission
spec:
  selector:
    matchLabels:
      app.kubernetes.io/instance: mongodb
  serviceName: mongodb    ## mongodb-0 mongodb-1
  replicas: 1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: grade-submission
        app.kubernetes.io/component: database
        app.kubernetes.io/instance: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo:4.4
        env:
          - name: MONGO_INITDB_ROOT_USERNAME
            value: "admin"
          - name: MONGO_INITDB_ROOT_PASSWORD
            value: "password123"
        ports:
        - containerPort: 27017
        volumeMounts:
        - name: mongodb-persistent-storage
          mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: mongodb-persistent-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

mongodb-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mongodb
  namespace: grade-submission
spec:
  selector:
    app.kubernetes.io/instance: mongodb
  ports:
  - port: 27017
    targetPort: 27017

2.6 Secret and ConfigMap

  • Secret 实际上使用azure key-value 进行管理
    在这里插入图片描述

2.6 Horizontal Pod Autoscalar

  • 自动水平扩容
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: grade-submission-portal-hpa
  namespace: grade-submission
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment # 指定要扩缩容的目标对象
    name: grade-submission-portal # 目标对象的名称
  minReplicas: 1 # 最小副本数
  maxReplicas: 10 # 最大副本数
  metrics:
  - type: Resource 
    resource:
      name: cpu # 指标类型为资源
      target:
        type: Utilization
        averageUtilization: 50  # 如果使用率 > 50%,开始扩容。

2.7 Helm

1. 使用helm打包

  1. 将之前写死的,重复的配置替换为模板
    在这里插入图片描述
  2. 创建Chart.yaml用于helm包的信息管理
apiVersion: v2
name: grade-submission-api
description: A Helm chart for deploying the Grade Submission API, a backend service for managing grade data.
version: 1.0.1
  1. 控制台进行预编译
helm template .

在这里插入图片描述
4. 对templates的所有k8s进行打包

helm package .
  1. 使用helm 部署
helm install grade-submission-api grade-submission-api-1.0.1.tgz
  1. 查看Node
kubectl get pods -n grade-submission

2. 更新helm包

  1. 修改之前使用账号密码登录mongoDB的方式
    在这里插入图片描述
  2. 更新之前的内容,进入到发生更改的文件夹grade-submission-api
heml upagrad grade-submission-api  . -n grade-submission

3. Helm Package Manager

  1. 添加 Helm Repository
helm repo add bitnami https://charts.bitnami.com/bitnami
  1. 查找MongoDB
helm search repo bitnami/mongodb --versions
  1. 获取bitnami的默认values
helm show values bitnami/mongodb >default_values.yaml
  1. 安装bitnami里我们需要的mongoDB的版本
helm install mongodb bitnami/mongodb --version 15.6.4
  1. 编辑value.yaml
useStatefulSet: true

auth:
  enabled: false

image:
  registry: docker.io
  repository: mongo
  tag: 6.0.4-jammy

persistence:
  mountPath: /data/db
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值