日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s自动部署教程

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s自动部署教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 缺陷記錄
  • 參考文章
  • 實戰命令
  • k8s自動部署教程
  • 代碼分析
  • 打包成docker鏡像
  • k8s+jenkins+git

缺陷記錄

  • 部署成功的外界無法訪問到
  • 參考文章

    JENKINS沒有執行SHELL權限問題

    實戰命令

    kubectl get pods -o wide 節點名
    netstat -tlunp
    kubectl get pods,svc
    curl -I localhost:19999

    k8s自動部署教程

  • 啟動jenkins
    systemctl start | stop | restart | status jenkins
  • pipeline {agent anyoptions {// 默認15分鐘 timeout (15)timeout(time: 3, unit: 'MINUTES')}environment {build_dir="/root/build-workspace"host="k8s-web.muoo.com"}stages {stage('build') {steps{ // git 'https://gitee.com/goodshred/k8s-hello-world.git' // sh "mvn -Dmaven.test.failure.ignore=true clean package"echo "curUser=${USER}"script {sh "chmod +x /root/script/build.sh"sh "chmod +x /root/script/deploy.sh"}sh "/root/script/start.sh"sh "/root/script/deploy.sh"}}}post {success {script {echo "post==success"}}failure {script {echo "post==failure"}}//構建不穩定時//隨著項目的開發和持續擴展,使用Jenkins構建(build)項目越來越多,Jenkins服務器的磁盤可能被大日志文件占滿造成無法繼續構建項目的異常(一般會出現構建按鈕為黃色)unstable {script {echo "post==unstable "}}} }

    代碼分析

    先運行jenkins腳本代碼(1. 拉代碼,2. mvn將代碼打成jar包,3. 執行腳本build.sh–將jar包打成鏡像,4. 執行deploy.sh將鏡像丟到k8s中運行)


    拉代碼,代碼變jar包,jar變鏡像,k8s命令啟動鏡像。

    打包成docker鏡像

    vi Dockerfile
    沒有jdk:8-jdk-alpine鏡像的話首次運行會自動進行下載拷貝到要制作的鏡像里面

    FROM openjdk:8-jdk-alpine COPY ${jenkins_dir}target/hello-world-0.0.1-SNAPSHOT.jar /hello-world-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java", "-jar","/hello-world-0.0.1-SNAPSHOT.jar"]

    k8s+jenkins+git

    jenkins的pipeline如下:

    pipeline {//說明流水線哪一個節點運行agent anyoptions {// 默認15分鐘 timeout (15)timeout(time: 13, unit: 'MINUTES')}environment {build_dir="/opt/k8s-cicd/build-workspace"project_name="hello-world"host="k8s-web.muoo.com"}stages {stage('build') {steps{git 'https://gitee.com/goodshred/k8s-hello-world.git'sh "mvn -Dmaven.test.failure.ignore=true clean package"sh 'echo "curUser=${USER}"'//script {//本質還是不應該寫在這里,碰到無權限問題應該手動去操作linux機器,比如配置兩臺機器的免密登陸,使用root權限給某個文件賦予允許jenkins執行的權限//chmod: changing permissions of ‘/opt/k8s-cicd/script/build.sh’: Operation not permitted//我是用的root創建的腳本文件,因此jenkins用戶無法更改其權限//sh "chmod +x /opt/k8s-cicd/script/build.sh"//sh "chmod +x /opt/k8s-cicd/script/deploy.sh"// }sh "${build_dir}/script/build.sh"sh "${build_dir}/script/deploy.sh"}}}post {success {script {echo "post==success"}}failure {script {echo "post==failure"}}//構建不穩定時//隨著項目的開發和持續擴展,使用Jenkins構建(build)項目越來越多,Jenkins服務器的磁盤可能被大日志文件占滿造成無法繼續構建項目的異常(一般會出現構建按鈕為黃色)unstable {script {echo "post==unstable "}}} }

    創建目錄結構如下:

    Dockerfile文件

    FROM openjdk:8-jdk-alpine COPY hello-world-0.0.1-SNAPSHOT.jar /hello-world-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java", "-jar","/hello-world-0.0.1-SNAPSHOT.jar"]

    build.sh文件:

    #!/bin/bashif [ "${build_dir}" == "" ];thenecho "env 'build_dir' is not set"exit 1 fi# 構建時候的工作名,比如Jenkins自動構建個項目,取名叫k8s-cicd,那么${JOB_NAME}=k8s-cicd,它是Jenkins自帶的全局變量 # /opt/k8s-cicd/build-workspace/k8s-web-demodocker_dir=${build_dir}/${JOB_NAME}if [ ! -d ${docker_dir} ];thenmkdir -p ${docker_dir} fiecho "docker workspace: ${docker_dir}"# ${WORKSPACE}/${MODULE}=/var/lib/jenkins/workspace/k8s-web-demo/ jenkins_dir=${WORKSPACE}/${MODULE} export jenkins_dir=${jenkins_dir}echo "jenkins_dir is ${jenkins_dir}"if [ ! -f ${jenkins_dir}target/*jar ];thenecho "target file not found ${jenkins_dir}target/*jar"exit 1 fi\cp ${jenkins_dir}target/*jar ${docker_dir} cd ${docker_dir}# VERSION=$(date + %y%m%d%H%M%S%) VERSION=$(date "+%y-%m-%d_%H-%M-%S") IMAGE_NAME=goodshred/${project_name}:${VERSION} echo ${IMAGE_NAME}echo "${IMAGE_NAME}" > ${WORKSPACE}/IMAGE echo "workspave is : ${WORKSPACE}======================" cat ${WORKSPACE}/IMAGE echo "build image ${IMAGE_NAME}"docker build -t ${IMAGE_NAME} . docker push ${IMAGE_NAME}

    deploy.sh文件如下:

    #!/bin/bashname=${JOB_NAME} image=$(cat ${WORKSPACE}/IMAGE)\cp ${build_dir}/template/web.yaml ${build_dir}/script/web.yamlsed -i "s,{{name}},${name},g" ${build_dir}/script/web.yamlsed -i "s,{{image}},${image},g" ${build_dir}/script/web.yamlkubectl apply -f ${build_dir}/script/web.yamlcat ${build_dir}/script/web.yaml

    web.yaml如下:

    apiVersion: v1 kind: Service metadata:name: {{name}}namespace: defaultlabels:app: {{name}} spec:type: NodePortports:- port: 30009targetPort: 19999# type: NodePort # 在主機上暴露端口nodePort: 19999 #service對外開放端口selector:app: {{name}}--- apiVersion: extensions/v1beta1 #apps/v1,extensions/v1beta1需要根據自己k8s的版本選擇 kind: Deployment #對象類型 metadata:name: {{name}} #名稱labels:app: {{name}} #標注 spec:replicas: 1 #運行容器的副本數,修改這里可以快速修改分布式節點數量selector:matchLabels:app: {{name}}template:metadata:labels:app: {{name}}spec:containers: #docker容器的配置# {{name}}- name: {{name}}#image: goodshred/hello-world:latest## 192.168.1.253:8081/pasq/dockertest:0.0.1 # pull鏡像的地址 ip:prot/dir/images:tag # {{image}}image: {{image}}imagePullPolicy: IfNotPresent #pull鏡像時機,ports:- containerPort: 19999 #容器對外開放端口

    總結

    以上是生活随笔為你收集整理的k8s自动部署教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。