剥离代码仓库路径下的容器化和k8s部署资源等非业务代码文件

一、上下文

上文:背景

可将所有的项目应用代码仓库中的容器化配置文件和部署至k8s的配置文件剥离,统一存放在一个地方进行存放管理。不与代码进行耦合,防止分支中这些文件差异引起的代码冲突。

下文:解决方案

将这些文件按照目录层级方式加以区分放在一个静态文件服务器中,在cicd脚本流程需要的地方使用wget进行下载。

-- app1
  |-- test
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml
  |-- stg
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml
  |-- prod
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml
-- app2
  |-- test
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml
  |-- stg
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml
  |-- prod
     |-- Dockerfile
     |-- k8s-deploymen.tpl.yaml

统一存储管理的优点:

  • 可以快速修改
  • 不与业务代码耦合
  • 所有文件进行git版本管理,变更有历史追溯

统一存储管理防单点故障措施

  • 跟普通应用一样进行容器化部署
  • 无状态,使用K8s部署多个实例

二、操作

1、Apache

①部署

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-app-cicd-file-center
  namespace: tools
  labels:
    app: apache-app-cicd-file-center
  annotations:
    kubernetes.io/change-cause: $IMAGE_NAME
spec:
  selector:
    matchLabels:
      app: apache-app-cicd-file-center
  replicas: 2
  template:
    metadata:
      labels:
        app: apache-app-cicd-file-center
    spec:
      imagePullSecrets:
         - name: harbor-token
      volumes:
        - name: apache2-80-conf
          configMap:
            name: apache-app-cicd-file-center
            items:
            - key: apache2-80.conf
              path: 000-default.conf
        - name: apache2-80-auth-file
          configMap:
            name: apache-app-cicd-file-center
            items:
            - key: apache2-80-auth-file
              path: .htpasswd
      containers:
        - name: app
          image: apache:latest
          imagePullPolicy: IfNotPresent
          env:
            - name: K8S_POD_UID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.uid
          volumeMounts:
            - name: apache2-80-conf
              mountPath: /etc/apache2/sites-enabled/000-default.conf
              subPath: 000-default.conf
            - name: apache2-80-auth-file
              mountPath: /etc/apache2/.htpasswd
              subPath: .htpasswd
          ports:
            - containerPort: 80
              protocol: TCP
              name: web
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 80
            timeoutSeconds: 2
          readinessProbe:
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 2
            tcpSocket:
              port: 80
          resources: 
            limits:
              cpu: "500m"
              memory: 500Mi
            requests:
              cpu: "100m"
              memory: 100Mi

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
  name: app-docker-k8s-config
  namespace: tools
data:
  # http base auth基础认证密码文件内容
  apache2-80-auth-file: |
    cicd-user:"该处内容htpasswd工具生成的密码本"
  # Apache的配置文件,配置访问下载文件需要进行http基础认证
  apache2-80.conf: |
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/var/www/html">
            AuthType Basic
            AuthName "Restricted Content"
            AuthUserFile /etc/apache2/.htpasswd
            Require valid-user
        </Directory>
    </VirtualHost>

2、wget

wget -q -nv -np -r -l=1 -nd --http-user=cicd-user --http-password=$APP_K8S_CONFIG_CENTER_TOKEN -R "index.html*" -P docker http://app-k8s-config-center.curiouser.com/test-project/test/

# -q 静默下载,不显示输出
# -nv, --no-verbose 关闭详尽输出,但不进入安静模式。
# -np, --no-parent 不追溯至父目录。
# -r 指定递归下载
# -l 最大递归深度( inf 或 0 代表无限制,即全部下载)。
# -nd, --no-directories 不创建服务器上文件所在的目录路径
# -P 指定文件存储目录 
# -R 指定不下载的文件列表,逗号分隔
# --http-user=USER        设置 http 用户名
# --http-password=PASS    设置 http 密码
Copyright Curiouser all right reserved,powered by Gitbook该文件最后修改时间: 2022-05-16 17:26:46

results matching ""

    No results matching ""