gitlab-ci + k8s 之k8s (二)
k8s用自己话说,就是一种容器编排工具,部署好应用,再创建绑定应用的服务,就可以实现的服务访问了。这个理论还是得去看重点谈理论的文章,此处我们只记录本项目部署过程。
背景介绍
之前已实现gitlab-ci自动集成代码,部署到tomcat容器,并推送到阿里云镜像仓库。
此项目使用阿里云的k8s容器服务部署应用。
一系列准备工作,先参考阿里云文档
快速创建Kubernetes集群
https://help.aliyun.com/document_detail/85903.html?spm=a2c4g.11186623.6.555.534c4b4bY7F07R
SSH访问Kubernetes集群
https://help.aliyun.com/document_detail/86491.html?spm=5176.11065259.1996646101.searchclickresult.37524c20dma8gQ
通过以上SSH访问Kubernetes集群的负载均衡地址登录到集群master,进行以下操作
创建secret
为了代码安全,我们将镜像仓库设为私有,私有仓库就需要对k8s的授权,在k8s master建secret
kubectl create secret docker-registry test-secret --docker-server=registry-vpc.cn-shanghai.aliyuncs.com/testimage/test --docker-username=uraliyun_name --docker-password=repo_passwd --docker-email=mail@mail.com
创建挂载卷
由于我项目的特殊需求,在镜像里除了war包外还有一个外部配置文件,我需要将外部配置文件挂载到pod的指定目录下
现将配置文件传到本服务器中,此处先将配置文件做成configmap,在文件所在路径下执行
kubectl create configmap test.properties --from-file test.properties
以yaml文件的形式创建deploy
创建yaml文件
vim test.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: test-backend-tomcat
labels:
app: testbackend
spec:
replicas: 1 #副本集,定义pod数
selector:
matchLabels:
app: testbackend
template:
metadata:
labels: #标签,pod svc等资源是以标签关联,所以不同应用要打上不同标签
app: testbackend
spec:
imagePullSecrets: #创建的secret
- name: test-backend-secret
containers:
- name: test-backend-tomcat
image: registry-vpc.cn-shanghai.aliyuncs.com/testimage/test-backend:1 #镜像
resources: #资源限制,最大值与请求值
limits:
cpu: "0.5"
memory: 100Mi
requests:
cpu: "0.2"
memory: 50Mi
ports:
- containerPort: 8080
volumeMounts: #挂载卷
- name: test-backend-volume
mountPath: /rogueone/testconfig/
- name: test-backend-log-volume #将worker节点上/logs/test-backend做成一个名为test-backend-log-volume的存储卷,再将该存储卷挂载在pod的容器里的/logs下
mountPath: /logs
volumes:
- name: test-backend-volume
configMap:
name: test.properties
- name: test-backend-log-volume
hostPath: #卷的类型是hostpath,即worker节点目录挂载到容器类型的卷
path: /logs/test-backend
type: Directory
以yaml文件生成相关资源,并查看
kubectl create -f appstore.yaml
kubectl get deployment|grep test-backend-tomcat
创建关联以上deploy的nodeport 类型的svc
创建yaml文件
vim test_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 30080 #服务端口,供集群内部访问使用
targetPort: 8080 # 容器端口,容器中提供服务的端口
nodePort: 30001 #节点端口,在节点上对外开放的端口
selector:
app: testbackend #此处标签要与deploy中matchlabel一致
根据以上yaml文件创建对应的服务,并查看
kubectl create -f test_svc.yaml
kubectl get svc |grep nginx-service
此时在k8s的master与worker上都开放了对应的节点端口可以访问到容器服务
通过阿里云负载均衡访问到k8s
创建一个负载均衡,通过不同端口区别不同服务,同一个端口负载到k8s三台master对应的节点端口。
gitlab-ci + k8s 之k8s (二)的更多相关文章
- K8s 部署 Gitlab CI Runner
K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...
- Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明
Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...
- k8s Gitlab CI/CD 之自动编译Docker镜像并推送到指定的Registry
环境介绍: 说明 节点 ip 系统 Gitlab Server git.ds.com 10.0.1.179 CentOS 7.5.1804 Gitlab Runner 10.0.1.178 Cen ...
- 手把手详解持续集成之GitLab CI/CD
一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...
- .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- .NetCore 配合 Gitlab CI&CD 实践 - 单体项目
前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...
- GitLab CI构建SpringBoot-2.3应用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [转]gitlab ci/cd 发布
转自 https://meigit.readthedocs.io/en/latest/configure_gitlab_i18n_and_create_gitlab_ci_with_gitlab_ru ...
- 在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装
简介 从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成.在介绍 ...
随机推荐
- JAVA中static的作用
static表示"全局"."静态"的意思,用来修饰成员变量和成员方法,不过在JAVA中没有全局的意思. 1. 被static修饰的成员变量和成员方法独立于该类的 ...
- HTML5 学习07——Video(视频)Audio(音频)
<video> 元素:提供了 播放.暂停和音量控件来控制视频. width 和 height 属性:控制视频的尺寸 <video> 与</video> 标签之间插入 ...
- [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效
[原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...
- line-height 设置为 1
https://stackoverflow.com/questions/1000398/what-is-line-height1 If no unit is supplied e.g. " ...
- python下的selenium和PhantomJS
一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览 ...
- angular 2 - 001 ng cli的安装和使用
angular cli 创建项目和组件 ng new my-app --skip-install cd my-app cnpm install ng serve localhost:4200 angu ...
- markdownpad目录格式配置
表格语法 | Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | ...
- TFS online build change web.config
概要 TFS online 自动编译时如何修改web.config ref:https://dustinoprea.com/2016/05/06/using-tokenization-token-re ...
- The module is an Android project without build variants, and cannot be built
导入 安卓项目报错 Error:The module 'app' is an Android project without build variants, and cannot be built. ...
- spring mvc 传入中文参数乱码问题解决
一个简单的学习springmvc的demo中,当http请求传入中文参数时,在controller中接受到的参数就已经是乱码了,经百度一番解决方案如下: 1. get请求方式乱码解决 对于get方式, ...