kubernetes實戰-交付dubbo服務到k8s集群(二)交付jenkins到k8s集群


首先下載jenkins鏡像並上傳到我們自己的私有倉庫:7-200

# docker pull jenkins/jenkins:2.190.3
# docker tag 22b8b9a84dbe harbor.od.com/public/jenkins:v2.190.3
# docker push harbor.od.com/public/jenkins:v2.190.3

為了適應我們的環境,我們的jenkins不能直接使用,需要進行配置:

# mkdir -p /data/dockerfile/jenkins/
# cd /data/dockerfile/jenkins
# vi Dockerfile
FROM harbor.od.com/public/jenkins:v2.190.3
USER root  #定義啟動jenkins的用戶
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ 
    echo 'Asia/Shanghai' >/etc/timezone  #修改時區 改成東八區
ADD id_rsa /root/.ssh/id_rsa  #加載用戶密鑰,dubbo服務拉取代碼使用的ssh
ADD config.json /root/.docker/config.json  #加載宿主機的docker配置文件,登錄遠程倉庫的認證信息加載到容器里面。
ADD get-docker.sh /get-docker.sh # 在jenkins容器內安裝docker 客戶端,jenkins要執行docker build,docker引擎用的是宿主機的docker引擎
RUN echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&\
    /get-docker.sh  # 跳過 ssh時候輸入 yes 步驟,並執行安裝docker

首先創建密鑰:郵箱請根據自己的郵箱自行修改

 # ssh-keygen -t rsa -b 2048 -C "xxx@xx.xxx" -N "" -f /root/.ssh/id_rsa

將私鑰加載到jenkins,將公鑰配置到git倉庫中,否則不能拉取代碼:

 

 接下來創建Dockerfile中需要的文件:

# curl -fsSL get.docker.com -o get-docker.sh

添加執行權限:

# chmod u+x get-docker.sh
# cp /root/.ssh/id_rsa ./
# cp /root/.docker/config.json ./

創建運維私有倉庫,打開我們的harbor.od.com創建一個infra的私有倉庫:

 

 然后build鏡像:過程漫長,可以抽根煙,喝杯茶了

# docker build . -t harbor.od.com/infra/jenkins:v2.190.3

build完以后將鏡像上傳到我們的私有倉庫:

# docker push harbor.od.com/infra/jenkins:v2.190.3

為jenkins創建名稱空間:

# kubectl create ns infra

 

創建一條secret,用於訪問我們的私有倉庫infra:

# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n infra

解釋一下上面的命令:創建一條secret,資源類型是docker-registry,名字是 harbor,docker-server=harbor.od.com ,docker-username=admin ,docker-password=Harbor12345 -n 指定私有倉庫名稱infra

 為了讓jenkins中一些需要持久化的數據,能夠存儲,我們需要使用共享存儲,然后進行掛載:這里使用最簡單的NFS共享存儲,因為k8s默認支持nfs模塊

在運維主機和所有的node節點安裝:

# yum install nfs-utils -y

使用7-200作為服務端:

# vi /etc/exports
/data/nfs-volume 10.4.7.0/24(rw,no_root_squash)
# mkdir -p mkdir /data/nfs-volume/jenkins_home
# systemctl start nfs
# systemctl enable nfs

准備jenkins資源配置清單:

# cd /data/k8s-yaml/
# mkdir jenkins
# cd jenkins

1、dp.yaml

這里掛載了宿主機的docker.sock,使容器內的docker客戶端可以直接與宿主機的docker引擎進行通信

在使用私有倉庫的時候,資源清單中,一定要聲明:

 imagePullSecrets:
- name: harbor
# vi dp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: jenkins
  namespace: infra
  labels: 
    name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: jenkins
  template:
    metadata:
      labels: 
        app: jenkins 
        name: jenkins
    spec:
      volumes:
      - name: data
        nfs: 
          server: hdss7-200
          path: /data/nfs-volume/jenkins_home
      - name: docker
        hostPath: 
          path: /run/docker.sock   
          type: ''
      containers:
      - name: jenkins
        image: harbor.od.com/infra/jenkins:v2.190.3
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: JAVA_OPTS
          value: -Xmx512m -Xms512m
        volumeMounts:
        - name: data
          mountPath: /var/jenkins_home
        - name: docker
          mountPath: /run/docker.sock
 imagePullSecrets: - name: harbor
      securityContext: 
        runAsUser: 0
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600

2、svc.yaml

kind: Service
apiVersion: v1
metadata: 
  name: jenkins
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: jenkins

3、ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: jenkins
  namespace: infra
spec:
  rules:
  - host: jenkins.od.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: jenkins
          servicePort: 80

應用資源配置清單:node節點

# kubectl create -f http://k8s-yaml.od.com/jenkins/dp.yaml
# kubectl create -f http://k8s-yaml.od.com/jenkins/svc.yaml
# kubectl create -f http://k8s-yaml.od.com/jenkins/ingress.yaml

查看我們創建的pod:這個啟動時間還是挺長的,大概要幾分鍾時間

# kubectl get pod -n infra

 

 檢查jenkins需要持久化的數據是否保存下來了:7-200

 

 已經起來了:

 

 添加解析:7-11

# vi /var/named/od.com.zone
# systemctl restart named

瀏覽器訪問:

http://jenkins.od.com

經過配置我們已經部署好了jenkins:

 

安全配置:

 

 允許跨域:

 安裝插件:

替換jenkins更新源

###hdss7-200
# cd /data/nfs-volume/jenkins_home/updates
# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

搜索藍海插件並安裝:blue ocean

驗證jenkins容器狀態:

1、是否是root用戶

# docker ps -a | grep jenkins
# docker exec -it 8ff92f08e3aa /bin/bash
# whoami

2、時區是否是東八區

# date

3、是否使用宿主機docker引擎,在容器內查看宿主機上的docker資源情況

# docker ps 

4、是否能免密訪問gitee

# ssh -i /root/.ssh/id_rsa -T git@gitee.com

5、是否能訪問harbor私有倉庫 :原因是我們掛載了宿主機的docker config.json

 

完成驗證以上內容后,證明我們基於本次實驗環境的jenkins容器已經安裝配置完成了。

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM