Kubernetes CICD发布架构流程思路

此篇只适合cicd的架构流程思维,不建议作为任何部署环境。

前提环境:

涉及参考文档:

阿里文档部分:

插件文档介绍:

涉及镜像:

  • jenkins-slave-jnlp :jnlp代理
  • maven: 编译打包
  • kaniko: 镜像编译打包上传
  • kubectl: 发布到k8s集群中

demo Git源码

 https://github.com/AliyunContainerService/jenkins-demo.git

接下来步骤测试过程,踩坑必然希望不要放弃坚持下去

一、添加maven镜像

系统管理——> 节点管理——> Pod Templates——>添加Pod模板——>maven

registry.cn-beijing.aliyuncs.com/acs-sample/jenkins-slave-maven:3.3.9-jdk-8-alpine

在这里插入图片描述
在这里插入图片描述

二、maven编译测试

1、下载源码

git clone  https://github.com/AliyunContainerService/jenkins-demo.git

在这里插入图片描述

2、Gitlab新建项目

在这里插入图片描述
将文件上传到此项目下,具体不做操作,只需要将git clone此项目到本地目录,再将之前git下来的文件复制到Gitlab拉取下来的目录再上传即可。

3、书写pipeline 语法测试

pipeline {
    agent{
        node{
          label 'jnlp-slave'
        }
      }

    stages {
		stage('Git拉取代码') {
            steps {                
                git 'http://192.168.11.178/root/aliyun.git'
            }
        }
        stage('编译') {
            steps {
                container('maven') { 
                    sh """
                   		 mvn package -B -DskipTests
                    """
                }
            }
        }
	}
}

构建成功
在这里插入图片描述
在这里插入图片描述

三、kaniko编译打包

1、查看git下来dockerfile文件内容

在这里插入图片描述

2、添加kaniko镜像

在这里插入图片描述

3、书写pipeline 语法测试

pipeline {
    agent{
        node{
          label 'jnlp-slave'
        }
      }

    stages {
		stage('Git拉取代码') {
            steps {                
                git 'http://192.168.11.178/root/aliyun.git'
            }
        }
        stage('编译') {
            steps {
                container('maven') { 
                    sh """
                   		 mvn package -B -DskipTests
                    """
                }
            }
        }
		stage('镜像打包上传镜像仓库'){
          steps{
              container("kaniko") {
                  sh "kaniko -f `pwd`/Dockerfile -c `pwd`  --skip-tls-verify=true --destination=192.168.11.128:4430/library/test:latest"
              }
          }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
现在只需要考虑如何将认证文件挂着到容器中,具体可查看github kaniko 简介,接下来操作。
在这里插入图片描述

4、k8s master节点登录harbor

docker login -u用户名  -p密码 Harbor地址

在这里插入图片描述
config.json文件已生成。

5、生成secret 密钥

kubectl create secret generic jenkins-docker-cfg -n jenkins --from-file=~/.docker/config.json

在这里插入图片描述

6、再次添加kaniko secret密钥认证

在这里插入图片描述
在这里插入图片描述

7、再次构建Job

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

再次查看是否有镜像
在这里插入图片描述

踩坑点二个如下图:
在这里插入图片描述
在这里插入图片描述

四、修改deployment.yaml内容

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-java-demo
  namespace: jenkins
spec:
  replicas: 2
  selector:
    matchLabels:
      app: jenkins-java-demo
  template:
    metadata:
      labels:
        app: jenkins-java-demo
    spec:
      containers:
      - name: jenkins-java-demo
        image: 192.168.11.128:4430/library/test:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-java-demo
  namespace: jenkins
spec:
  ports:
  - name: jenkins-java-demo
    port: 8080
    targetPort: 8080
    nodePort: 30082
  selector:
    app: jenkins-java-demo
  type: NodePort

直接在gitlab上修改文件,也可以在项目修改修改完毕记得上传上去。

五、发布到K8s集群中

1、创建访问集群的serviceaccounts

kubectl  create   sa  admin  -n  kube-system

2、admin赋予集群cluster-admin角色(最大权限不建议此操作,后期再优化)

kubectl  create  clusterrolebinding  dengm --clusterrole=cluster-admin  --serviceaccount=kube-system:admin

在这里插入图片描述

3、kubernetes 管道语法参考必看必看

kubernetes 管道语法参考在这里插入图片描述

在这里插入图片描述

4、获取为ServiceAccount admin自动生成的令牌的名称

kubectl -n kube-system get serviceaccount admin -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'

5、检索令牌并使用base64对其进行解码。

kubectl -n kube-system get secrets admin-token-nswf5 -o go-template --template '{{index .data "token"}}' | base64 -d 

在这里插入图片描述

6、将令牌粘贴到Secret text凭证中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、书写pipeline 发布到k8s集群中

pipeline {
    agent{
        node{
          label 'jnlp-slave'
        }
      }

    stages {
		stage('Git拉取代码') {
            steps {                
                git 'http://192.168.11.178/root/aliyun.git'
            }
        }
        stage('编译') {
            steps {
                container('maven') { 
                    sh """
                   		 mvn package -B -DskipTests
                    """
                }
            }
        }
		stage('镜像打包上传镜像仓库'){
          steps{
              container("kaniko") {
                  sh "kaniko -f `pwd`/Dockerfile -c `pwd`  --skip-tls-verify=true --destination=192.168.11.128:4430/library/test:latest"
              }
          }
        }
		stage('发布到k8s集群'){
          steps{
              container("kubectl") {
                  withKubeConfig(caCertificate: '', 
								clusterName: '', 
								contextName: '', 
								credentialsId: 'admin-sa',
								namespace: '',
								serverUrl: 'https://kubernetes.default.svc.cluster.local'
								)
							{ 
								sh '''
									kubectl apply -f `pwd`/deployment.yaml -n jenkins
									kubectl wait --for=condition=Ready pod -l app=jenkins-java-demo --timeout=60s -n jenkins
								'''
						}
					}
				}
			}
    }
}

黑屏查看Pod信息,可以看到有两个容器正在创建中
在这里插入图片描述
在这里插入图片描述

六、访问项目

kubectl get pod,svc,ep  -n jenkins  |grep jenkins-java-demo

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值