当前位置: 首页 > article >正文

K8S部署DevOps自动化运维平台

持续集成(CI)

        持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我 们可以确定新代码和原有代码能否正确地集成在一起。持续集成过程中很重视自动化测试验证结果,对 可能出现的一些问题进行预警,以保障最终合并的代码没有问题。 常见的持续集成工具:

 Jenkins:Jenkins 是用 Java 语言编写的,是目前使用最多和最受欢迎的持续集成工具,使用 Jenkins,可以自动监测到 git 或者 svn 存储库代码的更新,基于最新的代码进行构建,把构建好的 源码或者镜像发布到生产环境。Jenkins 还有个非常好的功能:它可以在多台机器上进行分布式地 构建和负载测试。

持续交付

        持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」 (production-like environments)中。交付给质量团队或者用户,以供评审。如果评审通过,代码就 进入生产阶段。 如果所有的代码完成之后一起交付,会导致很多问题爆发出来,解决起来很麻烦,所以持续集成,也 就是没更新一次代码,都向下交付一次,这样可以及时发现问题,及时解决,防止问题大量堆积。

 持续部署

        持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶 段。 Puppet,SaltStack 和 Ansible 是这个阶段使用的流行工具。容器化工具在部署阶段也发挥着重要作 用。 Docker 和 k8s 是流行的工具,有助于在开发,测试和生产环境中实现一致性。 除此之外,k8s 还 可以实现自动扩容缩容等功能。 

k8s 集群环境 

 

集群角色IP主机名
控制节点192.168.58.231master
工作节点192.168.58.232node1
工作节点192.168.58.233node2

安装 Jenkins

安装 nfs 服务

yum install nfs-utils -y
 systemctl enable nfs --now
[root@k8s-master ~]# mkdir -pv /data/v1
[root@k8s-master ~]#  vim /etc/exports
[root@k8s-master ~]#  exportfs -arv
exporting *:/data/v1
[root@k8s-master ~]#  systemctl restart nfs
[root@k8s-master ~]#  chmod -R 777 /data/v1/

 在 kubernetes 中部署 jenkins

创建PV

[root@k8s-master jenkins]# mv pv pv.yaml
[root@k8s-master jenkins]# kubectl apply -f pv.yaml 
error: error parsing pv.yaml: error converting YAML to JSON: yaml: line 2: mapping values are not allowed in this context
[root@k8s-master jenkins]# cat pv.yaml 
apiVersion: v1
 kind: PersistentVolume
 metadata:
 name: jenkins-k8s-pv
 spec:
 capacity:
 storage: 10Gi
 accessModes:- ReadWriteMany
 nfs:
 server: 192.168.58.231
 path: /data/v1
[root@k8s-master jenkins]# vim pv.yaml 
[root@k8s-master jenkins]# kubectl apply -f pv.yaml 
persistentvolume/jenkins-k8s-pv created
[root@k8s-master jenkins]#  kubectl get pv
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
jenkins-k8s-pv   10Gi       RWX            Retain           Available                                   8s

 创建PVC

[root@k8s-master jenkins]# vim pvc.yaml
[root@k8s-master jenkins]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/jenkins-k8s-pvc created
[root@k8s-master jenkins]# kubectl get pvc
No resources found in default namespace.
[root@k8s-master jenkins]# kubectl get pvc -n jenkins-k8s
NAME              STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jenkins-k8s-pvc   Bound    jenkins-k8s-pv   10Gi       RWX                           19s
[root@k8s-master jenkins]#  kubectl create sa jenkins-k8s-sa -n jenkins-k8s
serviceaccount/jenkins-k8s-sa created
[r
[root@k8s-master jenkins]# kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa 
clusterrolebinding.rbac.authorization.k8s.io/jenkins-k8s-sa-cluster created

 通过 deployment 部署 jenkins

使用docker镜像拉取Jenkins

[root@k8s-node2 ~]# docker pull jenkins/jenkins:2.462.2-lts
2.462.2-lts: Pulling from jenkins/jenkins
903681d87777: Already exists 
f76fc73f1c48: Already exists 
fc1d2482b243: Already exists 
5bae62448211: Already exists 
9020ffff6008: Already exists 
8a9191d56587: Already exists 
da374eff6f05: Already exists 
31aceeb653c9: Pull complete 
061dcd72fbac: Pull complete 
79716cc251e4: Pull complete 
628c862ab449: Pull complete 
d7dec4cb14f6: Pull complete 
Digest: sha256:95313257a8cddbef83c74e3d577ea139aeae30c3c014ddcaa83a72b60409bbe1
Status: Downloaded newer image for jenkins/jenkins:2.462.2-lts
docker.io/jenkins/jenkins:2.462.2-lts
[root@k8s-node2 ~]# docker images
REPOSITORY                                                                    TAG           IMAGE ID       CREATED        SIZE
jenkins/jenkins                                                               2.462.2-lts   7a7add0bf3da   4 months ago   470MB

 编辑jenkins-deployment.yaml文件

[root@k8s-master jenkins]# kubectl apply -f jenkins-deployment.yaml 
deployment.apps/jenkins created
[root@k8s-master jenkins]#  kubectl get pods -n jenkins-k8s -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
jenkins-5d574cf778-jrbvr   0/1     Running   0          10s   10.244.169.129   k8s-node2   <none>           <none>
[root@k8s-master jenkins]#  kubectl get pods -n jenkins-k8s -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
jenkins-5d574cf778-jrbvr   0/1     Running   0          20s   10.244.169.129   k8s-node2   <none>           <none>

把 jenkins 前端加上 service 提供外部网络访问

[root@k8s-master jenkins]# vim jenkins-service.yaml
[root@k8s-master jenkins]# kubectl apply -f jenkins-service.yaml 
service/jenkins-service created
[root@k8s-master jenkins]#  kubectl get svc -n jenkins-k8s 
NAME              TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE
jenkins-service   NodePort   10.96.125.185   <none>        8080:30002/TCP,50000:31909/TCP   9s

 通过本机ip加映射端口访问:


http://www.kler.cn/a/521339.html

相关文章:

  • Arouter详解・常见面试题
  • deepseek各个版本及论文
  • WPS数据分析000007
  • ArcGIS安装动物家域分析插件HRT的方法
  • 为AI聊天工具添加一个知识系统 之72 详细设计之13 图灵机
  • Level DB --- TableBuilder
  • C 或 C++ 中用于表示常量的后缀:1ULL
  • C++从入门到实战(二)C++命名空间
  • 【信息系统项目管理师-选择真题】2016上半年综合知识答案和详解
  • 第三十一周学习周报
  • 计算机图形学试题整理(期末复习/闭or开卷/>100道试题/知识点)
  • 塔罗牌(基础):大阿卡那牌
  • 2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新
  • 用C++编写一个2048的小游戏
  • 【2024年华为OD机试】(A卷,100分)- 识图谱新词挖掘 (JavaScriptJava PythonC/C++)
  • python的设计模式
  • 【miniconda】:langraph的windows构建
  • windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)
  • 10 外观(Facade)模式
  • 基于先验领域知识的归纳式多实例多标签学习用于牙周病分类| 文献速递 -医学影像人工智能进展