最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

容器化技術(shù)架構(gòu)jenkins?docker?k8s腳本淺析

 更新時(shí)間:2022年03月01日 10:30:40   作者:kl  
本篇博文不是詳細(xì)介紹容器技術(shù)的,而是具體的實(shí)踐。此篇博文分為兩個(gè)階段,分別是ci,cd。包含三部分內(nèi)容,分別是jenkins,docker,k8s的腳本淺析

前言碎語(yǔ)

基于kubernetes容器化技術(shù)架構(gòu)能夠帶來(lái)諸多好處,諸如,彈性伸縮,自動(dòng)修復(fù)等,在比如藍(lán)綠部署,灰度發(fā)布等。近幾年容器化技術(shù)飛速發(fā)展,了解服務(wù)網(wǎng)格 的人可能會(huì)發(fā)現(xiàn),新興技術(shù) istio 等service mesh技術(shù)沒(méi)有容器化的技術(shù)環(huán)境根本就沒(méi)法實(shí)踐。

淺談docker

docker可以類比為jvm,jvm也是虛擬機(jī),然后docker的image可以類比為jar包,jar運(yùn)行在jvm里面,image當(dāng)然運(yùn)行在docker容器里,然后jar包是通過(guò)maven 的pom.xml定義構(gòu)建的產(chǎn)物,那docker也有一個(gè)Dockerfile來(lái)定義打包的鏡像。在沒(méi)有容器化之前,我們開(kāi)發(fā)提供的最終產(chǎn)物是jar,容器化之后我們需要提供docker的鏡像,docker的鏡像會(huì)包含我們的jar,然后提供一個(gè)穩(wěn)定的可移植的運(yùn)行環(huán)境。下面是最簡(jiǎn)單的一個(gè)docker鏡像構(gòu)建:

通過(guò) docker build -t kl/sales . 就可以構(gòu)建一個(gè)可運(yùn)行的鏡像

淺談k8s的部署腳本

其實(shí)k8s的腳本沒(méi)什么可說(shuō)的,本身k8s的概念非常之多,具體可參考官方的文檔,下面貼出我們的部署文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sales-app
  namespace: #namespace
spec:
  replicas: 2
  minReadySeconds: 130  # 從容器啟動(dòng)到應(yīng)用正常提供服務(wù)
  strategy:  # k8s更新策略
      type: RollingUpdate #滾動(dòng)更新
      rollingUpdate:
        maxSurge: 2  # 更新時(shí)允許最大激增的容器數(shù),默認(rèn) replicas 的 1/4 向上取整
        maxUnavailable: 1  # 更新時(shí)允許最大 unavailable 容器數(shù),默認(rèn) replicas 的 1/4 向下取整
  template:
    metadata:
      labels:
        app: sales-app
    spec:
      imagePullSecrets: #鏡像拉取秘鑰
      - name: xx-xx-xx
      containers:
      - name: sales
        image: xxx-vpc.cn-xx.aliyuncs.com/keking/sales:#Tag
        imagePullPolicy: Always
        env:
        - name: runShell
          value: #runShell
        ports:
        - containerPort: 6002
          name: web
          protocol: TCP
        resources:
          limits:
            cpu: 600m
            memory: 4Gi
          requests:
            cpu: 300m
            memory: 100Mi
        livenessProbe: #檢查是否存活
          httpGet:
            path: /health
            port: 6002
          initialDelaySeconds: 240 #首次檢查在多少時(shí)間后
          periodSeconds: 180 #檢查周期
          timeoutSeconds: 3 #超時(shí)時(shí)間
          failureThreshold: 3 #失敗的閾值,連續(xù)三次
        readinessProbe: #檢查是否成功啟動(dòng)
          httpGet:
            path: /health
            port: 6002
          initialDelaySeconds: 140 #首次檢查在多少時(shí)間后
          periodSeconds: 300 #檢查周期
          timeoutSeconds: 3 #超時(shí)時(shí)間

---
apiVersion: v1
kind: Service
metadata:
  name: sales-app
  namespace: #namespace
  labels:
    app: sales-app
spec:
  selector:
    app: sales-app
  ports:
  - name: web
    port: 80
    targetPort: 6002
    nodePort: 31942
  type: NodePort

最后聊聊jenkins pipeline

和一般的jenkins pipeline定義一樣,容器化后就多了兩個(gè)步驟,一個(gè)是在jar生成后,根據(jù)前面的講的Dockerfile文件構(gòu)建docker的鏡像,這個(gè)要求jenkins所在主機(jī)必須有docker的環(huán)境。第二個(gè)步驟是發(fā)送k8s的部署腳本到k8s容器,這個(gè)是通過(guò)jenkins kuberneetes插件來(lái)完成的,詳見(jiàn)下面的jenkins腳本

podTemplate(label: 'jnlp-slave', cloud: 'kubernetes', containers: [
        containerTemplate(
                name: 'jnlp',
                image: 'xx-vpc.cn-xx.aliyuncs.com/keking/jenkins-slave:latest',
                alwaysPullImage: true
        ),
],
        volumes: [
                hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
                hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
                hostPathVolume(mountPath: '/usr/local/jdk', hostPath: '/usr/local/jdk'),
                hostPathVolume(mountPath: '/usr/local/maven', hostPath: '/usr/local/maven'),
        ],
        imagePullSecrets: ['registry-pull-secret'],
)
        {
            node("jnlp-slave") {
                stage('Git Checkout') {
                    checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xx', url: 'http://xx.xx.xx/xx/yudian-salesplatform-boot.git']]])
                }
                stage('Maven Build') {
                    script {
                        if ('true' == "${build}") {
                            sh "mvn clean install -U  -P${profile} -Dmaven.test.skip=true"
                        } else {
                            echo "跳過(guò)maven build"
                        }
                    }
                }
                stage('Docker Build ') {
                    script {
                        if ('true' == "${build}") {
                            sh '''
                                docker login -u it_sh@keking-group -p x#xxx-vpc.cn-xx.aliyuncs.com
                                docker build -t xx-vpc.cn-xx.aliyuncs.com/keking/sales:${Tag} .
                                docker push xx-vpc.cn-xx.aliyuncs.com/keking/sales:${Tag}
                               '''
                        } else {
                            echo "跳過(guò)docker build"
                        }
                    }

                }
                stage('Deploy to K8s') {
                    script {
                        if('true' == "${deploy}"){
                            if ('prod' == "${profile}") {
                                sh '''
                                       sed -i "s/#namespace/prod/g" deploy.yaml
                                       sed -i "s%#runShell%java -Xmx2G -Xms2G -Xmn960M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.log -Xloggc:/tmp/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:MaxMetaspaceSize=128m -XX:MetaspaceSize=128m  -jar -Ddev_meta=http://conf.x.ops:8801/ -Denv=DEV -Didc=prod app.jar%g" deploy.yaml
                                   '''
                            }
                            if ('uat' == "${profile}") {
                                sh '''
                                       sed -i "s/#namespace/uat/g" deploy.yaml
                                       sed -i "s%#runShell%java -Xmx1536M -Xms1536M -Xmn960M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.log -Xloggc:/tmp/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:MaxMetaspaceSize=128m -XX:MetaspaceSize=128m  -jar -Ddev_meta=http://conf.keking.ops:8801/ -Denv=DEV -Didc=sales_docker app.jar%g" deploy.yaml                      
                                   '''
                            }
                            sh '''
                               sed -i "s/#Tag/${Tag}/g" deploy.yaml
                            '''
                            kubernetesDeploy configs: 'deploy.yaml', kubeConfig: [path: ''], kubeconfigId: '9c1da035-60b9-4bd8-aeae-1a31666280ce', secretName: '', ssh: [sshCredentialsId: '*', sshServer: ''], textCredentials: [certificateAuthorityData: '', clientCertificateData: '', clientKeyData: '', serverUrl: 'https://']
                        }else {
                            echo "跳過(guò)Deploy k8s"
                        }
                    }
                }
            }
        }

綜上,就完成了從jenkins到k8s的ci和cd過(guò)程,當(dāng)然過(guò)程中還有很多細(xì)枝末節(jié)未詳盡描述,比如k8s的搭建(博主使用的阿里云的容器服務(wù))等,歡迎看到此篇有容器化此需求的同行一起探討

以上就是jenkins docker k8s的容器化之路腳本淺析的詳細(xì)內(nèi)容,更多關(guān)于jenkins docker k8s的容器化腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用Docker部署Xxl-Job分布式任務(wù)調(diào)度中心

    如何使用Docker部署Xxl-Job分布式任務(wù)調(diào)度中心

    XXL-Job是一個(gè)開(kāi)源的分布式任務(wù)調(diào)度中心,它提供了一個(gè)可視化的任務(wù)管理界面,可以方便地創(chuàng)建、編輯和監(jiān)控任務(wù),本文詳細(xì)的講解了如何使用Docker部署xxl-job分布式任務(wù)調(diào)度服務(wù),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Docker中部署Redis并掛載配置文件

    Docker中部署Redis并掛載配置文件

    本文主要介紹了Docker中部署Redis并掛載配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Docker運(yùn)行Tensorboard和jupyter的方法

    淺談Docker運(yùn)行Tensorboard和jupyter的方法

    本篇文章主要介紹了淺談Docker 運(yùn)行Tensorboard 和 jupyter的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Docker連接宿主Redis的方法步驟

    Docker連接宿主Redis的方法步驟

    本文主要介紹了Docker連接宿主Redis的方法步驟,可以輕松地使用Docker容器與宿主機(jī)上的Redis進(jìn)行交互,實(shí)現(xiàn)高效的數(shù)據(jù)存儲(chǔ)和共享,,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Docker 部署Django項(xiàng)目的方法示例

    Docker 部署Django項(xiàng)目的方法示例

    這篇文章主要介紹了Docker 部署Django項(xiàng)目的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • docker如何配置mysql主從復(fù)制

    docker如何配置mysql主從復(fù)制

    文章介紹了如何在CentOS 7上搭建一個(gè)MySQL集群,包括創(chuàng)建Docker環(huán)境、配置文件設(shè)置、創(chuàng)建和啟動(dòng)MySQL容器、設(shè)置遠(yuǎn)程訪問(wèn)以及配置主從同步
    2024-12-12
  • Docker 網(wǎng)絡(luò)之端口綁定的方法

    Docker 網(wǎng)絡(luò)之端口綁定的方法

    本篇文章主要介紹了Docker 網(wǎng)絡(luò)之端口綁定的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • linux上安裝Docker(非常簡(jiǎn)單的安裝方法)

    linux上安裝Docker(非常簡(jiǎn)單的安裝方法)

    今天小編就為大家分享一篇關(guān)于linux上安裝Docker(非常簡(jiǎn)單的安裝方法),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Docker 教程之私有倉(cāng)庫(kù)詳解

    Docker 教程之私有倉(cāng)庫(kù)詳解

    這篇文章主要介紹了Docker 教程之私有倉(cāng)庫(kù)詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Docker?安裝Redis?無(wú)法使用配置文件設(shè)置密碼問(wèn)題及解決方法

    Docker?安裝Redis?無(wú)法使用配置文件設(shè)置密碼問(wèn)題及解決方法

    最近開(kāi)發(fā)需要使用各種組件,如果都到開(kāi)發(fā)機(jī)上安裝,會(huì)占用電腦資源較多,所以使用docker容器來(lái)安裝這些組件,這篇文章主要介紹了Docker安裝Redis無(wú)法使用配置文件設(shè)置密碼問(wèn)題,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

会理县| 广丰县| 子长县| 紫金县| 静宁县| 临洮县| 大足县| 武城县| 呈贡县| 九龙坡区| 沂水县| 金寨县| 巴中市| 游戏| 萨嘎县| 玉田县| 榆社县| 郸城县| 石河子市| 武强县| 沾化县| 甘德县| 东光县| 南涧| 文化| 邢台县| 会宁县| 包头市| 弥渡县| 巫山县| 海南省| 西平县| 盘山县| 上思县| 日照市| 托克托县| 登封市| 乐都县| 荥经县| 石林| 原阳县|