Jenkins+K8s實現持續集成


 

 一、Docker容器

1、Docker介紹

(1)Docker的介紹

  • Docker是一種容器技術。
  • 容器是什么-容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序可以在幾乎任何地方以相同的方式運行。
  • 開發在自己筆記本上創建並測試好的容器,無需任何修改就能夠在生產系統的虛擬機、物理服務器或公有雲主機上運行。

(2)Docker的由來

  • 容器來源於集裝箱,二者的英文都是Container,集裝箱解決了運輸的難題。
  • Docker的中文意思是碼頭工人。
  • Docker的圖標是集裝箱。

(3)容器 VS 虛擬機

 

 (4)Docker的特點

  • Docker的特點:輕量級、可移植、資源占用少。
  • 對於開發人員-Build Once,Run Anywhere。
  • 對於運維人員-Configure Once,Run Anything。

2、Docker安裝配置

(1)Docker安裝

  • apt-get update
  • apt-get install -y docker.io

(2)Docker配置

  • 阿里雲加速器配置(https://cr.console.aliyun.com/)

3、Docker基本使用

(1)Docker基本使用

docker pull mysql:5.6

docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

(2)Docker架構

 

 (3)Docker基本概念

  • 鏡像(image)、容器(container)、倉庫(registry)。
  • 倉庫分公有和私有兩種。Docker hub是默認的倉庫。

 

 docker pull nginx

 

 docker rmi nginx

 

 (4)Docker基本使用

  • 版本查看、鏡像拉取、鏡像查詢、鏡像刪除。
  • 容器運行、端口映射、掛存儲卷、進入容器、查看容器日志、查詢容器、設置環境變量、容器停止、容器刪除。
  • 倉庫登錄。
  • 鏡像構建、鏡像打tag、鏡像推送。
  • Dockerfile基本語法(FROM、RUN、CMD/ENTRYPOINT、EXPOSE)

docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

 

docker logs -f ce5307fc90b6

docker ps -a

docker stop ce5307fc90b6

 

docker rm ce5307fc90b6

 

 

 

 

 

docker push myregistry/mymysql:1.0

 

 二、必知必會的K8s

1、k8s介紹

Kubectl cerate -f test.yaml

Kubectl apply -f /root/kube.yaml

kubectl get services --all-namespaces

 

 

  •  基於容器技術的分布式架構領先方案。它是google嚴格保密十幾年的秘密武器-Borg的一個開源版本。
  • Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理。

2、k8s能做什么

  • 容器的自動化復制和部署。隨時擴展或收縮容器規模,並提供負載均衡。
  • 方便地容器升級。
  • 提供容器彈性,如果失效就替換它。

K8s對於測試能做什么

  • 測試服務器的集中化、自動化管理。將各種平台的服務器加入集群,按需部署或銷毀。
  • 持續集成時方便地自動部署。

k8s架構

 

 k8s基本概念

  • Master是主服務器,node是用於部署應用容器的服務器。
  • Pod基本操作單元,也是應用運行的載體。整個Kubernetes系統都是圍繞着Pod展開的,比如如何部署運行Pod、如何保證Pod的數量、如何訪問Pod等。
  • Deployment定義了pod部署的信息。
  • 若干個pod副本組成一個service,對外提供服務。
  • 副本是指一個pod的多個實例。
  • Namespace用於多租戶的資源隔離。在測試環境中可以根據namespace划分成多套測試環境。默認有2個namespace:kubu-system/default

k8s調度過程

  • Kubernetes Client將請求發送給API server。
  • API Server根據請求的類型,將處理的結果存入高可用鍵值存儲系統Etcd中。
  • Scheduler將未分發的Pod綁定(bind)到可用的Nod節點上,存到etcd中。
  • Controller Manager根據etcd中的信息,調用node中的kubelet創建pod。
  • Controller Manager監控pod的運行狀況並確保運行正常。

3、k8s的安裝

k8s安裝前的准備

准備ke xue上網。在主機上安裝,並配好服務器(服務器地址、密碼需要自己想辦法哦)

 

 

 

 k8s安裝說明

  • 2台主機上都要安裝docker。
  • 2台主機上都要安裝kubeadm、kubelet和kubectl。
  • 2台主機上都要禁用虛擬內存。

k8s安裝以及配置

安裝kubeadm,kubelet和kubectl(一)

apt-get update && apt-get install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb
http://apt.kubernetes.io/ kubernetes-xenial main
EOF apt
-get update && apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl

 

注意:curl如果連不上,則需要設置一下ke xue上網:export http_proxy=10.10.10.94:1087 && export https_proxy=10.10.10.94.1087

操作步驟

在ubuntu主機上:

swapoff -a

apt-get install apt-transport-https

apt-get install curl

 

在ubuntu-node主機上:

swappff -a

apt-get update

apt-get install -y apt-transport-https

apt-get install -y curl

 

4、k8s的設置ke xue上網

 

vim /etc/apt/source.list.d/kubernetes.list

export http_proxy=192.168.0.186:1087 && export https_proxy=192.168.0.186:1087

echo $http_proxy

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -


cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

 

 

5、k8s配置

 vim apt_proxy_conf

 

 apt-get -c apt_proxy_conf update

 apt-get -c apt_proxy_conf install -y kubelet kubeadm kubectl

apt-mark hold kubelet kubeadm kubectl

 

安裝kubeadm、kubelet和kubectl(二)

Apt安裝這3個東東時,可能需要FQ。AptFQ安裝使用如下方式:

 

 初始化master(一)

  1. swapoff -a (禁用虛擬內存)
  2. kubeadm init --pod-network-cidr=10.244.0.0/16

 注意:這一步因為連不上Google的鏡像庫,會導致失敗。記錄下載失敗的鏡像,下一頁中會告訴大家如何處理。

6、k8s初始化master

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

 注意:這一步因為連不上Google的鏡像庫,會導致失敗。記錄下載失敗的鏡像,下一頁中會告訴大家如何處理。

 初始化master(二)

  1. 可以從keveon或mirrorgooglecontainers鏡像庫中下載,當其中一個鏡像庫找不到時,嘗試另外一個。
  2. 再手工設置tag。

 

 

 

7、k8s安裝和配置

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2

docker tag mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcr.ioi/kube-apiserver:v1.13.2

docker images | grep kube-apiserver

docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.2

 

docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2

docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.2 k8s.gcr.ioi/kube-controller-manager:v1.13.2

docker rmi mirrorgooglecontainers/kube-controller-manager:v1.13.2

docker images | grep kube-controller

 

docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2

docker tag mirrorgooglecontainers/kube-scheduler:v1.13.2 k8s.gcr.ioi/kube-scheduler:v1.13.2

docker rmi mirrorgooglecontainers/kube-scheduler:v1.13.2

docker images | grep kube-scheduler

 

docker pull mirrorgooglecontainers/kube-proxy:v1.13.2

docker tag mirrorgooglecontainers/kube-proxy:v1.13.2 k8s.gcr.ioi/kube-proxy:v1.13.2

docker rmi mirrorgooglecontainers/kube-proxy:v1.13.2

docker images | grep kube-proxy

 

docker pull mirrorgooglecontainers/pause:3.1

docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.ioi/pause:3.1

docker rmi mirrorgooglecontainers/pause:3.1

docker images | grep pause

 

docker pull mirrorgooglecontainers/etcd:3.2.24

docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.ioi/etcd:3.2.24

docker rmi mirrorgooglecontainers/etcd:3.2.24

docker images | grep etcd

 

docker pull keveon/coredns:1.2.6

docker tag keveon/coredns:1.2.6 k8s.gcr.ioi/coredns:1.2.6

docker rmi keveon/coredns:1.2.6

docker images | grep coredns

 初始化master(三)

  1. 重新執行kubeadm init --pod-network-cidr=10.244.0.0/16。
  2. 記錄下最后一條kubeadm join命令。

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

 

 初始化master(四)

  1.  mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

8、k8s安裝網絡插件

安裝網絡插件(只在master上執行)(一)

  •  sysctl net.bridge.bridge-nf-call-iptables=1
  • curl -O https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

安裝網絡插件(只在master上執行)(二)

  • 修改kube-flannel.ym文件,增加下圖中紅色的部分。

  • kubectl apply -f kube-flannel.yml

添加node(只在node上執行)

  • 將之前記錄下來的kubeadm join 命令執行。
  • swapoff -a
  • sysctl net.bridge.bridge-nf-call-iptables=1

k8s檢查安裝配置

  • 檢查node是否ready:kubectl get node

 

  •  檢查所有pod是否正常:kubectl get pod --all-namespaces -o wide

 

 

 

 

9、k8s安裝異常處理

 

 

 

  •  在node上執行kubeadm reset可以斷開node,然后重新join。
  • 在master上執行kubeadm reset后可以重新init。
  • 重新啟動后,要執行如下命令:
  1. swapoff -a
  2. systemctl daemon-reload
  3. systemctl restart kubelet

 

10、k8s基本使用

k8s基本使用-Deployment創建、刪除

  • kubectl create -f test.yaml
  • kubectl delete -f test.yaml

 

 k8s基本使用-Service創建及查看

  • kubectl create -f test.yaml
  • kubectl get service --all-namespaces

 

 k8s基本使用-Pod查看、刪除

  • kubectl get pod --all-namespaces -o wide
  • kubectl describe pod xxxxxx -n kube-system
  • kubectl delete pod xxxxxx -n kube-system

 

三、持續集成與Jenkins

1、持續集成

  • 持續集成(CI)是一種軟件開發實踐。
  • 團隊開發成員經常集成他們的工作,每個成員每天至少集成一次。
  • 每天可能會發生多次集成。
  • 每次集成都通過自動化的構建(包括編譯、打包、部署、自動化測試)來驗證。
  • 從而盡早地發現集成錯誤。

持續集成過程

 

 持續集成優勢

  • 快速集成、快速反饋、快速解決。
  • 團隊信心更強。
  • 發布效率更高

 

2、Jenkins介紹

  • 持續集成工具
  • 任務調度平台

 

 

 

 

 

 

3、Jenkins安裝以及配置

Jenkins安裝

  • jdk安裝以及配置環境變量

 

 

 

 

 

  •  tomcat下載並解壓

 

 

 

 

 

 

  •  jenkins war包下載,並放到tomcat的app目錄,啟動tomcat。

 

 

 

 

 

 

 

 

 

 

 

 

 

 jenkins服務器安裝

  • 安裝git

  •  安裝maven

 

 

 

 

 

 

 

 

 

 

 

  • 修改maven鏡像,使用阿里雲鏡像,修改maven的conf目錄下的settings.xml文件。

 

 

 

 jenkins配置

  • 瀏覽器訪問Jenkins url:xxx.xxx.xxx.xxx:8080/jenkins
  • 按提示創建用戶

  • 按提示安裝插件:ssh/publish over ssh/git parameter/Maven Integration

 

 

 

 

 

 

 

 

 

 

 

 Jenkins配置

  • Jenkins全局工具配置,配置jdk/git/maven

 

 

 

 

 

 

四、Jenkins+k8s發布實例

1、Jenkins+k8s發布實例

2、registry安裝配置和使用

Registry安裝配置

  • docker pull registry
  • docker run -p 5000:5000 -v /home/registry_images:/var/lib/registry -d registry

Registry使用

  • 修改/etc/docker/daemon.json文件
  • docker pull nginx
  • docker tag nginx 10.10.10.71:5000/nginx:test
  • docker pull 10.10.10.71:5000/nginx:test

 

 

 

 

 

 

 

 

 

 

 

3、Jenkins項目創建與配置

Jenkins項目創建

  • 創建maven項目

 

 

 

 

 

  • 設置參數化構建

 

  •  Jenkins項目配置-設置代碼源

當前使用的是github上的一個public項目,你也可以使用

 

  •  設置maven構建命令

 

  •  設置構建后操作,將jar包打包成docker鏡像,並推送registry

注意:對應腳本要放到對應目錄。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4、Jenkins項目構建

 Jenkins項目配置

  • 設置jenkins服務器到k8s master ssh 免密登錄

 

 

 

 

 

 

 

 

 

  •  設置構建后操作,將yaml文件拷貝到k8s master上並運行應用。

 

 

 

 Jenkins項目構建-參數化構建

 

Jenkins查看日志

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

jenkins訪問驗證

  • 瀏覽器訪問任一node的IP加上nodePort。

 

 

 

總結

  • Registry安裝配置和使用(使用docker安裝)
  • Jenkins項目創建與配置
  • Jenkins項目構建

來源:慕課網免費課程地址:http://www.imooc.com/learn/1112


免責聲明!

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



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