单节点部署
ip:192.32.62.50(static)
主机名:k8s-master-node1
节点:kubernetes集群master,harbor仓库节点、
基础环境配置
设置静态ip
[root@k8s-master-node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9feb4a35-2525-4cd5-b143-62222944c90b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.32.62.50
PREFIX=24
GATEWAY=192.32.62.2
DNS1=192.32.62.2
设置主机映射
[root@k8s-master-node1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.32.62.50 master
[root@k8s-master-node1 ~]# ping master
PING master (192.32.62.50) 56(84) bytes of data.
64 bytes from master (192.32.62.50): icmp_seq=1 ttl=64 time=0.085 ms
^C
--- master ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.085/0.085/0.085/0.000 ms
关闭防火墙
关闭selinux
部署kubernetes集群环境
脚本部署harbor
使用传输工具将chinaskills_cloud_pass.iso 上传虚拟机,并解压到opt下
mount chinaskills_cloud_paas.iso /mnt/ ##将源挂载到mnt下面
cp -rf /mnt/* /opt/
指定源路径,因为centos7自带源已经失效
添加kubernetes源,其chinaskills自带
[k8s]
name = kubernetes-repo
baseurl = file:///opt/kubernetes-repo
gpgcheck = 0
enabled = 1
在opt目录下脚本运行
./k8s_harbor_install.sh
部署完成
web页面
输入master外网ip
默认账号密码,脚本里面是可以自己更改的虽然
# Harbor 默认账号:admin
# Harbor 默认密码:Harbor12345
上传镜像到harbor仓库
查看chinaskills自带images
进入opt
tree /opt/images/
使用脚本上传镜像
./k8s_image_push.sh
web页面在library下
部署kubernetes集群
./k8s_master_install.sh
这里我忘记截图了= =在配置文件找到token
web页面
输入:https://对外ip+30000端口
输入密钥
部署jenkins
将CICD_Offline.tar包上传至master节点
将其解压到 /opt 后上传至docker导入
解压后的/opt
上传
cd /opt
docker load -i /opt/jenkins.tar
编写jenkins编排文件
创建储存编排文件文件夹
其jenkins编排内容
[root@k8s-master-node1 docker-compose.yaml]# cat docker-jenkins.yaml
version: '3.1'
services:
jenkins:
image: 'jenkins/jenkins:2.262-centos'
volumes:
- /home/jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/bin/kubectl:/usr/local/bin/kubectl
- /root/.kube:/root/.kube
ports:
- "8080:8080"
expose:
- "8080"
- "50000"
privileged: true
user: root
restart: always
container_name: jenkins
启动jenkins
docker-compose -f docker-jenkins.yaml up -d
-f 指定文件路径
up 启动服务
d 后台运行
安装离线插件
cp -rfv /opt/plugins/* /home/jenkins_home/plugins/
重启此服务
web页面
查找其对外端口
ip+8080
查看其密码
容器内密码,在虚拟机目录上是没有的
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
新建管理用户
点击:
系统管理——安全——管理用户
新建用户:
账号springcloud 密码000000
使用新用户登录
创建完用户后,退出admin用户,使用新创建的用户进行登录Jenkins
依次点击 “系统配置”按钮进入系统配置界面,在“Resource root URL”处配置Jenkins URL,完成后点击保存
然后点击“系统管理”的“全局安全配置”,在授权策略中,允许匿名用户具有可读权限
部署gitlab
mkdir -p gitlab
cd gitlab/
vi docker-compose.yaml
输入以下:
注意不能带注释 我这里只是演示作用
version: '3'
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce:12.9.2-ce.0
volumes:
- /srv/gitlab/config:/etc/gitlab #映射配置文件
- /srv/gitlab/gitlab/logs:/var/log/gitlab #映射日志文件
- /srv/gitlab/gitlab/data:/var/opt/gitlab #映射数据文件
ports:
- 81:80
- 443:443
- 1022:22
privileged: true
restart: always
hostname: 192.32.62.50 ##ip
environment:
TZ: 'Asia/Shanghai'
Gitlab启动较慢,可以通过docker logs查看启动状态。启动完成后,在web端访问Gitlab
日志查询
docker logs + 服务名称
web端口:
http://IP:81
设置初始密码,最低8位数
登录
root
你设置的密码
新建gitlab项目
点击“Create a project”,创建项目 springcloud,可见等级选择“Public”
push源代码到gitlab的springcloud项目:
下载git命令,我不知道这里能不能用git bash = =
[root@k8s-master-node1 springcloud]# git config --global user.name "Administrator" ##设置全局变量,user的用户名
[root@k8s-master-node1 springcloud]# git config --global user.email "admin@ceshi.com" ##设置全局变量,user的邮箱
[root@k8s-master-node1 springcloud]# git remote remove origin ##从本地仓库删除origin仓库远程仓库信息,这是默认的远程目录
[root@k8s-master-node1 springcloud]# git remote add origin http://192.32.62.50:81/root/springcloud.git ##添加新的远程仓库,指定地址为上述我们创建的项目路径
[root@k8s-master-node1 springcloud]# git add . ##将当前springcloud项目add至暂存区
[root@k8s-master-node1 springcloud]# git commit -m "initial commit" ##将当前暂存区的目录提交至本地仓库,并指定 -m 打上标签,即注释
# 位于分支 master
无文件要提交,干净的工作区
[root@k8s-master-node1 springcloud]# git push -u origin master ##将在本地仓库的文件push至远程仓库
Username for 'http://192.32.62.50:81': root
Password for 'http://root@192.32.62.50:81':
Counting objects: 3192, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1428/1428), done.
Writing objects: 100% (3192/3192), 1.40 MiB | 1.57 MiB/s, done.
Total 3192 (delta 1233), reused 3010 (delta 1207)
remote: Resolving deltas: 100% (1233/1233), done.
To http://192.32.62.50:81/root/springcloud.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
总体思维
yum install -y git
cd /opt/springcloud
rm -rf .git* #删除git项目
git config --global user.name "Administrator" #设置全局用户
git config --global user.name "Administrator"
git init #初始化git仓库
git remote add origin http://192.32.62.50:81/root/springcloud.git #添加远程分支
git add . #添加当前文件
git commit -m "Initial commit" #给此仓库打上标签
git push -u origin master #推送分支
回到gitlab项目目录下,查看推送的项目
总体思维和使用github一致,用来本地和云端相互交接,也可多端互通
举例:
本地+github+宝塔
jenkins配置
就是让本地的jenkins和gitlab互联,通过token,一般服务都是这个理
可参考:╭(°A°`)╮ 你去哪了?!
1.点击管理区域的扳手图标
点击左侧导航栏的“Settings”→“Network”,设置“Outbound requests”,勾选”Allowrequests to the local network fromweb hooks and services“
并且勾选Save changes
2.创建 Gitlab API Token
点击 Gitlab 用户头像图标,并点击Settings
点击左侧导航栏的“Access Tokens”添加token,勾选所有复选框,token名称为jenkins,点击“Create personal accesstoken”生成 Token,时间为当前日期之后,这里是过期时间,如我写的11-23那么这天就会失效
复制 Token,后面配置 Jenkins 时会用到
最下面已经生成
3.登录 Jenkins 首页,点击“系统管理”→“系统配置”,配置 Gitlab 信息,取消勾选“Enable authentication for’/project’ end-point”
点击“添加”→“Jenkins”添加认证信息,将Gitlab API Token 填入
点击“Test Connection”进行测试
显示success
配置jenkins连接Maven
安装maven
1.将maven包复制到Jenkins容器中,并解压配置
由于Jenkins是采用docker in docker的方式启动的,所以需要在jenkins容器内安装maven:
#容器内部
cp -rf /opt/apache-maven-3.6.3-bin.tar.gz /home/jenkins_home/
docker exec -it jenkins bash
#容器内部
tar -zxvf /var/jenkins_home/apache-maven-3.6.3-bin.tar.gz -C .
mv apache-maven-3.6.3/ /usr/local/maven
vi/etc/profile
#在最后一行添加:
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin ##配置环境变量
vi /root/.bashrc
#./etc/bashrc在这一行的下面添加:
source /etc/profile ##不是最后一行,配置环境变量重载bash
#验证:
退出容器重新进入后:mvn -n(验证maven安装是否成功)
退出容器并再次进入,通过配置环境变量路径,配置bash脚本重载再重进容器时进行
2.登录 Jenkins 首页,点击“系统管理”→“全局工具配置”
点击“新增 Maven”,如图所示。取消勾选“自动安装”,填入maven 名称和安装路径,配置完成后点击“保存”
配置CI/CD
1.登录 Jenkins 首页,点击左侧导航栏“新建任务”,如图所示,选择构建一个流水线,并选择触发器,名称为springcloud
2.在流水线中,先去点击“流水线语法”,去生成对应的凭证出来
选择git:Git类型
添加凭证:为gitlab的用户与密码,仓库url一致为gitlab上面拉的仓库
生成流水线脚本并记住
我的是:git credentialsId: ‘ebc2d9f3-05b4-489a-b468-4ffa43cb8db1’, url: ‘http://192.32.62.50:81/root/springcloud.git ‘
3.写好流水线脚本,并点击“保存”
语法:
node{
stage('git clone'){
//check CODE
git credentialsId: 'ebc2d9f3-05b4-489a-b468-4ffa43cb8db1', url: 'http://192.32.62.50:81/root/springcloud.git '
}
stage('maven build'){
sh '''/usr/local/maven/bin/mvn package -DskipTests -f /var/jenkins_home/workspace/springcloud'''
}
stage('image build'){
sh '''
echo $BUILD_ID
docker build -t 192.32.62.50/springcloud/gateway:$BUILD_ID -f /var/jenkins_home/workspace/springcloud/gateway/Dockerfile /var/jenkins_home/workspace/springcloud/gateway
docker build -t 192.32.62.50/springcloud/config:$BUILD_ID -f /var/jenkins_home/workspace/springcloud/config/Dockerfile /var/jenkins_home/workspace/springcloud/config'''
}
stage('test'){
sh '''docker run -itd --name gateway 192.32.62.50/springcloud/gateway:$BUILD_ID
docker ps -a|grep springcloud|grep Up
if [ $? -eq 0 ];then
echo "Success!"
docker rm -f gateway
else
docker rm -f gateway
exit 1
fi
'''
}
stage('upload registry'){
sh '''docker login 192.32.62.50 -u=admin -p=Harbor12345
docker push 192.32.62.50/springcloud/gateway:$BUILD_ID
docker push 192.32.62.50/springcloud/config:$BUILD_ID'''
}
stage('deploy Rancher'){
//执行部署脚本
sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.32.62.50\\/springcloud\\/gateway:$BUILD_ID/g" /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml'
sh 'sed -i "s/sqshq\\/piggymetrics-config/192.32.62.50\\/springcloud\\/config:$BUILD_ID/g" /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml'
sh 'kubectl create ns springcloud'
sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config'
}
}