一、部署KubesPhere
All-in-One部署
下载KK
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -
# 如果上面命令下载不了,可以使用这个
wget https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.0.7/kubekey-v3.0.7-linux-amd64.tar.gz
执行安装
# 所有节点安装
yum install -y conntrack socat
./kk create cluster --with-kubernetes v1.22.12 --with-kubesphere v3.3.2
登录访问
Account: admin
Password: P@88w0rd
多节点部署
下载KK
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -
# 如果上面命令下载不了,可以使用这个
wget https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.0.7/kubekey-v3.0.7-linux-amd64.tar.gz
创建配置文件
./kk create config --with-kubesphere v3.3.2
修改配置文件
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master, address: 192.168.17.10, internalAddress: 192.168.17.10, user: root, password: "junan@123"}
- {name: node1, address: 192.168.17.11, internalAddress: 192.168.17.11, user: root, password: "junan@123"}
- {name: node2, address: 192.168.17.12, internalAddress: 192.168.17.12, user: root, password: "junan@123"}
roleGroups:
etcd:
- master
control-plane:
- master
worker:
- node1
- node2
....
创建集群
# 所有节点安装
yum install -y conntrack socat
./kk create cluster -f config-sample.yaml
二、中间件部署
MySql
1.配置文件
配置文件名称:mysql-cnf 键名:my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
2.环境变量
//键
MYSQL_ROOT_PASSWORD
//值
root
3.数据路径
//数据挂载路径
/etc/mysql/conf.d
//配置文件路径
/var/lib/mysql
Redis
1.配置文件
配置文件名称:redis.conf 键名:redis.conf
appendonly yes
port 6379
bind 0.0.0.0
2.启动命令
//命令
redis-server
//参数
/etc/redis/redis.conf
3.数据路径
//数据挂载路径
/data
//配置文件路径
/etc/redis
Nacos
1.配置文件
配置文件名称:nacos-conf 键名:application.properties
### Web 相关配置 ###
server.servlet.contextPath=/nacos
server.port=8848
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
### 数据源配置 ###
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql.kch-dev:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
### 命名模块配置 ###
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
### 安全认证配置 ###
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=false
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
### 指定静态资源免认证路径 ###
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
2.环境变量
//键
MODE
//值
standalone
3.数据路径
//配置文件路径
/home/nacos/conf/application.properties
//子路径(防止覆盖该路径下所有配置文件)
application.properties
Xxl-Job
1.环境变量
//数据库连接url
SPRING_DATASOURCE_URL
jdbc:mysql://mysql.kch-dev:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
//数据库用户名
SPRING_DATASOURCE_USERNAME
root
//数据库密码
SPRING_DATASOURCE_PASSWORD
root
2.数据路径
//数据挂载路径
/data/applogs
三、devops自动化部署
开启devops
登录平台管理员账户,定制资源下搜索ClusterConfiguration
修改配置文件信息,设置devops中enabled=true,等待一段时间系统自动安装
创建devops项目
创建用户,设置新用户角色信息为platform-self-provisioner
登录新用户账户,创建DevOps项目
在企业空间下提前创建一个项目,然后创建流水线,自动化部署
后端流水线
注意:https://gitee.com/kangchenhu/ruoyi-admin.git
1.Java项目部署agent选择maven
2.拉取代码环节若有密码,需要配置凭证
3.镜像仓库需要配置凭证
4.后端打包镜像使用openjdk:8-jre,需提前上传到宿主机
5.部署服务时需要配置kubeConfig凭证
pipeline {
agent {
node {
label 'maven'
}
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'crpi-889yxb948z8n1h15.cn-hangzhou.personal.cr.aliyuncs.com'
DOCKERHUB_NAMESPACE = 'kch-images'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'devops-java-sample'
}
parameters {
string(name: 'TAG_NAME', defaultValue: '', description: '')
}
stages {
stage('拉取代码') {
agent none
steps {
container('maven') {
echo '========开始拉取代码========'
git(
url: 'https://gitee.com/kangchenhu/ruoyi-admin.git',
changelog: true,
poll: false
)
}
}
}
stage('编译代码') {
steps {
container('maven') {
echo '=======开始编译代码======='
sh 'mvn package'
}
}
}
stage('打包镜像') {
agent none
steps {
container('maven') {
echo '========开始打包镜像========='
sh 'docker build -t ruoyi-admin:latest .'
}
}
}
stage('推送镜像') {
agent none
steps {
container('maven') {
echo '========开始推送镜像========='
script {
def imageTag = "${REGISTRY}/${DOCKERHUB_NAMESPACE}/ruoyi-admin:SNAPSHOT-${BUILD_NUMBER}"
// 镜像打标签
sh "docker tag ruoyi-admin:latest ${imageTag}"
// 登录远程仓库并推送镜像
withCredentials([usernamePassword(
credentialsId: DOCKER_CREDENTIAL_ID,
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASS'
)]) {
sh """
echo "\$DOCKER_PASS" | docker login --username=\$DOCKER_USER --password-stdin ${REGISTRY}
docker push ${imageTag}
"""
}
}
echo '========删除本地镜像========='
script {
def imageTag = "${REGISTRY}/${DOCKERHUB_NAMESPACE}/ruoyi-admin:SNAPSHOT-${BUILD_NUMBER}"
echo "开始删除镜像:${imageTag} 和 ruoyi-admin:latest"
// 删除指定镜像和默认标签
sh """
docker rmi ${imageTag} || true
docker rmi ruoyi-admin:latest || true
"""
}
}
}
}
stage('部署服务') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigContent(
credentialsId: "${KUBECONFIG_CREDENTIAL_ID}",
variable: 'KUBECONFIG_CONFIG'
)
]) {
sh 'mkdir -p ~/.kube/'
sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
sh 'envsubst < deploy/deploy.yaml | kubectl apply -f -'
}
}
}
}
}
}
前端流水线
注意:https://gitee.com/kangchenhu/ruoyi-web.git
1.Vue项目部署agent选择nodejs
2.拉取代码环节若有密码,需要配置凭证
3.镜像仓库需要配置凭证
4.部署服务时需要配置kubeConfig凭证
5.前端服务需要暴露,可以选择NodePort,使用IP+端口访问
6.前端打包镜像使用nginx:apline,需提前上传到宿主机
7.前端服务需要暴露,可以选择ClusterIP + Ingress,使用域名+端口访问
(域名需要配置在本地C:\Windows\System32\drivers\etc)
pipeline {
agent {
node {
label 'nodejs'
}
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'crpi-889yxb948z8n1h15.cn-hangzhou.personal.cr.aliyuncs.com'
DOCKERHUB_NAMESPACE = 'kch-images'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'devops-java-sample'
}
stages {
stage('拉取代码') {
agent none
steps {
container('nodejs') {
git(
url: 'https://gitee.com/kangchenhu/ruoyi-web.git',
branch: 'master',
changelog: true,
poll: false,
credentialsId: 'git-id'
)
sh 'ls -al'
}
}
}
stage('项目编译') {
agent none
steps {
container('nodejs') {
sh 'npm install --registry=https://registry.npmmirror.com'
sh 'npm run build:prod'
sh 'ls'
}
}
}
stage('构建镜像') {
agent none
steps {
container('nodejs') {
sh 'ls'
sh 'docker build -t ruoyi-web:latest .'
}
}
}
stage('推送镜像') {
agent none
steps {
container('nodejs') {
echo '========开始推送镜像========='
script {
def imageTag = "${REGISTRY}/${DOCKERHUB_NAMESPACE}/ruoyi-web:SNAPSHOT-${BUILD_NUMBER}"
sh "docker tag ruoyi-web:latest ${imageTag}"
withCredentials([usernamePassword(
credentialsId: DOCKER_CREDENTIAL_ID,
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASS'
)]) {
sh """
echo "\$DOCKER_PASS" | docker login --username=\$DOCKER_USER --password-stdin ${REGISTRY}
docker push ${imageTag}
"""
}
}
echo '========删除本地镜像========='
script {
def imageTag = "${REGISTRY}/${DOCKERHUB_NAMESPACE}/ruoyi-web:SNAPSHOT-${BUILD_NUMBER}"
echo "开始删除镜像:${imageTag} 和 ruoyi-web:latest"
sh """
docker rmi ${imageTag} || true
docker rmi ruoyi-web:latest || true
"""
}
}
}
}
stage('部署服务') {
agent none
steps {
container('nodejs') {
withCredentials([
kubeconfigContent(
credentialsId: "${KUBECONFIG_CREDENTIAL_ID}",
variable: 'KUBECONFIG_CONFIG'
)
]) {
sh 'mkdir -p ~/.kube/'
sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
sh 'envsubst < deploy/deploy.yaml | kubectl apply -f -'
// nodePort方式暴露
// sh 'envsubst < deploy/nodePort.yaml | kubectl apply -f -'
// clusterId方式暴露 配合ingress
sh 'envsubst < deploy/clusterIP.yaml | kubectl apply -f -'
sh 'envsubst < deploy/ingress.yaml | kubectl apply -f -'
}
}
}
}
}
}