美文网首页k8s
K3s 集群 helm 化改造之nginx

K3s 集群 helm 化改造之nginx

作者: 流雨声 | 来源:发表于2021-04-26 14:50 被阅读0次

    背景概况

    我们的产品应用在应用交付过程中,之前传统的模式下会经历 物理机 -> 虚拟机 -> 容器化 -> K8s应用化 -> helm产品化输出 ,从而构建产品的完整流程实现,helm 化产品应用改造其中主要改造内容包括 deployment 资源化; PV/PVC 存储化; svc/ingress 网络化; 自动脚本job化; 从而实现应用产品的独立输出和集成改造的目的,接下来本文将会从nginx的helm化改造来举例说明在helm应用改造过程中可能涉及到的问题,因为nginx作为一个简单的应用不会涉及 例如 存储/job 应用改造,但是已经可以涵盖绝大多数的应用改造输出能力了。

    原始项目

    # 项目工作展示目录
    cd /home/work/nginx-demo/
    

    Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为名字空间。
    nginx-namespace.yaml 文件内容:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns-test
      labels:
        name: label-test
    

    Deployment 提供了一种对 Pod 和 ReplicaSet 的管理方式
    nginx-deployment.yaml 文件内容:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: ns-test
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
            ports:
            - containerPort: 80
    

    使用 Kubernetes,你无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。
    nginx-service.yaml 内容如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: ns-test
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
    

    项目Helm化

    [root@vm3290 helm]# tree nginx-demo/
    nginx-demo/
    ├── Chart.yaml
    ├── README.md
    ├── templates
    │   ├── nginx-deployment.yaml
    │   ├── nginx-ingress.yaml
    │   ├── nginx-service.yaml
    │   ├── NOTES.txt
    │   └── tests
    │       └── test-connection.yaml
    └── values.yaml
    
    2 directories, 8 files
    

    定义 values.yaml 内容如下:

    replicas: 1
    resources:
      limits:
        cpu: "1"
        memory: 1Gi
      requests:
        cpu: 200m
        memory: 200Mi
    
    service:
      name: nginx-svc
    
    ingress:
      name: nginx-ingress
      host: traefik.dracula.io
    
    # 请不要修改此配置
    global:
      namespace: nginx-ns
      nginx:
        name: nginx-ds
        replicas: 1
        image: nginx
        tag: alpine
        port: 80
    

    部署流程

    1. 安装
    helm install  -n <YOUR-NAMESPACE> nginx-demo nginx-demo 
    
    2. 更新
    helm upgrade  -n <YOUR-NAMESPACE> nginx-demo nginx-demo 
    
    3. 卸载
    
    helm delete -n <YOUR-NAMESPACE> nginx-demo 
    

    资源查看


    image

    拓展阅读:
    我们的应用产品的 helm 化改造以后将会更方便管理和应用组件更新,但是我们再改造时同时需要注意提取那些变参,有些参数不会经常的变更所以需要保持,针对计算资源/存储/网络/密码账号信息这四面的配置一般需要全局变量提取进行可变参数的配置实现,针对镜像或者程序中写死的路径信息一般不做变更,不然需要再次适配才可以进行发布,通过 helm 化产品应用,我们对于自己产品将会很方便的管理和升级更新。

    相关文章

      网友评论

        本文标题:K3s 集群 helm 化改造之nginx

        本文链接:https://www.haomeiwen.com/subject/xmvokltx.html