色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Kubernetes實現CI/CD配置的流程

jf_ro2CN3Fa ? 來源:CSDN ? 2023-02-08 16:51 ? 次閱讀

一、基本介紹

基于 Kubernetes 實現 CI/CD 配置,其實和往常那些 CI/CD 配置并沒有太大區別。都是通過 提交代碼,拉取代碼,構建代碼,發布代碼來實現的。 只不過要是通過 K8s 來實現的話,則是需要將構建好的代碼打包成鏡像,通過鏡像的方式來運行。

CI/CD 流程圖:

7aa88b56-a78c-11ed-bfe3-dac502259ad0.png

開發將代碼提交代碼倉庫后,我們便可以通過在 Jenkins 上配置腳本或是 Pipline 的方式來實現代碼發布,其中發布有兩種方式,一種是通過手動發布,另外一種可以通過 WebHook 插件來實現提交代碼便自動發布(生產環境不建議自動發布)

腳本內容一般分為:克隆代碼、編譯代碼、將編譯好的代碼打包成鏡像、運行鏡像幾個步驟。

二、基于 Kubernetes 實現 CI/CD 配置

下面我們是通過容器的方式安裝配置,物理安裝參考:

https://blog.csdn.net/weixin_46902396/article/details/118337250

1.配置 GitLab

1)安裝 Docker-Compose

[root@k8s-master01~]#wget"https://github.com/docker/compose/releases/download/v2.3.2/docker-compose-$(uname-s)-$(uname-m)"-O/usr/local/bin/docker-compose
[root@k8s-master01~]#chmod+x/usr/local/bin/docker-compose
[root@k8s-master01~]#docker-compose--version

2)安裝 GitLab

[root@k8s-master01~]#vimdocker-compose.yml
version:'3'
services:
web:
image:'gitlab/gitlab-ce:14.8.5-ce.0'
restart:always
hostname:192.168.1.1
environment:
GITLAB_OMNIBUS_CONFIG:|
external_url'http://192.168.1.1'
ports:
-'1080:80'
-'1443:443'
-'1022:22'
volumes:
-'/app/gitlab/config:/etc/gitlab'
-'/app/gitlab/logs:/var/log/gitlab'
-'/app/gitlab/data:/var/opt/gitlab'
[root@k8s-master01~]#docker-composeup-d

因為博主的電腦配置不是很高,所以就不使用上面的方式安裝 GitLab,而是直接使用 GitHub 上面的倉庫。

2.配置 Jenkins

1)安裝 NFS 存儲,并配置共享目錄

[root@k8s-master01~]#yum-yinstallnfs-utilsrpcbind
[root@k8s-master01~]#echo"/app/jenkins*(rw,sync,no_root_squash)">/etc/exports
[root@k8s-master01~]#mkdir/app/jenkins
[root@k8s-master01~]#systemctlstartrpcbindnfs

2)創建 PV 和 PVC

[root@k8s-master01~]#vimjenkins-pv.yaml
apiVersion:v1
kind:PersistentVolume
metadata:
name:jenkins-pv
spec:
capacity:
storage:10Gi
accessModes:
-ReadWriteMany
nfs:
server:192.168.1.1
path:/app/jenkins
---
apiVersion:v1
kind:PersistentVolumeClaim
metadata:
name:jenkins-pvc
spec:
resources:
requests:
storage:10Gi
accessModes:
-ReadWriteMany
[root@k8s-master01~]#kubectlcreate-fjenkins-pv.yaml

3)創建 RBAC 授權

[root@k8s-master01~]#vimjenkins-sa.yaml
apiVersion:v1
kind:ServiceAccount
metadata:
name:jenkins-sa
---
apiVersion:rbac.authorization.k8s.io/v1beta1
kind:ClusterRole
metadata:
name:jenkins-cr
rules:
-apiGroups:["extensions","apps"]
resources:["deployments"]
verbs:["create","delete","get","list","watch","patch","update"]
-apiGroups:[""]
resources:["services"]
verbs:["create","delete","get","list","watch","patch","update"]
-apiGroups:[""]
resources:["pods"]
verbs:["create","delete","get","list","patch","update"]
-apiGroups:[""]
resources:["pods/exec"]
verbs:["create","delete","get","list","patch","update"]
-apiGroups:[""]
resources:["pods/log"]
verbs:["get","list","update"]
-apiGroups:[""]
resources:["secrets"]
verbs:["get"]
---
apiVersion:rbac.authorization.k8s.io/v1beta1
kind:ClusterRoleBinding
metadata:
name:jenkins-crb
roleRef:
kind:ClusterRole
name:jenkins-cr
apiGroup:rbac.authorization.k8s.io
subjects:
-kind:ServiceAccount
name:jenkins-sa
namespace:default
[root@k8s-master01~]#kubectlcreate-fjenkins-sa.yaml

4)創建 StatefulSet

[root@k8s-master01~]#vimjenkins-statefulset.yaml
apiVersion:apps/v1
kind:StatefulSet
metadata:
name:jenkins
spec:
serviceName:jenkins
replicas:1
selector:
matchLabels:
app:jenkins
template:
metadata:
name:"jenkins"
labels:
app:jenkins
spec:
serviceAccountName:jenkins-sa
containers:
-name:jenkins
image:jenkins/jenkins:lts
imagePullPolicy:IfNotPresent
ports:
-containerPort:8080
-containerPort:50000
volumeMounts:
-name:jenkins
mountPath:/var/jenkins_home
volumes:
-name:jenkins
persistentVolumeClaim:
claimName:jenkins-pvc
[root@k8s-master01~]#chown-R1000/app/jenkins
[root@k8s-master01~]#kubectlcreate-fjenkins-statefulset.yaml

5)創建 Service

[root@k8s-master01~]#vimjenkins-svc.yaml
apiVersion:v1
kind:Service
metadata:
name:jenkins
spec:
type:NodePort
ports:
-name:http
port:8080
targetPort:8080
nodePort:30080
-name:agent
port:50000
targetPort:50000
nodePort:30090
selector:
app:jenkins
[root@k8s-master01~]#kubectlcreate-fjenkins-svc.yaml

6)配置 Jenkins

[root@k8s-master01~]#cat/app/jenkins/secrets/initialAdminPassword
a303d66e915e4ee5b26648a64fdff4be

7ac04412-a78c-11ed-bfe3-dac502259ad0.png

我們這里安裝推薦的插件即可,后面有需求可以再進行安裝

7ad44ebc-a78c-11ed-bfe3-dac502259ad0.png7af6acd2-a78c-11ed-bfe3-dac502259ad0.png

3.實現 CI/CD 配置

1)在 Jenkins 宿主機上創建 SSH 密鑰

[root@k8s-master01~]#ssh-keygen-trsa#三連回車
[root@k8s-master01~]#cat~/.ssh/id_rsa.pub#查看公鑰

2)將公鑰上傳到 GitLab 上

7b139dc4-a78c-11ed-bfe3-dac502259ad0.png

3)將倉庫克隆到本地

[root@k8s-master01~]#gitclonegit@github.com:ChenZhuang1217/test.git

4)編寫 Go 代碼

[root@k8s-master01~]#cdtest
[root@k8s-master01test]#vimmain.go
packagemain
import(
"fmt"
"net/http"
)
funcHelloHandler(whttp.ResponseWriter,r*http.Request){
fmt.Fprintf(w,"HelloWorld")
}
funcmain(){
http.HandleFunc("/",HelloHandler)
http.ListenAndServe(":8080",nil)
}

5)編寫 Dockerfile

[root@k8s-master01test]#vimDockerfile
FROMgolang:1.16asbuilder
ENVGO111MODULE=on
GOPROXY=https://goproxy.cn,direct
WORKDIR/app
COPY..
RUNCGO_ENABLED=0GOOS=linuxGOARCH=amd64gobuild-ldflags="-w-s"-omainmain.go

FROMbusybox:1.28.4
WORKDIR/app
COPY--from=builder/app/.
EXPOSE8080
CMD["./main"]
[root@k8s-master01test]#dockerbuild-ttest-web-server:devops-$(date+%Y-%m-%d-%H-%M-%S).

6)提交代碼

[root@k8s-master01test]#gitadd.#提交到暫存區
[root@k8s-master01test]#gitconfig--globaluser.email"Zhuang_zz1217@163.com"#配置用戶郵箱
[root@k8s-master01test]#gitcommit-m"ThisistestCI/CD"#提交到本地倉庫
[root@k8s-master01test]#gitpush#推送到遠程倉庫

7)創建 Deployment 和 Service

[root@k8s-master01~]#vimtest-web-server.yaml
apiVersion:apps/v1
kind:Deployment
metadata:
name:test-web-server
spec:
replicas:1
selector:
matchLabels:
app:test-web-server
template:
metadata:
labels:
app:test-web-server
spec:
containers:
-name:test-web-server
image:test-web-server:devops-2022-04-25-17-16-54
imagePullPolicy:IfNotPresent
ports:
-containerPort:8080
---
apiVersion:v1
kind:Service
metadata:
name:test-web-server
spec:
type:NodePort
ports:
-name:test-web-server
port:8080
targetPort:8080
nodePort:30188
selector:
app:test-web-server
[root@k8s-master01~]#kubectlcreate-ftest-web-server.yaml
7b280dfe-a78c-11ed-bfe3-dac502259ad0.png

8)編寫 Jenkins 發版腳本

[root@k8s-master01~]#vimtest.sh
#!/bin/bash

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現的后臺管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#固定時間格式
Second=$(date+%Y-%m-%d-%H-%M-%S)

#備份舊的鏡像
Image=$(kubectl-shttps://192.168.1.1:6443describepod|grepImage:|awk'{print$2}'|greptest)
echo$Image>/opt/test-image-$Second

#克隆代碼
cd/root
if[-dtest];
then
mvtest/opt/test-devops-$Second
gitclonegit@github.com:ChenZhuang1217/test.git
else
gitclonegit@github.com:ChenZhuang1217/test.git
fi

#發布新的鏡像
cd/root/test&&dockerbuild-ttest-web-server:devops-$Second.

#上傳到鏡像倉庫
if[$?-eq0];
then
dockertagtest-web-server:devops-$Secondharbor.tianya.com:5000/test-web-server:devops-$Second
dockerpushharbor.tianya.com:5000/test-web-server:devops-$Second
else
exit1#退出(防止運行下面命令)
fi

#替換鏡像
sed-i's/image:.*/image:harbor.tianya.com:5000/test-web-server:devops-'$Second'/g'/root/test-web-server.yaml

#重啟應用
kubectldelete-f/root/test-web-server.yaml
kubectlcreate-f/root/test-web-server.yaml
[root@k8s-master01~]#chmod+xtest.sh

上面這個腳本有兩步需要注意:

「上傳到鏡像倉庫:」 如果你們沒有自己的鏡像倉庫,可以選擇調整腳本或看博主前面寫的文章來安裝 Harbor 倉庫。

「替換鏡像:」 我們上面配置的腳本是針對單個模塊的,多個模塊可以根據 for 循環來實現。

4.驗證

1)在 Jenkins 上安裝 SSH 插件

安裝 SSH 插件的原因是因為,我們這個 Jenkins 是容器安裝的,而腳本是在宿主機寫的,所以通過遠程到宿主機來運行腳本。

7b3abec2-a78c-11ed-bfe3-dac502259ad0.png

2)配置遠程主機的用戶名和密碼

7b4b47d8-a78c-11ed-bfe3-dac502259ad0.png7b5e3528-a78c-11ed-bfe3-dac502259ad0.png

3)創建 Jenkins 私鑰憑證(類型選擇:SSH Username with private key)

7b72f9d6-a78c-11ed-bfe3-dac502259ad0.png

4)配置 Jenkins 流水線

7b824b16-a78c-11ed-bfe3-dac502259ad0.png7ba54cb0-a78c-11ed-bfe3-dac502259ad0.png7bb8a62a-a78c-11ed-bfe3-dac502259ad0.png7bdc12d6-a78c-11ed-bfe3-dac502259ad0.png

5)修改代碼

7bed5492-a78c-11ed-bfe3-dac502259ad0.png

6)在 Jenkins 上發布

7bfcf398-a78c-11ed-bfe3-dac502259ad0.png7c0c5f4a-a78c-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PVC
    PVC
    +關注

    關注

    0

    文章

    106

    瀏覽量

    15267
  • RBAC
    +關注

    關注

    0

    文章

    44

    瀏覽量

    9981
  • SSH
    SSH
    +關注

    關注

    0

    文章

    189

    瀏覽量

    16373
  • NFS
    NFS
    +關注

    關注

    1

    文章

    53

    瀏覽量

    26130

原文標題:手把手教你基于 Kubernetes 實現 CI/CD 配置

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Kubernetes的Device Plugin設計解讀

    移除。取而代之的是通過Extended Resource+Device Plugin兩個Kubernetes的內置模塊,外加由設備提供商實現的相應Device Plugin, 完成從設備的集群級別調度
    發表于 03-12 16:23

    再次升級!阿里云Kubernetes日志解決方案

    摘要: 今天阿里云Kubernetes日志解決方案再次升級,為您帶來以下改進: 1、極致部署體驗:只需一條命令一個參數即可完成整個K8S集群的日志解決方案部署。 2、支持更多配置方式:除原生控制臺
    發表于 05-28 19:08

    kubernetes集群配置

    基于v1104版本手動搭建高可用kubernetes 集群
    發表于 08-19 08:07

    搭建基于Arm的kubernetes+Istio開發環境

    的功能。流程環境要求準備配置環境編譯生成鏡像搭建Kubernetes 環境配置安裝Istio環境要求a. 至少兩臺Arm64主機(歡迎使用Raspberry Pi)b. Ubuntu
    發表于 07-12 15:39

    請問下哪些CI/CD工具是支持Arm 架構的

    我在為一個開源項目啟用 CI 管道,請問下哪些CI/CD工具是支持Arm 架構的?
    發表于 09-21 11:29

    CD-R的工藝流程

    CD-R的工藝流程CD-R的生產流程基本上和CD的生產流程是一樣的(如圖2),只是中間多了一套涂
    發表于 12-25 16:42 ?601次閱讀

    運營商該如何在內部和外部網絡中實施CI/CD實踐

    調查表明,有42%受訪企業希望在2019年底之前對NFV的內部業務實施CI/CD實踐,66%受訪CSP希望在2020年底之前實施CI/CD
    發表于 12-19 10:56 ?969次閱讀

    k8s實用devops工具

    KubeSpray是一個集群生命周期管理器,可以幫助部署可用于生產的Kubernetes集群。它使用ansible-playbook來自動化Kubernetes集群配置。主要功能包括基于Ansible,高度可用,跨平臺;流行的云
    的頭像 發表于 01-19 16:53 ?2086次閱讀

    五個開發者必知的CI/CD工具

    一旦你選擇了最好的CI/CD工具,你將繼續你的DevOps生命周期。如果操作得當,它將能夠提高產品質量并鼓勵你的團隊充滿自信地進行發布游戲。
    的頭像 發表于 02-14 16:43 ?3267次閱讀

    提高CI/CD系統可觀察性的四種技術

    可觀察性是DevOps團隊的重要組成部分,它可以幫助組織從系統的輸出信息,推斷系統內部狀態。它是一個持續的過程,從你的CI/CD流水線開始,并貫穿于應用程序的整個生命周期。 可觀察的CI/CD
    的頭像 發表于 08-17 09:31 ?7150次閱讀

    面對CI/CD分析的代碼靜態測試工具Klocwork 2023.1版本更新快訊

    Klocwork 2023.1為CI/CD分析pipeline引入靈活的管理選項 。使用差異分析加速靜態分析掃描, 在CI/CD管道構建中提供上下文結果,并可以用和服務器端相同的方式管
    的頭像 發表于 04-17 12:03 ?1521次閱讀
    面對<b class='flag-5'>CI</b>/<b class='flag-5'>CD</b>分析的代碼靜態測試工具Klocwork 2023.1版本更新快訊

    DevOps的最佳CI/CD工具

    CI/CD是一種 DevOps 方法,它結合了持續集成和持續交付的概念,允許企業通過在軟件開發生命周期中集成自動化來始終如一地向客戶交付應用程序。
    的頭像 發表于 07-11 11:06 ?728次閱讀

    什么是CI/CD?基本的gitlab CI/CD流程詳解

    什么是CI/CD?通俗來說就是啟動一個服務,能夠監聽代碼變化,然后自動執行打包,發布等流程
    的頭像 發表于 12-08 09:50 ?6882次閱讀
    什么是<b class='flag-5'>CI</b>/<b class='flag-5'>CD</b>?基本的gitlab <b class='flag-5'>CI</b>/<b class='flag-5'>CD</b><b class='flag-5'>流程</b>詳解

    Perforce靜態分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改進和安全增強

    實現持續合規性現代軟件開發實踐要求開發團隊具備適應性,在確保代碼質量和可靠性的同時,優先考慮靈活性和協作性。在軟件開發流程中實施持續集成(CI)和持續交付(CD)流
    的頭像 發表于 10-08 16:22 ?323次閱讀
    Perforce靜態分析工具2024.2新增功能:Helix QAC全新<b class='flag-5'>CI</b>/<b class='flag-5'>CD</b>集成支持、Klocwork分析引擎改進和安全增強

    CI/CD方案:推動智能汽車開發的高效利器

    (持續集成與持續交付/部署)方案為汽車行業帶來了巨大的變革契機。本文將聚焦CI/CD方案在智能汽車領域的核心價值,并探討如何通過標準化的CI/CD
    的頭像 發表于 12-18 10:03 ?509次閱讀
    <b class='flag-5'>CI</b>/<b class='flag-5'>CD</b>方案:推動智能汽車開發的高效利器
    主站蜘蛛池模板: 亚洲午夜久久久久中文字幕| 在线亚洲中文字幕36页| 一本道高清到手机在线| 国产老肥熟xxxx| 帅哥操帅哥| 百性阁论坛首页| 前后灌满白浆护士| 草莓视频app深夜福利| 秋霞电影网午夜免费鲁丝片| xxxx69动漫| 日本大片免a费观看视频| 变形金刚7免费观看完整| 青草国产超碰人人添人人碱| 草莓视频在线观看完整高清免费 | 草久久久久| 热久久伊大人香蕉网老师| YELLOW视频在线观看最新 | 欧美深深色噜噜狠狠yyy| 99久久精品国产一区二区三区| 蜜芽国产在线精品欧美| china18一19 第一次| 日本xxx护士与黑人| 国产精品一区二区AV交换 | 九九热精品在线| 重口味av| 破女在线观看视频| 国产成人在线播放| 亚洲精品资源网在线观看| 久久性生大片免费观看性| 99久久夜色精品国产亚洲AV卜| 人妻中文字幕乱人伦在线 | 免费毛片a在线观看67194| 岛国大片在线播放高清| 亚洲AV中文字幕无码久久| 久久久性色精品国产免费观看| 最新国产在线视频在线| 欧美性受xxxx狂喷水| 国产人妻精品久久久久久很牛| 一线高清视频在线播放| 女人一级毛片免费观看| 国产精品久久久久久人妻精品蜜桃 |