Jenkins & Kubernetes

Kubernetes集成Harbor

Harbor 私服配置

在Kubernetes的master和所有worker节点上加上harbor配置,修改daemon.json,支持Docker仓库,并重启Docker。

sudo vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://jrabvn1q.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.232.7:80"]
}

sudo systemctl daemon-reload
sudo systemctl restart docker

Harbor 账户配置

image.png

image.png

测试示例

编写pipeline-test.yml文件,将我们前面通过jenkins打包的镜像部署到kubernetes中。

apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息
  name: pipeline-test-deployment
  namespace: test
  labels:
    app: pipeline-test-pod      # 标签字段用于识别Pod
spec:
  replicas: 2                   # 定义副本数量
  selector:
    matchLabels:
      app: pipeline-test-pod
  template:
    metadata:
      labels:
        app: pipeline-test-pod
    spec:
      containers:
      # 定义nginx容器
      - name: pipeline-test
        image: 192.168.232.7:80/repository/pipeline-test:v1.0.0
        imagePullPolicy: Always # 定义拉取镜像的方式(每次都拉取)
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 200m            # 请求时申请CPU资源为0.2核
            memory: 256Mi        # 请求时申请内存资源为256M
          limits:
            cpu: 500m            # 限定CPU资源上限为0.5核
            memory: 512Mi        # 限定内存资源上限为512M
---
apiVersion: v1
kind: Service
metadata:
  name: pipeline-test-service
  namespace: test
spec:
  selector:
    app: pipeline-test-pod
  ports:
    - name: pipeline-test
      port: 8888
      targetPort: 80
--- 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pipeline-test-ingress
  namespace: test
spec:
  ingressClassName: pipeline-test-ingress
  rules:
  - host: pipeline-test.xiaoyuh.com
    http:
      paths:
      - pathType: Prefix       # 前缀匹配模式
        path: "/"
        backend:
          service:
            name: pipeline-test-service
            port:
              number: 8888

执行命令运行服务:

[root@k8s-master ~]# kubectl apply -f pipeline-test.yml
deployment.apps/pipeline-test-deployment created
service/pipeline-test-service created
ingress.networking.k8s.io/pipeline-test-ingress created
image.png

修改本地host

admin@wangyuhao ~ % sudo vim /etc/hosts
192.168.232.8 nginx.xiaoyuh.com
192.168.232.8 tomcate.xiaoyuh.com
192.168.232.8 pipeline-test.xiaoyuh.com

本地验证


image.png

Jenkins集成Kubernetes

将刚刚编写的yml文件放到git中

image.png

将yml文件传输到K8s的Master

配置Jenkins的目标服务器

image.png
image.png

将yml文件传输到K8s的Master上

  1. 生成流水线语法
image.png
  1. 将语句替换到Jenkinsfile
        stage('推送yml文件到k8s') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: './k8s/$JOB_BASE_NAME.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }

SSH Key 配置

进入jenkins容器生成新的ssh key

[root@localhost mytest]# docker exec -it jenkins bash
jenkins@790140a70e6f:/$ cd /var/jenkins_home/
jenkins@790140a70e6f:~$ ssh-keygen -t rsa -C "wangyuhao01@163.com" 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LJt2FmYqJFN6fUrn64TtXPgOTigPKLVwLwFJjNK+5Wo wangyuhao01@longfor.com
The key's randomart image is:
+---[RSA 3072]----+
|oo               |
|+o.              |
|+.  .            |
| ..o.. .         |
|. B+o + S        |
| +.X.. / o       |
|. +.= O X .      |
| .E. * O =       |
| .    ..*.o      |
+----[SHA256]-----+ 
[root@localhost data]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub

将公钥配id_rsa.pub置到k8s-master服务器上,私钥id_rsa配置到jenkins全局凭据。

公钥配id_rsa.pub置到k8s-master服务器上

  1. 客户端执行 ssh-copy-id root@服务端IP 将本机的id_rsa.pub公钥内容追加到服务端的/root/.ssh/authorized_keys 文件中。
jenkins@d043db9e06fe:~/.ssh$ ssh-copy-id root@192.168.232.9
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/jenkins_home/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.232.9's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.232.9'"
and check to make sure that only the key(s) you wanted were added.

2、客户端执行 ssh root@服务端IP ,就直接登录到服务端了

jenkins@d043db9e06fe:~/.ssh$ ssh root@192.168.232.9 ls
anaconda-ks.cfg
calico-3.13.1.yaml
kubeadm-config.yaml
my-namespace.yaml
nginx-tomcate-deployment.yml
nginx-tomcate-ingress.yml
nginx-tomcate-pod.yml
nginx-tomcate-service.yml
pipeline-test.yml

私钥id_rsa配置到jenkins全局凭据

image.png
image.png
image.png
image.png

通过SSH的方式执行kubectl

image.png
        stage('远程通过k8s-master部署服务') {
            steps {
                sh 'ssh root@192.168.232.9 kubectl apply -f k8s/$JOB_BASE_NAME.yml'
            }
        }

完整的Jenkinsfile文件

pipeline {
    agent any

    // 存放所有任务的合集
    stages {
        stage('拉取Git代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee_ssh_key', url: 'git@gitee.com:xiaolyuh/test.git']]])
            }
        }

        stage('Maven构建打包') {
            steps {
                sh ' /var/jenkins_home/maven/apache-maven-3.8.8/bin/mvn clean package -DskipTests'
            }
        }

        stage('制作Docker镜像') {
            steps {
                sh '''mv **/target/*.jar docker/app.jar
                    echo "build Image start"
                    docker build -t $JOB_BASE_NAME:$tag docker/
                    echo "build Image success"'''
            }
        }

        stage('Docker镜像推送Harbor') {
            steps {
                sh '''password=ucTv2l1XeBdgO9tkseoyWVLh47sRN9Py
                    echo "$password" | docker login $harbor_url --username \'robot$devops\' --password-stdin
                    docker tag $JOB_BASE_NAME:$tag $harbor_url/$harbor_object/$JOB_BASE_NAME:$tag
                    echo "push Image start"
                    docker push $harbor_url/$harbor_object/$JOB_BASE_NAME:$tag
                    echo "push Image success"'''
            }
        }

        stage('推送yml文件到k8s') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**/k8s/$JOB_BASE_NAME.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }

        stage('远程通过k8s-master部署服务') {
            steps {
                sh 'ssh root@192.168.232.9 kubectl apply -f k8s/$JOB_BASE_NAME.yml'
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容