DevOps的个人学习
一、DevOps介绍
软件开发最初是由两个团队组成:
- 开发团队:负责设计和构建系统。
- 运维团队:负责测试代码后部署上线,确保系统稳定安全运行。
这两个看似目标不同的团队需要协同完成一个软件的开发。DevOps整合了开发与运维团队,旨在提高效率并持续工作。
软件开发过程及涉及工具
- PLAN:制定开发计划
- CODE:根据计划开始编码
- BUILD:构建并运行代码
- TEST:测试代码是否存在BUG或错误
- DEPLOY:手动和自动化测试后,认定代码准备好部署
- OPERATE:运维团队将代码部署到生产环境
- MONITOR:监控产品
- INTEGRATE:将监控阶段收到的反馈发送回PLAN阶段,形成闭环
二、Code阶段工具
在code阶段,使用Git作为版本控制工具,GitLab作为远程仓库。
Git安装
https://git-scm.com/ (傻瓜式安装)
GitLab安装
yum -y install git
docker search gitlab
docker pull gitlab/gitlab-ce
version: '3.1'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://10.1.106.68:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:2224'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
docker-compose up -d
http://10.1.106.70:8929/
Jenkins入门配置
由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。
构建任务
示例Pipeline脚本
environment {
harborUser='admin'
harborPasswd='Harbor12345'
harborAddress='192.168.11.102:80'
harborRepo='repo'
}
stages {
stage('拉取git仓库代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.11.101:8929/root/mytest.git']]])
}
}
stage('通过maven构建项目') {
steps {
sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage('通过SonarQube做代码质量检测') {
steps {
sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701'
}
}
// 其他stage...
}
post {
success {
dingtalk(
robot: 'Jenkins-DingDing',
type: 'MARKDOWN',
title: "success:${JOB_NAME}",
text: ["- 成功构建:${JOB_NAME}!\n- 版本:latest\n- 持续时间: ${currentBuild.durationString}"]
)
}
failure {
dingtalk(
robot: 'Jenkins-DingDing',
type: 'MARKDOWN',
title: "fail:${JOB_NAME}",
text: ["- 构建失败:${JOB_NAME}!\n- 版本:latest\n- 持续时间: ${currentBuild.durationString}"]
)
}
}
Kubernetes编排工具
10.1 Kubernetes介绍
Kubernetes是一个开源的用于管理云平台中多个主机上的容器化应用,其目标是让部署容器化的应用简单并且高效。
主要功能包括:
- 服务发现和负载均衡
- 存储编排
- 自动部署和回滚
- 自动完成装箱计算
- 自我修复
- 秘钥与配置管理
10.2 Kubernetes架构
Kubernetes搭建至少需要两个节点,一个Master负责管理,一个Slave搭建在工作服务器上负责分配。
组件及其功能:
- API Server:核心通讯组件
- controller-manager:资源调度
- etcd:存储集群状态信息
- scheduler:负责调度每个工作节点
- cloud-controller-manager:负责调度其他云服务产品
- kubelet:管理Pods上的容器
- kube-proxy:处理其他Slave或客户端的请求
- Pod:运行的容器
Harbor使用方式
Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor上,以及从Harbor上下载指定镜像。
添加用户构建项目
创建用户并设置项目为私有,对不同用户设置不同角色。
发布镜像到Harbor
修改镜像名称为 harbor地址/项目名/镜像名:版本
并推送:
docker login -u 用户名 -p 密码 Harbor地址
docker tag demo:v1.0 10.1.106.68/repository/demo:v1.0
docker push 10.1.106.68/repository/demo:v1.0
从Harbor拉取镜像
需要先配置 /etc/docker/daemon.json
文件。