暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实战-Kubernetes 部署 Jenkins

DevOps架构实战 2023-11-28
432

1、Jenkins部署分析

既然是基于Kubernetes 来实现 CI/CD,那么最好将 Jenkins以 Pod 的形式运行在Kubernetes集群中。其次Jenkins没有数据库,所有的数据都存储在本地,所以只需要将Jenkins的数据目录持久化下来就可以了。

在 Kubenetes 环境下所起的应用都是一个个 Docker 镜像,为了保证应用重启的情况下数据安全,所以需要将 Jenkins 持久化到存储中。这里用的是 NFS 网路存储,方便在 Kubernetes 环境下应用启动节点转义数据一致。当然也可以选择存储到本地,但是为了保证应用数据一致,需要设置 Jenkins 固定到某一 Kubernetes 节点。详情请看之前的搭建 nfs 服务器,这里不过多叙述。

2、下载Jenkins镜像

1.下载镜像

2.打标签

3.创建RBAC后期Jenkins需要创建 Slave Pod来完成流水线的执行,为此我们需要一些权限;

[root@node ~]# docker pull

jenkins/jenkins:2.346.3-2-lts

root@node ~]# docker tag

jenkins/jenkins:2.346.3-2-lts


[root@master jenkins]# cat jenkins-rbac.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

name: jenkins

namespace: ops

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: jenkins

rules:

 - apiGroups: ["extensions", "apps"]

  resources: ["deployments", "ingresses"]

  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", "watch"]

 - apiGroups: [""]

  resources: ["pods/exec"]

  verbs: ["create", "delete", "get", "list",

"patch", "update", "watch"]

 - apiGroups: [""]

  resources: ["pods/log", "events"]

  verbs: ["get", "list", "watch"]

 - apiGroups: [""]

  resources: ["secrets"]

  verbs: ["get"]

apiVersion: rbac.authorization.k8s.io/v1

#创建Service

kind: ClusterRoleBinding

metadata:

name: jenkins

namespace: ops

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: jenkins

subjects:

 - kind: ServiceAccount

  name: jenkins

  namespace: ops


[root@master jenkins]# cat jenkins-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: jenkins-svc

namespace: ops

spec:

clusterIP: None

selector:

  app: jenkins

ports:

  - name: http

    port: 8080

    targetPort: 8080

  - name: agent

    port: 50000


[root@master jenkins]# cat jenkins-sts.yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: jenkins

namespace: ops

spec:

serviceName: "jenkins-svc"

selector:

  matchLabels:

    app: jenkins

template:

  metadata:

    labels:

      app: jenkins

containers:

      - name: jenkins

        image:192.167.16.6/ops/jenkins:2.346

        imagePullPolicy: IfNotPresent  

        env:

        - name: JAVA_OPTS    

          value: -

Duser.timezone=Asia/Shanghai

        ports:

          - name: http

            containerPort: 8080

          - name: agent

            containerPort: 50000

        resources:

          limits:

            cpu: 1500m

            memory: 2048Mi

        volumeMounts:

          - name: data

            mountPath: /var/jenkins_home

volumeClaimTemplates:

- metadata:

    name: data

  spec:

    accessModes: ["ReadWriteOnce"]

    storageClassName: "nfs-provisionerstorage"

    resources:

      requests:

        storage: 100Gi

----------------------end---------------------

推荐阅读

1K8s最佳实践Kubernetes-Rancher2.x持续交付与自动化运维

2、第1节 Kubernetes名称空间介绍和资源操作实战

3、第2节 Kubernetes资源文件yaml参数介绍

4、第3节Kubernetes的Pod资源讲解实战

5、第4节 Kubernetes标签Label和标签选择器实战

6、第5节 K8S的Deployment控制器滚动升级

7、第7节 K8S里面的多种port端口你知道怎么区分


如果本文对你有帮助的话,欢迎点赞&在看&转发,这对我继续分享&创作优质文章非常重要。感谢🙏🏻

请点赞→点亮“在看”→分享

↓↓↓

文章转载自DevOps架构实战,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论