摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。
基于kubernetes+docker+jenkins的DevOps實踐
之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套
jenkins + docker registry + docker
見之前的筆記 docker學習下面
總的差不多這樣:
之后對kubernetes的接觸后,就在之前的基礎上加入kubernetes,其實也就是在服務器拉取鏡像docker run的時候改變為通知kubernetes的apiServer對提前配置好的項目配置文件xx.yaml進行更新kubectl appply -f xx.yaml,它會對配置里的鏡像拉取在多個pod里運行,當然還需要對應的service,如果需要暴露給外部還可以添個ingress。
一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把jenkins , docker registry拆出來,用上了公共的ali云服務CodePipeline,容器鏡像服務。
這里記錄一下。
ubuntu安裝docker官方教程
kubernetes搭建之前寫的kubernetes學習下面有
使用ali云CodePipeline替代jenkins創建任務配置->項目名稱:最好為github上代碼的demo項目名稱,這里以bootshiro為例 配置->源碼管理->Git:URL為github上的項目clone url,下面默認master分支 配置->構建觸發器->填寫代碼分支:eg:master 點擊生成觸發器地址留下備用(github webhook配置會用到)
配置->構建項目類型可選maven項目 node python等(按自己需求改編譯打包冊測試腳本) eg: maven項目 編譯打包: mvn package -B -DskipTests 用例測試: mvn test
配置->鏡像構建和發布: 這里使用ali云的免費docker鏡像倉庫 鏡像版本號最好用jenkins環境變量標記,registry地址證書等就是自己開通的ali云registry地址和賬戶,docker路徑是相對于當前代碼倉庫的Dcokerfile文件路徑,用這個Dockefile文件來生成鏡像。 eg: bootshiro的Dockefile #VERSION 1.1.0 #基礎鏡像為openjdk:12-alpine FROM openjdk:12-alpine #簽名 MAINTAINER tomsun28 "tomsun28@outlook.com" RUN rm -rf /opt/running/bootshiro* ADD ./target/bootshiro.jar /opt/running/bootshiro.jar EXPOSE 8080 WORKDIR /opt/running/ CMD ["java", "-jar", "bootshiro.jar","--spring.profiles.active=prod"]
配置->部署Kubernetes(新): 這里配置對搭建好的k8s環境的apiServer連接,之后好使用apiServer對kubernetes操作 認證方式:選擇認證證書 API服務器地址:為apiServer通訊地址 證書:使用docker授權模式,客戶端Key(key.pem)和客戶端證書(cert.pem)在/etc/kubernetes/admin.conf,服務端CA證書(ca.pem)在/etc/kubernetes/pki/ca.crt 部署配置文件:為k8s部署這個項目的配置文件位置,也是以當前項目代碼倉庫為相對路徑,eg :bootshiro.yaml # ----------------------bootshiro--------------------- # # ------bootshiro deployment------ # kind: Deployment apiVersion: apps/v1beta2 metadata: name: bootshiro-deployment labels: app: bootshiro spec: replicas: 1 selector: matchLabels: app: bootshiro template: metadata: labels: app: bootshiro spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/tomsun28/bootshiro:${BUILD_NUMBER} ports: - containerPort: 8080 --- # -------nginx-service--------- # apiVersion: v1 kind: Service metadata: name: bootshiro-service spec: # type: NodePort ports: - name: server port: 8080 targetPort: 8080 selector: app: bootshiro # !----------------------bootshiro--------------------- # 這里配置部署文件創建了一個pod實例,創建了與其想對應的service在集群內部暴露服務。 如果部署的應用需要對集群外提供服務,這里還要創建對應的暴露服務的方式,如ingress, nodeport等
-
到此cicd就差不多了,我們開發代碼push到github倉庫上,跟著DevOps流程走,最后項目就會自己運行到kubernetes集群里面了,pod掛了或者從機掛了,k8s會重新啟保證設定數量的pod。
使用ingress對集群外暴露服務這里使用的是traefik-ingress,在kubernetes中部署traefik有官方部署手冊,基本按著走一遍就能部署上去了。
整合部署的traefik.yaml:
--- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: traefik-ingress-controller rules: - apiGroups: - "" resources: - services - endpoints - secrets verbs: - get - list - watch - apiGroups: - extensions resources: - ingresses verbs: - get - list - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: traefik-ingress-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: traefik-ingress-controller subjects: - kind: ServiceAccount name: traefik-ingress-controller namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: traefik-ingress-controller namespace: kube-system --- kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-controller namespace: kube-system labels: k8s-app: traefik-ingress-lb spec: template: metadata: labels: k8s-app: traefik-ingress-lb name: traefik-ingress-lb spec: serviceAccountName: traefik-ingress-controller terminationGracePeriodSeconds: 60 containers: - image: traefik name: traefik-ingress-lb ports: - name: http containerPort: 80 hostPort: 80 - name: admin containerPort: 8080 securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE args: - --api - --kubernetes - --logLevel=INFO --- apiVersion: v1 kind: Service metadata: name: traefik-web-ui namespace: kube-system spec: selector: k8s-app: traefik-ingress-lb ports: - name: web port: 80 targetPort: 8080 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: traefik-web-ui namespace: kube-system annotations: kubernetes.io/ingress.class: traefik traefik.frontend.rule.type: PathPrefixStrip spec: rules: - host: tom.usthe.com http: paths: - path: /ingress backend: serviceName: traefik-web-ui servicePort: web
使用traefik來暴露service:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: chess namespace: default annotations: kubernetes.io/ingress.class: traefik traefik.frontend.rule.type: PathPrefixStrip spec: rules: - host: tom.usthe.com http: paths: - path: /usthe backend: serviceName: usthe-service servicePort: http - path: /nginx backend: serviceName: nginx servicePort: http
分享一波阿里云代金券快速上云
轉載請注明 from tomsun28
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32838.html
摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實踐 之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套 jenkins + docker...
摘要:的設計模式的設計模式以持續集成持續測試持續交付和持續部署為中心,自動化協作和持續監控是中使用的一些其他設計模式。持續集成持續集成是不斷地將源代碼集成到一個新的構建或發布的過程,源代碼可以在本地存儲中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識別二維碼報名活動 8月19日,來自微軟、數人...
摘要:基于年底或年初沒有推廣的現狀,唯品會部門目前已經做了兩年的時間。唯品會現狀唯品會目前線上有一千多個域,每個域之間相互的依賴比較復雜,每次的部署發布困難。這是唯品會的架構,主要包含持續集成和持續部署。 數人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實錄第三更來啦。唯品會是數人云Meetup的老朋友,去年曾做過RPC服務框架和Mesos容器化的分享。本次分享中,...
摘要:該文章用于概述一個小型持續集成環境的搭建的方案什么是持續集成持續集成作為當今軟件開發實踐,可以簡單理解為團隊開發相對頻繁的集成他們的工作,一般讓每個成員每天至少集成一次,而這回造成每天會有多次的版本發布。 該文章用于概述一個小型持續集成環境的搭建的方案 什么是持續集成? 持續集成作為當今軟件開發實踐,可以簡單理解為團隊開發相對頻繁的集成他們的工作,一般讓每個成員每天至少集成一次,而這回...
摘要:王磊此次演講的題目為容器新技術架構下的運維實踐,詳細為大家講解了在基于構建容器的過程中,如何以應用為中心,通過新的技術工具對服務節點集群平臺等多個方面進行管理運維,提高系統的自動化運維能力。 2018年11月16-17日,運維&容器技術盛會 CNUTCon 全球運維技術大會在上海·光大會展中心成功舉辦。時速云聯合創始人兼 CTO 王磊受邀參加此次大會,并發表主題演講。王磊此次演講的題目...
閱讀 2413·2021-11-18 10:02
閱讀 1927·2021-10-13 09:40
閱讀 3006·2021-09-07 10:07
閱讀 2114·2021-09-04 16:48
閱讀 1014·2019-08-30 13:18
閱讀 2461·2019-08-29 14:03
閱讀 2927·2019-08-29 12:54
閱讀 3163·2019-08-26 11:41