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 (二)的更多相关文章

  1. K8s 部署 Gitlab CI Runner

    K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...

  2. Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明

    Jenkins 使用Jenkins的话,完成的工作主要有如下步骤: 1.从Gogs或Gitlab仓库上拉取代码 2.使用Maven编译代码,打包成jar文件 3.根据jar文件使用相对应的Docker ...

  3. 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 ...

  4. 手把手详解持续集成之GitLab CI/CD

    一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...

  5. .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

    之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...

  6. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  7. .NetCore 配合 Gitlab CI&CD 实践 - 单体项目

    前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...

  8. GitLab CI构建SpringBoot-2.3应用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. [转]gitlab ci/cd 发布

    转自 https://meigit.readthedocs.io/en/latest/configure_gitlab_i18n_and_create_gitlab_ci_with_gitlab_ru ...

  10. 在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装

    简介 从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成.在介绍 ...

随机推荐

  1. C#实战技能之WebApi+Task+WebSocket

    一.背景介绍 环境的局限性: 用户在使用XX客户端的时候,必须每台电脑都安装打印组件,同时由于XX客户端使用的是 websocket进行通讯,这就必须限制用户的电脑浏览器必须是IE10.0+以上版本, ...

  2. DBS:TestSys

    ylbtech-DBS:TestSys 1.返回顶部 1. -- ============================================= -- 测试系统 -- 2018-4-12 ...

  3. 模拟位置 定位 钉钉打卡 运动轨迹 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. 【JVM】垃圾收集器

    程序计数器.Java虚拟机栈.本地方法栈分配的内存是确定的,生命周期与线程同样.所以不须要过多考虑回收问题. 而Java堆和方法区仅仅有运行时才知道有哪些对象被创建,须要多少内存,这部分的内存分配和回 ...

  5. Mysql中的定时任务

    一.说明 后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种: 后台框架自带定时任务.比如php中的Laravel框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解. 服务器操作系 ...

  6. What is a Back Order

    What is a Back Order A back order is a customer order that has not been fulfilled. A back order gene ...

  7. Typora的使用

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,其目标是实现易读易写.我刚刚接触一款简单高效的Markdown编辑器–Typora, ...

  8. v2ray和ss的安装资料整理

    v2ray: 1. https://yuan.ga/v2ray-complete-tutorial/ 2. https://toutyrater.github.io/ 推荐使用:v2ray,会比ss快 ...

  9. C# 批量图片打包下载

    实现点击下载功能,可以一次性下载多个附件.具体实现代码如下 : private void Com_XZTP_FJ(string maiId, string wtfjdz, string CLwtfjd ...

  10. 如何保证修改resolv.conf后重启不恢复?

    如何保证修改resolv.conf后重启不恢复? 修改/etc/resolv.conf,重启网卡后,/etc/resolv.conf恢复到原来的状态. CentOS.redhat下面直接修改/etc/ ...