搭建k8s测试生产集群

本文详细介绍了使用CI/CD工具进行软件构建、测试和部署的过程,包括Maven编译、Docker镜像构建与推送,并通过Kubernetes配置文件在不同环境中(测试、演示、生产)部署应用,涉及K8s服务与Deployment的创建。
摘要由CSDN通过智能技术生成

ci,cd脚本

before_script:
  - export IMAGE_FULL_NAME=${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHA}

stages:
  - compile
  - build
  - test
  - show
  - cloud
  - req_prod

variables:
  MAVEN_REPO: "/data/repo"
  PROJECT: "snow-anti"
  PROJECT_PORT: "8041"
  K8S_FILE: snow-k8s.yml

job-compile:
  image: registry.onesport.com.cn/docker/maven:3.6.3
  stage: compile
  allow_failure: false
  tags:
    - share
  only:
    - /^release.*$/
  script:
    - mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
  artifacts:
    expire_in: 2week
    paths:
      - target/*.jar

job-build:
  image: registry.onesport.com.cn/docker/ci-tool:1.0
  stage: build
  allow_failure: false
  dependencies:
    - job-compile
  tags:
    - share
  only:
    - /^release.*$/
  script:
    - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $IMAGE_FULL_NAME .
    - docker push $IMAGE_FULL_NAME
    - docker rmi $IMAGE_FULL_NAME


启动K8s测试环境:
  image: roffe/kubectl
  stage: test
  allow_failure: false
  only:
    - /^release.*$/
  tags:
    - snow-k8s
  variables:
    PROJECT_PORT: "8041"
    APP_REPLICAS: 1
    APP_NS: "new-system"
    APP_CPU: "800m"
    APP_MEMORY: "800Mi"
  script:
    - mkdir -p /root/.kube
    - echo ${kube_config} | base64 -d > /root/.kube/config
    - export KUBECONFIG=/root/.kube/config
    - kubectl version
    - sed -i "s#{APP_NAME}#$PROJECT#g;
      s#{APP_PORT}#$PROJECT_PORT#g;
      s#{APP_COUNT}#$APP_REPLICAS#g;
      s#{NAMESPACE}#$APP_NS#g;
      s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
    - cat $K8S_FILE
    - kubectl apply -f $K8S_FILE

启动K8s演示环境:
  image: roffe/kubectl
  stage: show
  allow_failure: false
  when: manual
  only:
    - /^release.*$/
  tags:
    - snow-k8s
  variables:
    PROJECT_PORT: "8041"
    APP_REPLICAS: 1
    APP_NS: "show-new-system"
    APP_CPU: "800m"
    APP_MEMORY: "800Mi"
  script:
    - mkdir -p /root/.kube
    - echo ${kube_config} | base64 -d > /root/.kube/config
    - export KUBECONFIG=/root/.kube/config
    - kubectl version
    - sed -i "s#{APP_NAME}#$PROJECT#g;
      s#{APP_PORT}#$PROJECT_PORT#g;
      s#{APP_COUNT}#$APP_REPLICAS#g;
      s#{NAMESPACE}#$APP_NS#g;
      s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
    - cat $K8S_FILE
    - kubectl apply -f $K8S_FILE

启动K8s生产环境:
  image: roffe/kubectl
  stage: req_prod
  allow_failure: false
  when: manual
  only:
    - /^release.*$/
  tags:
    - snow-tyy
  variables:
    PROJECT_PORT: "8041"
    APP_REPLICAS: 1
    APP_NS: "one-system"
    APP_CPU: "800m"
    APP_MEMORY: "800Mi"
  script:
    - mkdir -p /root/.kube
    - echo ${cloud_config} | base64 -d > /root/.kube/config
    - export KUBECONFIG=/root/.kube/config
    - kubectl version
    - sed -i "s#{APP_NAME}#$PROJECT#g;
      s#{APP_PORT}#$PROJECT_PORT#g;
      s#{APP_COUNT}#$APP_REPLICAS#g;
      s#{NAMESPACE}#$APP_NS#g;
      s#{IMG_HOST}#$IMG_HOST#g;
      s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
    - cat $K8S_FILE
    - kubectl apply -f $K8S_FILE

k8syml文件

apiVersion: v1
kind: Service
metadata:
  name: {APP_NAME}
  namespace: {NAMESPACE}
  labels:
    app: {APP_NAME}
spec:
  type: NodePort
  ports:
    - port: {APP_PORT}
      targetPort: {APP_PORT}
      name: {APP_NAME}
  selector:
    app: {APP_NAME}

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {APP_NAME}
  namespace: {NAMESPACE}
spec:
  replicas: {APP_COUNT}
  selector:
    matchLabels:
      app: {APP_NAME}
  template:
    metadata:
      labels:
        app: {APP_NAME}
    spec:
      containers:
        - name: {APP_NAME}
          image: {IMAGE_URL}
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: {APP_PORT}
            initialDelaySeconds: 60
            timeoutSeconds: 2
            periodSeconds: 20
            successThreshold: 1
            failureThreshold: 5
          ports:
            - containerPort: {APP_PORT}
          env:
            - name: EUREKA_HOST
              valueFrom:
                configMapKeyRef:
                  name: registry-cm
                  key: registry_name
            - name: REDIS_HOST
              valueFrom:
                configMapKeyRef:
                  name: redis-cm
                  key: redis_host
            - name: REDIS_PORT
              valueFrom:
                configMapKeyRef:
                  name: redis-cm
                  key: redis_port
            - name: REDIS_DB
              valueFrom:
                configMapKeyRef:
                  name: redis-cm
                  key: redis_db
            - name: REDIS_PWD
              valueFrom:
                configMapKeyRef:
                  name: redis-cm
                  key: redis_pwd
            - name: PGSQL_PWD
              valueFrom:
                configMapKeyRef:
                  name: db-cm
                  key: pgsql_password
            - name: PGSQL_URL
              valueFrom:
                configMapKeyRef:
                  name: db-cm
                  key: pgsql_url
            - name: PGSQL_USERNAME
              valueFrom:
                configMapKeyRef:
                  name: db-cm
                  key: pgsql_username
            - name: PGSQL_PWD
              valueFrom:
                configMapKeyRef:
                  name: db-cm
                  key: pgsql_password
            - name: PGSQL_DB
              valueFrom:
                configMapKeyRef:
                  name: db-cm
                  key: pgsql_anti_db
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: HOST_NAME
              value: "$(POD_NAME).{APP_NAME}"
            - name: SERVER_NAME
              value: {APP_NAME}
            - name: SERVER_PORT
              value: "{APP_PORT}"
            - name: TZ
              value: "Asia/Shanghai"
#      volumes:
#      - name: host-time
#        hostPath:
#          path: /etc/localtime
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值