一、基础环境
机器配置:
kvm虚拟机(8C12GB)资源有限只能搞这个配置
这里资源有限采用单机模式,ip地址192.168.20.43
环境变量设置
#/etc/profile //新增如下
export KKZONE=cn
#source /etc/profile
kubesphere安装方式
./kk create cluster --with-kubernetes v1.21.14 --with-kubesphere v3.3.2
二、初始化的配置
1、开启"应用商店"和"devops"
平台管理--集群管理--定制资源定义--搜索(clusterconfiguration)点击进去--ks-installer(编辑YAML)
openpitrix:
store:
enabled: true
----------------
devops:
enabled: true
jenkinsMemoryLim: 4Gi
jenkinsMemoryReq: 2Gi
jenkinsVolumeSize: 4Gi
//devops的内存资源根据实际情况设置,不然机器会卡死
点击保存之后
在master上执行
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
直到安装完成
2、创建自己的企业空间
工作台--企业空间(创建)--我这里创建(yiyouhui)
3、创建操作用户(这个权限要谨慎),不要以为权限高就为所欲为,权限高了反而啥也看到不到,这个是比较坑的地方,这里创建两个用户
3.1 project-admin
3.2 project-regular
三、添加应用仓库
在自己的空间下创建应用仓库
工作台--yiyouhui--应用管理--应用仓库---添加(Helm Charts - KubeSpherehttps://charts.kubesphere.io/main)
四、创建gitlab和harbor仓库
用project-regular用户重新登录kubesphere
项目--创建项目(我这里用dayi-devops)--创建完成之后点击项目名字进去--应用负载--应用--创建
1、gitlab
1.1 访问应用负载下的应用,然后点击创建
1.2 在出现的对话框中,选择从应用模板。
1.3 从下拉菜单中选择 main,然后点击 gitlab
1.4 在应用信息选项卡和Chart 文件选项卡,可以看到控制台的默认配置。点击安装继续。
1.5 在基本信息页面,可以看到应用名称、应用版本以及部署位置。本教程使用 4.2.3 [13.2.2] 版本。点击下一步继续。
1.6 在应用设置页面,使用以下配置替换默认配置,然后点击安装。
global:
hosts:
domain: dayi-devops.svc.cluster.local
gitlab-runner:
install: false
gitlab:
webservice:
helmTests:
enabled: false
###dayi-devops 指的是部署 GitLab 的项目名称,请确保使用您自己的项目名称。
1.7 等待 GitLab 正常运行。
1.8 访问工作负载,可以看到为 GitLab 创建的所有部署和有状态副本集。(可能需要过一段时间才能看到所有部署和有状态副本集正常运行。)
1.9 获取hosts信息(点击应用gitlab-jro1w3) 进去
1.10 绑定hosts信息
192.168.20.43 gitlab.dayi-devops.svc.cluster.local
1.11 获取登录密码(默认是root用户的)
选择配置 > 保密字典,在搜索栏输入 gitlab-initial-root-password,然后按下键盘上的回车键来搜索密钥。
点击密钥访问其详情页,然后点击右上角的 icon 查看密码。请确保将密码进行复制。
1.12 登录上传(如下的示例的代码,当然也可以换成自己的应用的代码)
https://codeload.github.com/kubesphere/devops-java-sample/zip/refs/heads/master
1.13 这样gitlab就设置完毕了
2、harbor
1.1 访问应用负载下的应用,然后点击创建
1.2 在出现的对话框中,选择从应用模板。
1.3 从下拉菜单中选择 main,然后点击 harbor
1.4 在应用信息选项卡和Chart 文件选项卡,可以看到控制台的默认配置。点击安装继续。
1.5 在应用设置页面,使用以下配置替换默认配置,然后点击安装。(做如下变更)
expose:
type: nodePort //由ingress换成nodePort
tls:
enabled: false //tls关闭
certSource: auto
auto:
commonName: 192.168.20.43 //我这里写的是master1的ip地址
--------------------------------------------------
externalURL: 'http://192.168.20.43:30002' //设置成自己的ip地址,端口一般用30002
--------------------------------
其他的参数用默认的即可
切记方式的时候的地址要和externalURL定义的地址是一样的,不然是无法登录的
默认的登陆账号:admin,密码:Harbor12345
1.6 点击安装直到安装完成即可
1.7 上传测试的镜像
1、修改docker配置支持http访问访问harbor
[root@master1 ~]# cat /etc/docker/daemon.json
{
"log-opts": {
"max-size": "5m",
"max-file":"3"
},
"registry-mirrors": ["https://dgxy4fzg.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries":["192.168.20.43:30002"]
}
2、systemctl restart docker.service
这个步骤会触发整个kubesphere和k8s环境重启,需要等待一下所有步骤完成
3、上传镜像
#docker pull openjdk:8-jre-alpine
#docker login -u 'admin' -p 'Harbor12345' http://192.168.20.43:30002
#docker tag f7a292bbb70c 192.168.20.43:30002/library/java:openjdk-8-jre-alpine
#docker push 192.168.20.43:30002/library/java:openjdk-8-jre-alpine
五、master主机增加gitlab和harbor的hosts信息
192.168.20.43 gitlab.dayi-devops.svc.cluster.local
192.168.20.43 harbor.dayi-devops.svc.cluster.local
六、修改coredns增加hosts信息
#kubectl edit configmap coredns -n kube-system -o yaml
#####
hosts {
192.168.20.43 gitlab.dayi-devops.svc.cluster.local
192.168.20.43 harbor.dayi-devops.svc.cluster.local
fallthrough
}
####
这个变更需要几分钟,等待完成之后再运行devios-cicd流水线
七、创建测试的项目(这个项目名字需要和流水线中配置的一样)
这里是 kubesphere-sample-dev
这个是在gitlab里定义的(根据自己的实际情况调整,就是这个命名空间)
八、创建流水线
参考的是官方的文档:使用图形编辑面板创建流水线
步骤就不一一的赘述了
需要注意的是在高级设置里这么写
1、字符串:
REGISTRY http://192.168.20.43:30002 //镜像仓库地址
2、字符串(比如我的地址192.168.20.43:30002/library/openjdk-8-jre-alpine:SNAPSHOT-19)
DOCKERHUB_NAMESPACE library //您的 Docker Hub 帐户或该帐户下的组织名称。
3、字符串
APP_NAME openjdk-8-jre-alpine //应用名称。
需要注意的是提前创建好凭证
devops---自己的项目---Devops项目设置--凭证
1、demo-kubeconfig
类型选择:kubeconfig即可
2、harbor-id
类型选择:用户名和密码
正常写harbor服务的账号密码即可
3、gitlab-id
类型选择:用户名和密码
正常写gitlab服务的账号密码即可
需要注意的是 需要执行mvn命令的步骤,首先要“指定容器”,里边填写maven
我这里主要分如下步骤
1、Checkout SCM
代理:none
git
url http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample.git
凭证 ID gitlab-id
branch master
2 unit test
指定容器
maven
shell 脚本
script mvn clean -gs `pwd`/configuration/settings.xml test
3、Build and Push
任务
指定容器
maven
shell 脚本
script mvn -Dmaven.test.skip=true clean package
shell 脚本
script docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .
添加凭证
凭证 ID harbor-id
密码变量 DOCKER_PASSWORD
用户名变量 DOCKER_USERNAME
shell 脚本
script echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
shell 脚本
script docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER
4、Artifacts
任务
保存制品
制品 target/*.jar
5、Deploy to Dev
任务
审核
message project-admin
审核者
指定容器
maven
添加凭证
凭证 ID demo-kubeconfig
variable KUBECONFIG_CONTENT
shell 脚本
script mkdir ~/.kube echo "$KUBECONFIG_CONTENT" > ~/.kube/config envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f - envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -
附加Jenkinsfile
pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('Checkout SCM') {
agent none
steps {
git(url: 'http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample.git', credentialsId: 'gitlab-id', branch: 'master', changelog: true, poll: false)
}
}
stage('unit test') {
agent none
steps {
container('maven') {
sh 'mvn clean -gs `pwd`/configuration/settings.xml test'
}
}
}
stage('Build and Push') {
agent none
steps {
container('maven') {
sh 'mvn -Dmaven.test.skip=true clean package'
sh 'docker build -f Dockerfile-online -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .'
withCredentials([usernamePassword(credentialsId : 'harbor-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER'
}
}
}
}
stage('Artifacts') {
agent none
steps {
archiveArtifacts 'target/*.jar'
}
}
stage('Deploy to Dev') {
agent none
steps {
input(message: 'project-admin', submitter: '')
container('maven') {
withCredentials([kubeconfigContent(credentialsId : 'demo-kubeconfig' ,variable : 'KUBECONFIG_CONTENT' ,)]) {
sh '''mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < deploy/dev-ol/devops-sample-svc.yaml | kubectl apply -f -
envsubst < deploy/dev-ol/devops-sample.yaml | kubectl apply -f -
'''
}
}
}
}
}
}
九、运行流水线即可
退出当前用户,登录 project-admin用户审核流程就行了
最后验证服务就行了
注意事项:
1、创建gitlab和harbor服务的时候都采用应用模板即可,gitlab创建是时候空间名字注意替换,harbor注意不要开tls,并且配置nodePort模式
2、各个节点包括主节点上,都要配置hosts信息+docker的配置都需要修改
3、codedns的配置千万不要遗漏,比如在流水线的时候会报错,gitlab的域名无法解析
4、流水线报错mvn命令不存在的原因,是创建流水线步骤的时候没指定容器填写maven,这个千万不可以遗漏
5、示例代码的deployment是有问题的,需要根据实际情况调整,比如
http://gitlab.dayi-devops.svc.cluster.local:31139/root/devops-java-sample/-/blob/master/deploy/dev-ol/devops-sample.yaml
image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME$BUILD_NUMBER
去掉多余的"-"线