DevOps是一套完整的运维开发流程,能够实现快速的构建、测试和发布软件,整个流程包括敏捷开发->持续集成->持续交付->持续部署->DevOps,经过 Kubernetes,咱们能够实现容器在多个计算节点上的统一调度,能够将容器对接到持久存储、虚拟网络,还能够实现弹性伸缩等,提升了产品的迭代速度,kubernetes在DevOps中能够实现以下功能:前端
* 多集群管理
能够根据客户需求对开发,测试,生产环境部署多套kubernetes集群,每一个环境使用独立的物理资源,相互之间避免影响node
* 多环境一致性
Kubernetes是基于docker的容器编排工具,由于容器的镜像是不可变的,因此镜像把 OS、业务代码、运行环境、程序库、目录结构都包含在内,镜像保存在咱们的私有仓库,只要用户从咱们提供的私有仓库拉取镜像,就能保证环境的一致性linux
* 持续集成,持续部署,持续交付
可让产品快速迭代,自动部署,根据客户的要求达到持续交付的能力git
(1)在master1上安装nfs服务github
yum install nfs-utils -y systemctl start nfs
(2)在master1上建立一个nfs共享目录web
建立一个共享目录 mkdir /data/v1 -p 修改nfs配置文件 vim /etc/exports 在/etc/exports文件加入以下内容 /data/v1 192.168.80.0/24(rw,no_root_squash) 使配置文件生效 exportfs -arv 从新启动nfs服务 systemctl restart nfs
(1)建立名称空间kubectl create namespace jenkins-k8s
docker
(2)建立pv
cat pv.yamlvim
apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-k8s-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 192.168.80.180 path: /data/v1
kubectl apply -f pv.yamlapi
(3)建立pvc
cat pvc.yaml浏览器
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-k8s-pvc namespace: jenkins-k8s spec: resources: requests: storage: 10Gi accessModes: - ReadWriteMany
kubectl apply -f pvc.yaml
查看pvc和pv绑定是否成功
kubectl get pvc -n jenkins-k8s
看到以下说明绑定成功
(4)建立一个sa帐号
kubectl create sa jenkins-k8s-sa -n jenkins-k8s
(5)把上面的sa帐号作rbac受权
kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa
(6)经过deployment部署jenkins
cat jenkins-deployment.yaml
kind: Deployment apiVersion: apps/v1 metadata: name: jenkins namespace: jenkins-k8s spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: serviceAccount: jenkins-k8s-sa containers: - name: jenkins image: jenkins/jenkins:lts imagePullPolicy: IfNotPresent ports: - containerPort: 8080 name: web protocol: TCP - containerPort: 50000 name: agent protocol: TCP resources: limits: cpu: 1000m memory: 1Gi requests: cpu: 500m memory: 512Mi livenessProbe: httpGet: path: /login port: 8080 initialDelaySeconds: 60 timeoutSeconds: 5 failureThreshold: 12 readinessProbe: httpGet: path: /login port: 8080 initialDelaySeconds: 60 timeoutSeconds: 5 failureThreshold: 12 volumeMounts: - name: jenkins-volume subPath: jenkins-home mountPath: /var/jenkins_home volumes: - name: jenkins-volume persistentVolumeClaim: claimName: jenkins-k8s-pvc
chown -R 1000 /data/v1
kubectl apply -f jenkins-deployment.yaml
kubectl get pods -n jenkins-k8s
看到以下STATUS状态是running说明jenkins部署成功
(7)把jenkins前端加上service,提供外部网络访问
cat jenkins-service.yaml
apiVersion: v1 kind: Service metadata: name: jenkins-service namespace: jenkins-k8s labels: app: jenkins spec: selector: app: jenkins type: NodePort ports: - name: web port: 8080 targetPort: web nodePort: 30002 - name: agent port: 50000 targetPort: agent
kubectl apply -f jenkins-service.yaml
kubectl get svc -n jenkins-k8s
显示以下,记住下面的30002端口
在浏览器访问jenkins的web界面:
http://192.168.80.199:30002/login?from=%2F
在nfs服务端,也就是咱们的master1节点获取密码:
cat /data/v1/jenkins-home/secrets/initialAdminPassword
把上面获取到的密码拷贝到上面管理员密码下的方框里
点击继续,出现以下界面
安装推荐的插件
插件安装好以后显示以下:
用户名和密码都设置成admin,线上环境须要设置成复杂的密码,修改好以后点击保存并完成,出现以下界面
点击保存并完成,出现以下界面
(1)在jenkins中安装k8s插件Manage Jnekins------>Manage Plugins------>可选插件------>搜索kubernetes------>出现以下
选中kubernetes以后------>点击下面的直接安装------>安装以后选择从新启动jenkins--->重启以后登录jenkins便可
(1)点击系统管理->系统设置-新增一个云,在下拉菜单中选择kubernets并添加
(2)填写云kubernetes配置内容
注:Name值任意添加,Kubernetes URL值添加K8S apiserver链接地址和端口
(3)测试jenkins和k8s是否能够通讯
点击链接测试,若是显示Connection test successful,说明测试成功,Jenkins能够和k8s进行通讯
应用------>保存
(1)配置pod template
系统管理------>系统设置------>添加Pod模板------>Kubernetes Pod Template--->按以下配置
(2)在上面的pod template下添加容器添加容器------>Container Template------>按以下配置------>
在每个pod template右下脚都有一个Advanced,点击Advanced,出现以下
在Service Account处输入jenkins-k8s-sa,这个sa就是咱们最开始安装jenkins时的sa
(3)给上面的pod template添加卷添加卷------>选择Host Path Volume
上面配置好以后,应用------>保存
首页------>凭据------>点击Stores scoped to Jenkins下的第一行jenkins,显示以下----->
点击这个全局凭据,出现以下------>
username:xianchao password:1989***** ID:dockerhub 描述:随意
上面改好以后选择肯定便可
回到首页:
新建一个任务------>输入一个任务名称处输入jenkins-variable-test-deploy------>流水线------>肯定------>在Pipeline script处输入以下内容
node('testhan') { stage('Clone') { echo "1.Clone Stage" git url: "https://github.com/luckylucky421/jenkins-sample.git" script { build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() } } stage('Test') { echo "2.Test Stage" } stage('Build') { echo "3.Build Docker Image Stage" sh "docker build -t xianchao/jenkins-demo:${build_tag} ." } stage('Push') { echo "4.Push Docker Image Stage" withCredentials([usernamePassword(credentialsId: 'dockerhub', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) { sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword}" sh "docker push xianchao/jenkins-demo:${build_tag}" } } stage('Deploy to dev') { echo "5. Deploy DEV" sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-dev.yaml" sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-dev.yaml" // sh "bash running-devlopment.sh" sh "kubectl apply -f k8s-dev.yaml --validate=false" } stage('Promote to qa') { def userInput = input( id: 'userInput', message: 'Promote to qa?', parameters: [ [ $class: 'ChoiceParameterDefinition', choices: "YES\nNO", name: 'Env' ] ] ) echo "This is a deploy step to ${userInput}" if (userInput == "YES") { sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-qa.yaml" sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-qa.yaml" // sh "bash running-qa.sh" sh "kubectl apply -f k8s-qa.yaml --validate=false" sh "sleep 6" sh "kubectl get pods -n qa" } else { //exit } } stage('Promote to pro') { def userInput = input( id: 'userInput', message: 'Promote to pro?', parameters: [ [ $class: 'ChoiceParameterDefinition', choices: "YES\nNO", name: 'Env' ] ] ) echo "This is a deploy step to ${userInput}" if (userInput == "YES") { sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-prod.yaml" sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-prod.yaml" // sh "bash running-production.sh" sh "cat k8s-prod.yaml" sh "kubectl apply -f k8s-prod.yaml --record --validate=false" } } }
应用------>保存------>当即构建便可,打开blue ocean会看到以下流程,能够手动点击确认
DevOps工具链的完整流程图以下:
学无止境,了解更多关于kubernetes/docker/devops/openstack/openshift/linux/IaaS/PaaS相关内容,想要获取更多资料和免费视频,可按以下方式进入技术交流群
微信:luckylucky421302