寫在前面:
進入到雲計算的PAAS時代,起源Google的Kubernetes無疑成爲了PAAS雲服務的落地平臺。自2017年開始,K8s平臺已經成爲容器編排的事實標準,爲組織設計和部署應用程序帶來全新定義。在以後的幾年裏國有云,國外雲廠商陸續在IAAS平臺發佈PASS層產品。
在此基礎上出現了CICD,即持續集成與持續交付是軟件開發和交付中的實踐。項目從最初是瀑布模型,到敏捷開發,再到如今的DevOps。這是現代開發人員構建出色的產品的技術路線。隨着DevOps的興起,出現了持續集成(Continuous Integration)、持續交付(Continuous Delivery) 、持續部署(Continuous Deployment) 的新方法。
筆者基於自身需求作了以下測試,但願對同行有所助力,相關文章會持續更新。node
1、測試前提條件linux
主機名 | 公網IP | 內網IP | ROLE | PORT |
---|---|---|---|---|
node1 | 39.104.88.120 | 172.16.0.93 | gitlab | 80 |
node2 | 39.104.93.96 | 172.16.0.94 | drone,jenkins | 80,8080 |
node3 | 39.104.70.51 | 172.16.0.98 | harbor | 80 |
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2) 添加軟件源git
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3) 更新並安裝Docker-CEgithub
sudo yum makecache fast yum -y install docker-ce-18.09.9-3.el7
4) 啓動Dockergolang
systemctl start docker && systemctl enable docker
5) 配置Docker調優參數docker
tee /etc/docker/daemon.json << EOF { "oom-score-adjust": -1000, "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "max-concurrent-downloads": 10, "max-concurrent-uploads": 10, "registry-mirrors": ["https://yefnfc9c.mirror.aliyuncs.com"], "insecure-registries" : ["0.0.0.0/0"], "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF
6) 重啓docker生效json
systemctl restart docker
2、測試centos
2.部署說明
2.1. 部署gitlabapp
docker run --detach --hostname 39.104.88.120 --publish 443:443 --publish 80:80 --publish 1022:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.10.3-ce.0
注:39.104.88.120爲本機實際節點外網IPcurl
2.2. 部署Harbor
2.2.1. 安裝docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.2.2. 下載harbor
https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-online-installer-v1.10.2.tgz
2.2.3. 解壓後配置harbo.yaml
hostname: 172.31.48.86 //修改成實際節點內網IP
屏蔽https配置部分
2.2.4. 安裝Harbor
./install.sh --with-clair
2.2.5. 安裝結果檢查
docker-compose ps //正常回顯以下
2.3. 部署Drone
2.3.1. 部署drone主應用
如何取得
DRONE_GITLAB_CLIENT_ID DRONE_GITLAB_CLIENT_SECRET
登陸gitlab並配置gitlab外部認證
應用回調接口申請
注:本測試採用docker run 部署drone,因此Url爲:http://39.104.93.96/login,按自身部署drone環境修改Url。
取得ApplicationID和secret
ApplicationID對應DRONE_GITLAB_CLIENT_ID
secret對應DRONE_GITLAB_CLIENT_SECRET
docker run \ --volume=/var/run/docker.sock:/var/run/docker.sock \ --volume=/var/lib/drone:/data \ --env=DRONE_LOGS_DEBUG=true \ --env=DRONE_GIT_ALWAYS_AUTH=false \ --env=DRONE_GITLAB_SERVER=http://39.104.88.120 \ --env=DRONE_GITLAB_CLIENT_ID=d6272993ac02c3bb4069d73bf0ff8dabeaff47c0739ae27d1a23e8b80e33faa5 \ --env=DRONE_GITLAB_CLIENT_SECRET=01f454fe0a55256a974d420b8ca023df6efc80b33d8a917dd16138b152b73253 \ --env=DRONE_RPC_SECRET=12345678\ --env=DRONE_RUNNER_CAPACITY=3 \ --env=DRONE_SERVER_HOST=39.104.93.96\ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_TLS_AUTOCERT=false \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1
參數說明:
2.3.2. 部署Drone-runner
docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=172.16.0.94 \ -e DRONE_RPC_SECRET=12345678 \ -e DRONE_RUNNER_CAPACITY=3 \ -e DRONE_RUNNER_NAME=${HOSTNAME} \ -p 3000:3000 \ --restart always \ --name runner \ drone/drone-runner-docker:1
參數說明:
Drone-runner檢查
3.配置說明
3.1. 配置harbor
3.1.1. 增長項目:go-server
注:admin/Harbor12345
3.2. 配置gitlab
3.2.1. 增長項目:go-server
3.2.2. 項目go-server中建立相關文件
1) 增長主應用代碼文件:server.go
package main import ( "fmt" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") } func main() { http.HandleFunc("/", hello) if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) } }
2) 建立Dockerfile,會被.drone.yml調用
FROM golang WORKDIR /go ADD server /go CMD ["./server"]
3) 建立.drone.yml文件,此文件做用是按文件內容將任務傳送至drone應用,進行CI動做。
注:此文件在配置drone完成後建立
kind: pipeline type: docker name: build steps: - name: build-code image: golang:alpine pull: if-not-exists # always never commands: - go build server.go - name: build-image image: plugins/docker settings: repo: 172.16.0.98/go-server/go-server registry: 172.16.0.98 use_cache: true username: from_secret: registry_username password: from_secret: registry_password tags: ${DRONE_BUILD_NUMBER} insecure: true mirror: https://yefnfc9c.mirror.aliyuncs.com/ trigger: branch: - master event: - push
3.3. 配置drone
3.3.1. 提示gitlab頁確認後跳轉drone
3.3.2. 點擊已同步項目go-server
3.3.3. 點擊已同步項目go-server後找到SETTINGS
3.3.4. SETTINGS設置Harbor登陸信息
注:此處valuse值對應.drone.yml中常量值,下圖標紅處。key值爲harbor用戶及密碼。
username: from_secret: registry_username password: from_secret: registry_password
注:完成後建立.drone.yml文件,接3.2.2 .drone.yml內容。
4.測試效果說明
4.1. drone效果
4.2. harbor效果
4.3. 再次觸發build
修改gitlab中go-server代碼,就會再次出發build。
後續:
本次測試到此就告一段落,測試只是CICD中冰山一角,其餘部分也會陸續更新。在這個新興技術不斷涌現的今天,經過不斷的學習跟上時代步伐。如今有不少同窗對k8s有研究,除了k8s自己外,其餘圍繞k8s附加功能也值得一學,但願本文及後續能夠開啓你k8s之路。