赞
踩
关于devops的理论知识网上很多,这里就简单概括一下devops这张图吧( •̀ ω •́ )✧
devops过程说明
- 1、PLAN 开发团队根据客户的目标指定开发计划
-
- 2、CODE 根据"PLAN(开发计划)" 开始编写代码,需要将不同版本("稳定"/"最新")的代码存储在一个库中
-
- 3、Build 代码编写完成后,需要将代码构建打包并且运行
-
- 4、Test 成功构建项目后,需要测试代码是否存在BUG或者错误
-
- 5、DEPLOY 代码经过"手动调试"和"自动化测试"后,认为可以部署了,选一个稳定版本部署
-
- 6、OPERATE 运维团队将代码部署到生产环境中
-
- 7、MONITOR 项目部署上线后,需要持续的监控产品
-
- 8、INTEGRATE 然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DEVOPS的核心(ci/cd)
我们现在实现devops 通常使用的是jenkins的工具,使用流程如下
- 1、开发人员将编写好的代码上传到gitlab代码仓库
-
- 2、我们通过手动/自动的形式通过Jenkins将代码拉取下来
-
- 3、jenkins会通过maven工具开始对代码构建
-
- 4、如果编译没问题,jenkins会将打好的jar包封装成镜像发给harbor镜像仓库
-
- 5、jenkins再去通知服务器端通过docker/k8s拉取镜像并运行服务
- Centos7.6 操作系统
-
- 内核版本4.4
-
- K8S集群1.22.2
-
- 单台 8C16G
kubectl create ns devops
- //这里的vm-16-16-centos主机名换成你要运行的ip地址
- kubectl label node vm-16-16-centos app=jenkins
- //登陆master节点创建devops部署目录(存放各种yaml)
- mkdir -p /apps/devops_setup
- cd /apps/devops_setup
vi gitlab-dev.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: gitlab-ds
- namespace: devops
- spec:
- selector:
- matchLabels:
- app: my-gitlab
- template:
- metadata:
- labels:
- app: my-gitlab
- spec:
- nodeSelector:
- app: jenkins
- volumes:
- - name: gitlab-config
- hostPath:
- path: /apps/devops_setup/data/gitlab/config
- type: DirectoryOrCreate
- - name: gitlab-logs
- hostPath:
- path: /apps/devops_setup/data/gitlab/logs
- type: DirectoryOrCreate
- - name: gitlab-data
- hostPath:
- path: /apps/devops_setup/data/gitlab/data
- type: DirectoryOrCreate
- containers:
- - name: gitlab
- image: gitlab/gitlab-ce:latest
- ports:
- - name: http
- containerPort: 80
- volumeMounts:
- - name: gitlab-config
- mountPath: /etc/gitlab
- - name: gitlab-logs
- mountPath: /var/log/gitlab
- - name: gitlab-data
- mountPath: /var/opt/gitlab
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: gitlab-svc
- namespace: devops
- spec:
- ports:
- - port: 80
- targetPort: http
- nodePort: 30001
- # 拥有此标签的pod都属于该服务
- selector:
- app: my-gitlab
- # 默认ClusterIp 改为NodePort 暴露外部端口
- type: NodePort
部署
kubectl apply -f gitlab-dev.yaml
查看pod状态
kubectl -n devops get pod
我们上面暴露的nodePort端口是30001,我这里是云服务器直接访问即可
http://101.43.4.210:30001/users/sign_in
等一会~
cat /apps/devops_setup/data/gitlab/config/initial_root_password | grep Password | grep -vE '^$|#' | awk '{print $2}'
返回
- //每个人都不一样,别直接黏贴
- eMe0oq4PQqGGEA4Y0UUbamE4hPyvSyY53Lm1tnnxMoc=
- #默认登陆用户
- root
-
- #获取的密码
- eMe0oq4PQqGGEA4Y0UUbamE4hPyvSyY53Lm1tnnxMoc=
- //我这里将密码修改成这个
- 12345678qq
创建一个mytest 的项目,属于公开项目所有人都可以拉取
新建项目发现克隆项目的地址很奇怪,他这里实际上是pod的名称
http://gitlab-ds-7dcb446f4c-b8kqd/root/mytest.git
git@gitlab-ds-7dcb446f4c-b8kqd:root/mytest.git我们无法通过这样的地址去克隆关联项目,所以要做一些修改
- //切换到gitlab代码仓库挂载的配置目录
- cd /apps/devops_setup/data/gitlab/config/
vi gitlab.rb
- 33 external_url 'http://101.43.4.210:30001' //修改
- 66 gitlab_rails['gitlab_ssh_host'] = '101.43.4.210' //修改
说明
- 这里说一下为什么要设置成30001端口
-
- 30001是我们nodePort模式对外暴露gitlab服务的端口
-
- 用户通过链接外部暴露的30001拉取代码
- (git clone http://101.43.4.210:30001/root/mytest)
-
-
- 但是我们如果在gitlab中没有配置端口,则会使用默认的80端口
-
- 在拉取的时候就发现变成了,如下模式
- (git clone http://101.43.4.210/root/mytest)
-
- 我们宿主机的80端口并没有提供服务,所以必然拉取失败
-
- 这里我们声明gitlab的端口是30001,那么容器内部的端口也会变成30001
-
- 我们需要修改一下gitlab的yaml文件,将内部暴露的端口修改为30001才可以使用
当然,也可以不用30001端口,外部暴露80也能用,不过我80端口有服务在跑
9、重载gitlab配置
- //登陆pod
- kubectl -n devops exec -it gitlab-ds-7dcb446f4c-b8kqd -- bash
-
-
- //重载配置并重启
- gitlab-ctl reconfigure && gitlab-ctl restart
上面有说,我们这里改完配置重启后,容器内部提供服务的端口就变成30001
此时我们外部暴露的30001端口就无法访问了,要再修改一下gitlab的yaml文件
cd /apps/devops_setup
vi gitlab-dev.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: gitlab-ds
- namespace: devops
- spec:
- selector:
- matchLabels:
- app: my-gitlab
- template:
- metadata:
- labels:
- app: my-gitlab
- spec:
- nodeSelector:
- app: jenkins
- volumes:
- - name: gitlab-config
- hostPath:
- path: /apps/devops_setup/data/gitlab/config
- type: DirectoryOrCreate
- - name: gitlab-logs
- hostPath:
- path: /apps/devops_setup/data/gitlab/logs
- type: DirectoryOrCreate
- - name: gitlab-data
- hostPath:
- path: /apps/devops_setup/data/gitlab/data
- type: DirectoryOrCreate
- containers:
- - name: gitlab
- image: gitlab/gitlab-ce:latest
- ports:
- - name: http
- containerPort: 30001 #修改这里
- volumeMounts:
- - name: gitlab-config
- mountPath: /etc/gitlab
- - name: gitlab-logs
- mountPath: /var/log/gitlab
- - name: gitlab-data
- mountPath: /var/opt/gitlab
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: gitlab-svc
- namespace: devops
- spec:
- ports:
- - port: 30001 #修改这里
- targetPort: http
- nodePort: 30001
- selector:
- app: my-gitlab
- type: NodePort
更新
kubectl apply -f gitlab-dev.yaml
- cd /apps/devops_setup/
-
-
- cd mytest/
- touch 11
- git add .
- git commit -m "test"
-
- git config --global credential.helper store
-
- git push
- #输入密码root 12345678qq
因为添加了上面的配置,所以后续再push就不用输入账户信息了
如果不想用上面的记录git信息的话删除 以下信息即可
vi ~/.gitconfig
说明
因为我这里用的云主机只有一台,后续不同的主机就以不同的标签进行识别
上面为了方便都使用的hostPath来做挂载,实际上可以改成pv卷,修改时登陆容器即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。