環境以下
//前三個爲K8s集羣中的節點html
主機名 | IP | 運行服務 | |
---|---|---|---|
docker-k8s01 | 192.168.171.151 | docker+registry | |
docker-k8s02 | 192.168.171.150 | docker | |
docker-k8s03 | 192.168.171.152 | docker | |
Jenkins | 192.168.171.153 | Jenkins+gitlab+docker |
Jenkins採用war包的方式部署,須要用到tomcat環境,自行參考博文,進行部署;java
Docker 部署nginx
K8s 安裝部署web
1、部署registry私有倉庫
//任意節點均可部署**docker
一、運行registry容器
[root@docker-k8s01 ~]# docker run -itd --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
二、配置各個節點指向私有倉庫
//選擇其中一個節點操做 [root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service //修該下面的配置項,以便指定其私有倉庫的監聽地址 ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000 //將已經配置好的文件發送到各節點 [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s02:/usr/lib/systemd/system/ [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service docker-k8s03:/usr/lib/systemd/system/ [root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service jenkins:/usr/lib/systemd/system/
三、各節點重啓docker服務,使之生效
//每一個節點都須要執行 [root@docker-k8s01 ~]# systemctl daemon-reload [root@docker-k8s01 ~]# systemctl restart docker
2、部署Jenkins服務
//部署Jenkins以前,自行部署Tomcat服務,參考開頭連接便可vim
//進入tomcat的webapps目錄,根據實際狀況而定,這裏我直接刪除了 [root@jenkins ~]# cd /usr/local/tomcat/webapps/ [root@jenkins webapps]# rm -rf * [root@jenkins webapps]# ls //剛剛上傳上來發現tomcat自動給我解壓了 jenkins jenkins.war //接下來指定Jenkins的家目錄 [root@jenkins webapps]# vim ../bin/catalina.sh #!/bin/sh //在開頭添加以下內容 export CATALINA_OPTS="-DJENKINS_HOME=/data/jenkins" export JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true" [root@jenkins webapps]# cd ../bin/ [root@jenkins bin]# ./catalina.sh start //啓動tomcat //肯定端口已啓動 [root@jenkins bin]# ss -anput | grep 8080 tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=12236,fd=49))
3、配置Jenkins服務
要想實現Jenkins的CI/CD,必須有GitLab、GitLab HOOK、Git Lab Authentication這三個插件,國內不太好下載這幾個插件。瀏覽器
一、配置Jenkins web界面
//瀏覽器訪問tomcat服務的IP+端口/Jenkins(訪問前最好先斷掉外網,不然在輸入密碼後,會讓在線安裝插件,比較慢,並且頗有可能安裝失敗)tomcat
//查看密碼 [root@jenkins ~]# cat /data/jenkins/secrets/initialAdminPassword 3eb89452e2614173a548a9d4cfe9fcc3
//輸入密碼後稍等一會出現以下圖
//建立相應用戶
登陸成功後,以下**
bash
二、配置所需插件
//關閉瀏覽器頁面,對Jenkins添加插件
[root@jenkins ~]# rm -rf /data/jenkins/plugins/ [root@jenkins ~]# tar zxf plugins.tar.gz -C /data/jenkins/ //重啓tomcat使之生效 [root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh stop [root@jenkins ~]# /usr/local/tomcat/bin/catalina.sh start
//再次訪問Jenkins的web界面
//能夠看到已經變成了中文頁面,說明插件配置生效
4、部署gitlab
一、安裝gitlab
//下載gitlab的rpm包 [root@jenkins ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm [root@jenkins ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el7.x86_64.rpm [root@jenkins ~]# vim /etc/gitlab/gitlab.rb external_url 'http://192.168.171.153:90' //將本來的域名更改成本機IP unicorn['listen'] = '192.168.171.153' //這兩行在下方是有註釋的,這裏我直接添加了 unicorn['port'] = 3000 [root@jenkins ~]# gitlab-ctl reconfigure
接下來的操做可參考文章開頭連接中的Gitlab安裝部署來接着部署,最後保證能夠將遠端的庫克隆到本地便可
**
//能夠看到本地已經訪問到gitlab [root@jenkins ~]# ls -d test1/ test1/
5、配置Jenkins建立一個任務
//腳本中的IP,192.168.171.151爲私有倉庫的IP,最後的192.168.171.151爲k8s集羣中master的IP地址 #!/bin/bash backupcode="/data/backcode/$JOB_NAME/$BUILD_NUMBER" #這裏引用了Jenkins的默認變量 mkdir -p $backupcode chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/* rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode echo From 192.168.171.151:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile docker rmi 192.168.171.151:5000/nginx docker build -t 192.168.171.151:5000/nginx /"$JENKINS_HOME"/workspace/. docker push 192.168.171.151:5000/nginx ssh root@192.168.171.151 kubectl delete deployment nginx ssh root@192.168.171.151 kubectl apply -f /root/nginx.yaml
//腳本填寫後,先別保存,根據如下操做複製一下Jenkins的地址
6、開啓Jenkins的匿名訪問權限
7、gitlab上開啓容許向本身發送web hook
//這是由於我是把Jenkins和gitlab裝在了一臺服務器上
//保存後,下拉頁面,便可看到新添加的web-hook,點擊以下,進行測試
//返回狀態碼200,則表示配置無誤
8、配置Jenkins免密登陸k8s羣集的master節點
//Jenkins配置以下
//下方IP爲k8s羣集master的IP [root@jenkins ~]# ssh-copy-id root@192.168.171.151
9、測試持續CI/CD效果
一、k8s羣集運行nginx資源對象
二、客戶端訪問nginx
三、在gitlab進行版本的更新迭代測試
[root@jenkins ~]# cd test1/ [root@jenkins test1]# git config --global user.name "test" [root@jenkins test1]# git config --global user.email "test@test.com" [root@jenkins test1]# echo "test--version==v1" > index.html [root@jenkins test1]# git add * [root@jenkins test1]# git commit -m "Test CI/CD" [root@jenkins test1]# git push origin master
//在進行上述操做後,便可在Jenkins新建的任務中,看到構建成功的信息
//再次訪問nginx首頁,發現已經變成了咱們在gitlab上提交的內容
//歷史版本內容存放路徑以下
[root@jenkins data]# pwd /data //這個目錄下記錄的是歷史版本的代碼 [root@jenkins data]# tree backcode/ backcode/ └── test-01 ├── 1 │ └── README.md └── 2 ├── index.html └── README.md [root@jenkins workspace]# pwd /data/jenkins/workspace //此目錄下是將新代碼構建成鏡像的關鍵所在,Dockersfile就在這個目錄下 [root@jenkins workspace]# ls Dockerfile test-01