容器化部署方案

一级目录 1. 容器化部署方案

二级目录1.1. 容器化架构

在这里插入图片描述

二级目录1.2. 整体流程

在这里插入图片描述

流程说明:

在这里插入图片描述

帮助文档
快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图
目录复制

这里写目录标题

一级目录 2. 容器化组件说明

容器化部署流程主要包含容器编排平台Kubesphere、源代码仓库Gitlab、容器镜像仓库Harbor。

二级目录2.1. KubeSphere

三级目录2.1.1. KubeSphere介绍rancher

KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。
作为全栈化容器部署与多租户管理平台,KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。它拥有 Kubernetes 企业级服务所需的最常见功能,例如 Kubernetes 资源管理、DevOps、多集群部署与管理、应用生命周期管理、微服务治理、日志查询与收集、服务与网络、多租户管理、监控告警、事件审计、存储、访问控制、GPU 支持、网络策略、镜像仓库管理以及安全管理等。
KubeSphere 围绕 Kubernetes 集成了各种生态系统的工具,提供了一致的用户体验以降低复杂性。同时,它还具备 Kubernetes 尚未提供的新功能,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。KubeSphere 不仅允许开发人员和 DevOps 团队在统一的控制台中使用他们喜欢的工具,而且最重要的是,这些功能与平台松散耦合,因为他们可以选择是否安装这些可拔插组件。

三级目录2.1.2. KubeSphere架构

在这里插入图片描述

三级目录2.1.3. KubeSphere模块列表

ks-apiserver 整个集群管理的 API 接口和集群内部各个模块之间通信的枢纽,以及集群安全控制。
ks-console 提供 KubeSphere 的控制台服务。
ks-controller-manager 实现业务逻辑的,例如创建企业空间时,为其创建对应的权限;或创建服务策略时,生成对应的 Istio 配置等。
metrics-server Kubernetes 的监控组件,从每个节点的 Kubelet 采集指标信息。
Prometheus 提供群集,节点,工作负载,API对象的监视指标和服务。
Elasticsearch 提供集群的日志索引、查询、数据管理等服务,在安装时也可对接您已有的 ES 减少资源消耗。
Fluent Bit 提供日志接收与转发,可将采集到的⽇志信息发送到 ElasticSearch、Kafka。
Jenkins 提供 CI/CD 流水线服务。
SonarQube 可选安装项,提供代码静态检查与质量分析。
Source-to-Image 将源代码自动将编译并打包成 Docker 镜像,方便快速构建镜像。
Istio 提供微服务治理与流量管控,如灰度发布、金丝雀发布、熔断、流量镜像等。
Jaeger 收集 Sidecar 数据,提供分布式 Tracing 服务。
OpenPitrix 提供应用程序生命周期管理,例如应用模板、应用部署与管理的服务等。
Alert 提供集群、Workload、Pod、容器级别的自定义告警服务。
Notification 是一项综合通知服务; 它当前支持邮件传递方法。
Redis 将 ks-console 与 ks-account 的数据存储在内存中的存储系统。
MySQL 集群后端组件的数据库,监控、告警、DevOps、OpenPitrix 共用 MySQL 服务。
PostgreSQL SonarQube 和 Harbor 的后端数据库。
OpenLDAP 负责集中存储和管理用户账号信息与对接外部的 LDAP。
Storage 内置 CSI 插件对接云平台存储服务,可选安装开源的 NFS/Ceph/Gluster 的客户端。
Network 可选安装 Calico/Flannel 等开源的网络插件,支持对接云平台 SDN。

三级目录2.1.4. DevOps介绍

什么是 KubeSphere DevOps 系统
基于 Jenkins 的 KubeSphere DevOps 系统是专为 Kubernetes 中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮助开发和运维团队用非常简单的方式构建、测试和发布应用到 Kubernetes。它还具有插件管理、Binary-to-Image (B2I)、Source-to-Image (S2I)、代码依赖缓存、代码质量分析、流水线日志等功能。
DevOps 系统为用户提供了一个自动化的环境,应用可以自动发布到同一个平台。它还兼容第三方私有镜像仓库(如 Harbor)和代码库(如 GitLab/GitHub/SVN/BitBucket)。它为用户提供了全面的、可视化的 CI/CD 流水线,打造了极佳的用户体验,而且这种兼容性强的流水线能力在离线环境中非常有用。

二级目录2.2. Gitlab

Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。是目前世界上最先进的分布式版本控制系统。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,可以部署为本地私有化仓库。

二级目录2.3. Harbor

三级目录2.3.1. Harbor介绍

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

三级目录2.3.2. Harbor功能

 基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
 镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
 图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
 AD/LDAP:-Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
 RESTful API: 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
 部署简单:提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

一级目录3. 安装配置

本章节主要说明容器化平台所有组件的安装、配置。

二级目录3.1. 环境准备

 服务器配置:2CPU,8GB内存,100GB硬盘,10Mbps带宽或更高配置。
 操作系统:Centos7.8
 需要考虑数据量的增加,代码仓库、容器镜像仓库应该支持很容易的扩容。
 关闭防火墙、关闭selinux
 服务器可以访问公网。

二级目录3.2. Gitlab安装

三级目录3.2.1. 软件安装

#1.ssh登录到服务器
#2.安装基础依赖
yum install -y curl policycoreutils-python openssh-server
#3.安装启动postfix用于发送通知邮件
yum install postfix
systemctl enable postfix
systemctl start postfix
#4.添加gitlab包依赖
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
#5.安装gitlab-ce社区开源版,默认安装到/opt/gitlab
yum install -y gitlab-ce
安装完成后可以使用服务器IP直接访问(默认端口80)
默认安装目录:/opt/gitlab

三级目录3.2.2. 配置优化

配置文件:/etc/gitlab/gitlab.rb,涉及修改的主要配置项如下:
#gitlab地址,访问或clone代码等操作时使用
external_url ‘http://49.233.1.65’

邮件服务器配置

#开启smtp服务
gitlab_rails['smtp_enable'] = true
#邮件smtp服务器
gitlab_rails['smtp_address'] = "smtp.qq.com"
#smtp端口,默认465
gitlab_rails['smtp_port'] = 465
#发件人email地址
gitlab_rails['smtp_user_name'] = "xxx@foxmail.com"
#发件人邮件密码
gitlab_rails['smtp_password'] = "xxxxxxxxxx"
#发件服务器域名
gitlab_rails['smtp_domain'] = "qq.com"
#smtp验证方式,默认即可
gitlab_rails['smtp_authentication'] = "login"
#激活tls加密,true即可
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
#激活邮件服务
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'myjoylink@foxmail.com'
#发送邮件的发件人显示名称
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'

#数据备份目录,可以修改为指定目录
gitlab_rails['backup_path'] = "/data/gitlab/backups"
#数据备份保留时间,单位:秒,超过该时间的备份文件会被删除
gitlab_rails['backup_keep_time'] = 1209600
#数据存储目录,目录不能包含符号链接(软链接)
git_data_dirs({
"default" => {
"path" => "/data/gitlab/git-data"
}
})

相关命令:

#服务启动
gitlab-ctl start
#服务关闭
gitlab-ctl stop
#服务重启
gitlab-ctlrestart
#修改配置后初始化
gitlab-ctlreconfigure
#开机自启动
systemctlenablegitlab-runsvdir.service

二级目录3.3. Harbor安装

三级目录3.3.1. 安装需求

VMware官方提供了Harbor安装运行需要依赖docker和docker-compose环境,版本要求:

docker 17.06.0-ce+
docker-compose 1.18.0+
安装:
yum install -y docker-ce docker-compose
#查看版本
docker --version
docker-compose --version

三级目录3.3.2. 安装配置

Harbor核心组件:
在这里插入图片描述

Harbor下载地址:https://github.com/goharbor/harbor/releases
分为在线安装版本和离线安装版本,建议通过迅雷等工具直接下载离线版本:

harbor-offline-installer-vx.x.x.tgz
#解压安装包
tarzxfharbor-offline-installer-vx.x.x.tgz
cd harbor

#修改配置文件:vimharbor.yml
hostname:#改为访问harbor的公网IP地址/域名
http:
port: 80#默认使用80端口,可以修改
harbor_admin_password: Harbor12345#默认初始登录密码,记住该密码
data_volume: /data/harbor#数据存储目录,根据实际配置修改为其他目录
#执行安装脚本
./install.sh
#查看组件启动情况
docker-compose ps

harbor服务操作命令,在harbor安装目录

docker-compose down -v#停止服务
docker-compose up -d#启动服务

#因为harbor使用http协议,而docker默认使用https,需要修改docker配置
vim/etc/docker/daemon.json#增加以下配置并重启docker:
{“insecure-registries”: [“harbor ip”]}
systemctl daemon-reload
systemctl restart docker

二级目录3.4. Kubesphere安装

官方安装参考:https://kubesphere.io/zh/docs/quick-start/all-in-one-on-linux/

三级目录3.4.1. 环境准备

1.KubeSphere 需要某些端口用于服务之间的通信,如果启用了防火墙规则,则需要确保基础组件可以通过以下特定端口相互通信:
在这里插入图片描述

2.开发测试环境使用all-in-one模式安装即可,可以快速部署 KubeSphere 和 Kubernetes。
节点必须能够通过 SSH 连接,节点上可以使用 sudo/curl/openssl 命令。推荐在线安装,要求服务器可以连通外网。
3.安装依赖项:yum install -y socat conntrack ebtables ipset
4.网络和DNS配置:必须确保 /etc/resolv.conf 中的 DNS 配置是可用的。

三级目录 3.4.2. 下载安装脚本

下载地址:https://github.com/kubesphere/kubekey/releases
下载最新release版即可,当前是1.0.1:

curl -sfL https://get-kk.kubesphere.io | VERSION=v1.0.1 sh -

#添加可执行权限

chmod +x kk

三级目录 3.4.3. 开始安装

#kubernetes使用v1.17.9版本,kubesphere使用v3.0.0版本,可以根据实际情况修改。
#当前支持的 Kubernetes 版本: v1.15.12, v1.16.13, v1.17.9 (默认), v1.18.6。
# 执行以下命令即可开始安装:

./kk create cluster --with-kubernetes v1.17.9 --with-kubesphere v3.0.0

执行安装命令后,将看到下面的表格,用于环境检查:
在这里插入图片描述

确保满足上面标记y的安装需求后,输入yes继续安装。

三级目录 3.4.4. 验证安装结果

当看到以下输出时,表明安装已经完成(如果未能正常安装完成,请分析输出的报错信息):
在这里插入图片描述
输入以下命令以检查安装结果:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

输出会显示 Web 控制台的 IP 地址和端口号,默认的 NodePort 是 30880。现在可以使用默认的帐户和密码(admin /P@88w0rd)通过 IP:30880 访问控制台:
#####################################################

Welcome to KubeSphere!

#####################################################

Console: http://192.168.0.2:30880
Account: admin
Password: P@88w0rd

NOTES:

  1. After logging into the console, please check the
    monitoring status of service components in
    the “Cluster Management”. If any service is not
    ready, please wait patiently until all components
    are ready.
  2. Please modify the default password after login.

#####################################################
https://kubesphere.io 20xx-xx-xx xx:xx:xx
#####################################################
检查各个组件状态:
方法1:
#查看所有pod是否running状态

kubectl get pod --all-namespaces

在这里插入图片描述

方法2:登录kubesphere web控制台检查组件状态,访问:平台管理→集群管理→服务组件:
在这里插入图片描述

三级目录 3.4.5. 开启DevOps组件

kubesphere默认只开启核心组件,以下是可选组件默认未开启。
在这里插入图片描述
本文档需要用到KubeSphere DevOps 系统,所以下面讲述在kubesphere安装后启用DevOps组件的方法:

  1. 以 admin 身份登录控制台,点击左上角的平台管理,选择集群管理。
    在这里插入图片描述

  2. 点击自定义资源 CRD,在搜索栏中输入 clusterconfiguration,点击搜索结果查看其详细页面。

  3. 在资源列表中,点击 ks-installer 右边的三个点,选择编辑配置文件。
    在这里插入图片描述

  4. 在该 YAML 文件中,搜寻到 devops,将 enabled 的 false 改为 true。完成后,点击右下角的更新,保存配置。
    devops:
    enabled: true # Change “false” to “true”

  5. 验证devops组件的安装
    方法1:在web控制台上验证
    在这里插入图片描述

方法2:通过kubectl命令验证
执行以下命令来检查 Pod 的状态:

kubectl get pod -n kubesphere-devops-system

如果组件运行成功,输出结果如下:

NAME                                       READY   STATUS    RESTARTS   AGE
ks-jenkins-68b8949bb-jcvkt                 1/1     Running   0          1h3m
s2ioperator-0                              1/1     Running   1          1h3m
uc-jenkins-update-center-8c898f44f-hqv78   1/1     Running   0          1h14m

一级目录4. 自动部署配置

在这里插入图片描述

二级目录4.1. 步骤一:kubesphere基础配置

三级目录4.1.1. 账号权限配置

系统分级和角色介绍:
KubeSphere 的多租户系统分三个层级,即群集、企业空间和项目。KubeSphere 中的项目等同于 Kubernetes 命名空间。
集群:研发团队内部使用,一般使用单集群即可;
企业空间:是一个组织项目和 DevOps 工程、管理资源访问权限以及在团队内部共享资源等的逻辑单元,可以作为团队工作的独立工作空间。可以根据实际场景创建多个企业空间(不直接使用系统空间)。
项目:可以基于项目划分诸如开发环境、测试环境、生产环境,各项目指定一定的资源配额。
在这里插入图片描述

创建账号:
在这里插入图片描述

三级目录4.1.2. 项目和DevOps工程配置

  1. 企业空间配置
    以admin登录系统,进入工作台→企业空间,创建企业空间,指定空间管理员:
    在这里插入图片描述

进入创建好的企业空间,邀请成员:
在这里插入图片描述

其中企业成员有四个角色:
在这里插入图片描述

邀请pro-admin账号角色为ws-demo-self-provisioner,pro-user账号角色为ws-demo-viewer,最终是如下三个账号:
在这里插入图片描述

其中viewer角色根据实际情况邀请开发、测试等多个账号。

  1. 项目配置
    以pro-admin项目管理员账号登录,来进行项目管理。项目概念对应k8s中的namespace。
    工作台→企业空间→项目管理,创建项目,这里的项目名称需要和后续容器部署配置文件中指定的namespace一致:

在这里插入图片描述

在这里插入图片描述

进入新建的项目,邀请项目成员,pro-user授予operator角色(项目维护者,可以管理项目下除用户和角色之外的资源):
在这里插入图片描述

  1. DevOps工程配置
    进入上面新建的企业空间,DevOps工程→创建:
    在这里插入图片描述

进入新建的DevOps工程中,点击工程成员,邀请pro-user账号为operator角色:
在这里插入图片描述

后续将使用pro-user账号创建配置流水线等操作。

三级目录4.1.3. 组件凭证配置

容器部署流程中访问各组件时需要独立的账号密码,所以需要提前配置各凭证信息,避免在配置文件或脚本中直接引用明文密码。主要包含:k8s集群、代码仓库、镜像仓库、sonarqube。
进入上面创建的DevOps工程→工程管理→凭据页面,可以创建凭据:

  1. k8s集群kubeconfig:
    在这里插入图片描述

  2. Gitlab代码仓库:
    在这里插入图片描述

  3. Harbor镜像仓库:
    在这里插入图片描述

  4. sonarqube:如果用到代码质量分析则需要配置,需要先在sonarqube中获取密钥:

在这里插入图片描述

二级目录4.2. 步骤二:Git源码配置文件

配置文件包含:
 jenkinsfile:整体流程配置文件,定义以上全部流程;
 Dockerfile:容器镜像打包配置文件,定义容器本身全部配置,包含基础环境、工作目录、启动命令等。
 deployment:容器部署运行配置文件,定义部署、启动配置,包含部署目录、启动端口、环境变量、镜像地址等。
 service:容器部署服务配置文件,定义k8s服务配置,包括服务基本信息、对外端口等配置。

所有配置文件都需要放在源代码中,具体路径:
Jenkinsfile:源代码项目根目录;
Dockerfile:源代码项目根目录;
deployment.yaml、service.yaml:根目录下的deploy/dev/、deploy/test/、deploy/prod/等,不同环境配置不同目录;
注意:如果一个项目存在多模块情况,那么每个模块都需要配置单独的以上配置文件,这样的话上面提到的根目录就变成了各模块目录。

以下是配置文件具体配置信息说明,其中红色字体部分需要根据实际项目情况进行修改:

三级目录4.2.1. Jenkinsfile

前端nodejs项目:

pipeline {
  agent {
    node {
      label 'nodejs'
    }
  }
  #环境变量,用于流水线各阶段使用的必需参数,研发中心项目默认即可,产线根据各自环境进行修改
  environment {
    #gitlab凭据
    GITLAB_CREDENTIAL_ID = 'gitlab-id'
    #k8s凭据
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    #项目名称
    APP_NAME = 'devops-docs-sample'
    #镜像仓库地址
    REGISTRY = '49.233.127.116'
    #harbor仓库凭据
    HARBOR_CREDENTIAL_ID = 'harbor-id'
    #harbor仓库项目名称
    HARBOR_NAMESPACE = 'harbor-demo'
  }

  stages {
    #clone代码到本地
    stage('checkout scm') {
      steps {
        checkout(scm)
      }
    }
    
    #获取相关依赖
    stage('get dependencies') {
      steps {
        container('nodejs') {
          sh 'npm install -g cnpm --registry=https://registry.npm.taobao.org'
          sh 'cnpm i --no-package-lock'
        }

      }
    }
    #编译,打包镜像,推送到镜像仓库
    stage('build & push snapshot') {
      steps {
        container('nodejs') {
          #构建打包
          sh 'yarn build'
          #打包镜像
          sh 'docker build -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
          #获取harbor仓库的账号密码
          withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID")]) {
            #登录harbor镜像仓库
            sh 'echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin $REGISTRY'
            #推送镜像到仓库
            sh 'docker push  $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER '
          }
        }
      }
    }
    #拉取并部署容器镜像
    stage('deploy to dev') {
      when{
        branch 'master'
      }
      steps {
        kubernetesDeploy(configs: 'deploy/dev/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
      }
    }
  }
}

java后端服务:

pipeline {
  agent {
    node {
      label 'maven'
    }
  }

    parameters {
        string(name:'TAG_NAME',defaultValue: '',description:'')
    }

    environment {
        HARBOR_CREDENTIAL_ID = 'harbor-id'
        GITLAB_CREDENTIAL_ID = 'gitlab-id'
        KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
        REGISTRY = '49.233.127.116'
        HARBOR_NAMESPACE = 'harbor-demo'
        GITLAB_ACCOUNT = 'test'
        APP_NAME = 'devops-java-sample'
        SONAR_CREDENTIAL_ID= 'sonar-token'
    }

    stages {
        stage ('checkout scm') {
            steps {
                checkout(scm)
            }
        }

        stage ('build & push') {
            steps {
                container ('maven') {
                    sh 'mvn -o -Dmaven.test.skip=true -gs `pwd`/configuration/settings.xml clean package'
                    sh 'docker login -u admin -p hy7Gk2ocK $REGISTRY'
                    sh 'docker build --no-cache -f Dockerfile-on-prem -t $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
                    withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
                        sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
                        sh 'docker push  $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
                    }
                }
            }
        }

        stage('deploy to dev') {
          when{
            branch 'sonarqube'
          }
          steps {
            input(id: 'deploy-to-dev', message: 'deploy to dev?')
            kubernetesDeploy(configs: 'deploy/dev/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
          }
        }
    }
}

三级目录4.2.2. Deployment

apiVersion: apps/v1  #api版本,默认即可
kind: Deployment  #部署类型Deployment支持多副本部署
metadata:  #元数据
  labels:   # Deployment的标签,key-value格式,根据实际情况修改即可,不一定是以下内容
    app: kubesphere  #应用名称
    component: ks-sample-dev  #组件名称
    tier: backend  #组件类型,前端、后端等
  name: ks-sample-dev  #必需,该工作负载的名称,将显示在kubesphere列表中。
  namespace: kubesphere-sample-dev  #所属项目名称(k8s命名空间)
spec:
  progressDeadlineSeconds: 600  #进程卡住的确认时间
  replicas: 1  #副本数1
  selector:  #选择器,根据标签匹配对应pod
    matchLabels:
      app: kubesphere
      component: ks-sample-dev
      tier: backend
  template:  #容器模板,指定要运行的容器的配置
    metadata:  #容器本身的标签
      labels:
        app: kubesphere
        component: ks-sample-dev
        tier: backend
    spec:
      containers:
        - env:  #传入容器的系统环境标量
            - name: CACHE_IGNORE
              value: js|html
            - name: CACHE_PUBLIC_EXPIRATION
              value: 3d
          image: $REGISTRY/$HARBOR_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER  #容器镜像路径
          imagePullPolicy: Always  #镜像拉取策略,总是重新拉取镜像
          name: ks-sample  #容器名称
          ports:
            - containerPort: 8080  #容器端口,需要修改,同一pod内不同
              protocol: TCP  #协议,一般默认TCP即可
          resources:  #资源限制,无特殊要求默认即可
            limits:
              cpu: 300m
              memory: 600Mi
            requests:
              cpu: 100m
              memory: 100Mi
          terminationMessagePath: /dev/termination-log  #容器挂掉后的日志记录
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30

三级目录4.2.3. Service

apiVersion: v1
kind: Service
metadata:
  labels:
    app: kubesphere
    component: ks-docs-sample-dev  #部署名称
  name: ks-docs-sample-dev  #服务名称,使用实际服务的名称
  namespace: kubesphere-docs-dev  #k8s命名空间名称/kubesphere项目名称,需要修改
spec:
  ports:
    - name: http
      port: 80  #服务端口
      protocol: TCP  #协议,一般都是tcp即可
      targetPort: 80  #容器端口
      nodePort: 30860  #节点端口
  selector:  #标签匹配,service会被代理到匹配以下标签的pod上,与下面pod配置匹配
    app: kubesphere
    component: ks-docs-sample-dev
    tier: backend
  sessionAffinity: None  #是否会话保持,没有特殊需求使用None即可
  type: NodePort  #外网访问类型,使用nodeport

三级目录4.2.4. Dockerfile

#制定容器基础镜像
FROM harbor.devops.kubesphere.local:30280/library/java:openjdk-8-jre-alpine
#指定工作目录,根据实际情况选择,例如这里是jar包存放目录
WORKDIR /home
#拷贝jar包到工作目录
COPY target/*.jar /home
#执行命令启动服务
ENTRYPOINT java -jar *.jar

三级目录4.2.5. 节点绑定配置

标签(label)是K8S系统的一个核心概念,以key/value键值对的形式附加到各种对象上,如Pod、Service、RC、Node等,定义了这些对象的可识别属性,用来对它们进行管理和选择。
指定容器运行的服务器节点,通过给节点添加标签并在容器配置文件中指定筛选器的方式实现,主要配置如下:

  1. 添加节点标签
    进去kubesphere的平台管理→集群管理→节点管理→集群节点,右侧选择需要指定的节点进入节点详情页面,选择更多操作→编辑标签:
    在这里插入图片描述

可以看到已经预定义了一些系统本身使用的标签,不修改已有标签,直接添加我们需要的内容即可,比如这里我添加了一个key为service-type的标签,用于标识服务类型(前端服务、后端服务等),这里的key和value可以任意定义:

在这里插入图片描述

  1. k8s配置文件配置
    容器工作负载配置文件deployment.yaml,spec.template.spec中添加以下配置即可:
spec:
nodeSelector:
service-type: workflow
其中service-type: workflow就是上面第1步中为节点定义的标签。

二级目录4.3. 步骤三:kubesphere流水线配置

Pipeline 是一系列的插件集合,可以通过组合它们来实现持续集成和持续交付的功能。
进入上面创建的DevOps工程→流水线,创建流水线,需要用到上面配置好的配置文件、凭证:

  1. 创建流水线,填写名称、描述等:

  2. 指定代码项目仓库地址和选择凭证,这里使用的是Gitlab,选择Git:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 下一步进入高级设置:
    主要指定Jenkinsfile文件路径,如果放在根目录则指定文件名即可,否则指定具体目录(路径中则填写基于根目录的相对路径),例如:
    A. 如果Jenkinsfile文件放在工程根目录,则流水线配置中的脚本路径直接填写文件名称即可;
    在这里插入图片描述

B. 如果Jenkinsfile文件放在工程的jenkins目录下,则流水线配置中的脚本路径需要填写jenkins/Jenkinsfile
在这里插入图片描述

其他选项可以默认:
在这里插入图片描述

二级目录4.4. 步骤四:kubesphere流水线运行

进入上面建好的流水线,点击运行,选择分支并输入预设的参数,点击确定即可开始流水线运行任务:
在这里插入图片描述

开始运行后,点击运行任务进入详细信息页面,流水线会开始准备环境,正常可能需要几分钟,然后会看到运行流程,点击查看日志,可以看到每一步骤的执行记录:
在这里插入图片描述

二级目录4.5. 步骤五:服务测试验证

进入工作台→企业空间→项目管理→选择项目→服务:
在这里插入图片描述

这里的服务名称和上面提到的服务配置文件中定义的名称一致。点击服务名称进入详细信息,可以看到容器运行后的对外IP和端口:

使用IP和端口即可访问运行的服务。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值